Application Payment

Sometimes, my applications are paid in several payment terms. Therefore I make a module to easier my application payment's handling. In dPay.prg, I do the following:


Here is the source code of dPay.prg:

/*----------------------------------------------------------------------------+
¦                                                                             ¦
¦   Projects: dRIP ¦ dBMaster Receivable - Inventory - Payable                ¦
¦   Designer: Hianoto Santoso                                                 ¦
¦   Author  : Hianoto Santoso                                                 ¦
¦   Language: CA-Clipper 5.2x                                                 ¦
¦                                                                             ¦
¦   Function: dPayCheck()                                                     ¦
¦   Purpose : Check the payment of the software                               ¦
¦                                                                             ¦
¦   History :                                                                 ¦
¦    - 27-Dec-97...Write dPayCheck()                                          ¦
¦                                                                             ¦
¦   Copyright (C) 1992-98, dBMaster Software Development.                     ¦
¦                                                                             ¦
+----------------------------------------------------------------------------*/

#include "App.ch"

static sFileName




init function getFileName()


  sFileName := strTran( dExeName(), ".EXE", ".PMT" )
return nil




function dPayCheck()


  if dPayAmount() < dPayValue()

     if date() > dPayValidDate()
        dBeep()
        dAlert( "Error: Please check your payment to Administrator !!;Program could not be continued." )
        exitSys()
     endif

     if date() == dPayValidDate()
        dBeep()
        dAlert( "Warning: Today is your last chance to pay !!;Please contact your Administrator immediately." )
     endif

     if date() >= dPayValidDate() - 14
        dBeep()
        dAlert( "Warning: You have " + allTrim( str( dPayValidDate() - date() ) ) + " day(s) to complete the payment !!;Please contact your Administrator immediately." )
     endif

  endif
return nil




function dPayInfo()
  local pictAmount := numPicture( 8, 0 )


  dAlert( "Software Value: Rp. " + transform( dPayValue(),  pictAmount ) + ",-;" + ;
          "  Already Paid: Rp. " + transform( dPayAmount(), pictAmount ) + ",-;" + ;
          "  Expired Date: " + d2c( dPayValidDate() ) + "        " )
return nil




function dPayValue()
  local nValue


  if isDemo()
     nValue := 0
  elseif isDeptStore()
     nValue := 15000000
  elseif isKaca()
     nValue := 15000000
  elseif isSparepart()
     nValue := 15000000
  endif
return nValue




function dPayValidDate()
return dAddMonth( dPayLastDate(), 6 )




function dPayLastDate()
  local dDate   := dInfoLinkDate()
  local sSelect := select()


  if file( sFileName )
     dNetUse( sFileName, TRUE, "Pay" )
     Pay->( dbGoTop() )
     do while ! Pay->( eof() )
        dDate := max( dDate, Pay->payTgl )
        Pay->( dbSkip() )
     enddo
     close Pay
  endif

  select ( sSelect )
return dDate




function dPayAmount()
  local nAmount := 0
  local sSelect := select()


  if file( sFileName )
     dNetUse( sFileName, TRUE, "Pay" )
     Pay->( dbGoTop() )
     do while ! Pay->( eof() )
        nAmount += val( crypt( Pay->payAmount, isWho() ) )
        Pay->( dbSkip() )
     enddo
     close Pay
  endif

  select ( sSelect )
return nAmount




function dPayBrowse()
  local oTB
  local pictAmount := "@Z " + numPicture( 8, 0 )
  local sColor     := setColor( "W+/RB, W+/N,,, W/N" )
  local sSelect    := select()


  if ! file( sFileName )
     dbCreate( sFileName, ,                    ;
        ,                    ;
         } )
  endif

  dNetUse( sFileName, TRUE, "Pay" )

  oTB := dTblDBF():new( 4, 16, dMaxRow()-3, maxCol()-17 )
  oTB:setWndCoords( 3, 15, dMaxRow()-2, maxCol()-16 )
  oTB:initDataSource()

  oTB:addColumn( dColBase():new( "Date",    ) )
  oTB:addColumn( dColBase():new( "Notes",   ) )
  oTB:addColumn( dColBase():new( "Amount",  ) )

  oTB:getColumn( 1 ):getPicture := "99-99-99"
  oTB:getColumn( 1 ):getValid   :=   oTB:getColumn( 1 ):getSave    :=   oTB:getColumn( 2 ):getPicture := "@K!"
  oTB:getColumn( 2 ):getSave    :=   oTB:getColumn( 3 ):getPicture := pictAmount
  oTB:getColumn( 3 ):getSave    := 
  oTB:readModal()

  close Pay


  // Restore environment
  select ( sSelect )
  setColor( sColor )
return nil