/******************************************************************************
*
*	A D D R E S S A S S I S T  3
*
*	© 1994-97 Quarz Development / Alex H. Schneider
*
*******************************************************************************
*******************************************************************************
*
*	ErinnereGeburtstage.arx
*
*	Original von Frank Pecher
*	Changes for AddressAssist 3 by Alex H. Schneider
*                                                                      
*	Benutzung siehe Rexx/LiesMich.AREXX
*                                                                      
*	$Id:$
*
******************************************************************************/

DAYSBEFORE  = 21
DAYSPASSED  = 5

salute   =  0
last     =  1
first	 =  2
address1 =  3
address2 =  4
place 	 =  5
phone1   =  6
phone2	 =  7
free1	 =  8
free2	 =  9
free3	 = 10
free4	 = 11
code	 = 12
remark1	 = 13
remark2  = 14

group1  = c2d(b2c('1'))
group2  = c2d(b2c('10'))
group3  = c2d(b2c('100'))
group4  = c2d(b2c('1000'))
group5  = c2d(b2c('10000'))
group6  = c2d(b2c('100000'))
group7  = c2d(b2c('1000000'))
group8  = c2d(b2c('10000000'))
group9  = c2d(b2c('100000000'))
group10 = c2d(b2c('100000000')) * group2


/*************************************************************************
**  main
*/
if ~show(ports, "ADDRESSASSIST.1") then
do
    say "Bitte zuerst AddressAssist starten."
    exit 0
end

options RESULTS

today = date(i)
thisyear = substr(date(s), 1, 4)

address "ADDRESSASSIST.1" dialogbox 'ControlString="OK"' 'Dieses Skript errinnert an Jahrestage (Geburtstage etc.)\n in den folgenden ' || DAYSBEFORE || ' und den vergangenen ' || DAYSPASSED || ' Tagen.\n\nBeachte: es wird angenommen, dass die Daten für den Jahrestag im *Frei4* Feld sind und folgenden Formaten genügen: TT.MM.JJJJ, TT.MM.JJ or TT.MM. .'

do while RC = 0
address "ADDRESSASSIST.1" getnumofrecords

nrecord = result

do i=0 FOR nrecord

    call getrecord i

    bday = record.free4

    if bday ~= "" then
    do
        birthday = ConvDate(bday, thisyear)

        firstname = record.first
        lastname  = record.last

        if birthday ~= 0 then
        do
            firstname = record.first
            lastname  = record.last
            diff = birthday - today

            if right(record.free4, 1) = "." then
            do
                howold = ""
                st     = ""
            end
            else
            do
                howold = right(thisyear, 2) - right(record.free4, 2)
                if howold < 0 then
                    howold = howold + 100

                howlast = right(howold, 1)

                select
                    when howlast = 1 then st = "st "
                    when howlast = 2 then st = "nd "
                    when howlast = 3 then st = "rd "
                    otherwise             st = "th "
                end
            end


            if (diff = 1) | (diff = -1) then
                days = "Tag"
            else
                days = "Tagen"

            if (diff > 0) & (diff < DAYSBEFORE) then do
               notice = "In "diff days" ist "|| firstname " " || lastname||x2c(27)"s "howold||. "Geburtstag."
               address "ADDRESSASSIST.1" dialogbox 'ControlString="Weiter"' notice
	       end
            if (diff = 0) then do
                notice =  "*** Heute ist "firstname lastname||x2c(27)"s "howold||."Geburtstag. ***"
                address "ADDRESSASSIST.1" dialogbox 'ControlString="Weiter"' notice
	        end

            if (diff < 0) & (-diff < DAYSPASSED) then do
                notice = "Vor" diff * (-1) days" war "firstname lastname||x2c(27)"s "howold||."Geburtstag."
                address "ADDRESSASSIST.1" dialogbox 'ControlString="Weiter"' notice
	        end


        end
    end

end

address "ADDRESSASSIST.1" dialogbox "No more birthdays found!"
/* Enable listview refresh */

exit 0


/******************************************************************************
**  ConvDate()
*/
ConvDate: procedure
    arg bday,thisyear

    parse VAR bday day"."month"."year

    if length(day) < 2 then
        day = 0||day

    if length(month) < 2 then
        month = 0||month

    bd = thisyear||month||day

    return date(i, bd, s)


/******************************************************************************
*
*	SUBROUTINE to retrieve record data in compound variable
*
******************************************************************************/

getrecord:
   arg n

   address "ADDRESSASSIST.1" getrecorddata last R n
   record.last = result
   address "ADDRESSASSIST.1" getrecorddata first R n
   record.first = result
   address "ADDRESSASSIST.1" getrecorddata free1 R n
   record.free1 = result
   address "ADDRESSASSIST.1" getrecorddata free2 R n
   record.free2 = result
   address "ADDRESSASSIST.1" getrecorddata free3 R n
   record.free3 = result
   address "ADDRESSASSIST.1" getrecorddata free4 R n
   record.free4 = result
   address "ADDRESSASSIST.1" getrecorddata code R n
   record.code = result

   return
