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