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:




/*----------------------------------------------------------------------------+
¦                                                                             ¦
¦   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, {                                    ;
        { "payTgl",    "D",     8,     0 },                    ;
        { "payNotes",  "C",    20,     0 },                    ;
        { "payAmount", "C",     8,     0 } } )
  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",   { || iif( empty( Pay->payTgl ), space( 8 ), dToC( Pay->payTgl ) ) } ) )
  oTB:addColumn( dColBase():new( "Notes",  { || Pay->payNotes } ) )
  oTB:addColumn( dColBase():new( "Amount", { || transform( val( crypt( Pay->payAmount, isWho() ) ), pictAmount ) } ) )

  oTB:getColumn( 1 ):getPicture := "99-99-99"
  oTB:getColumn( 1 ):getValid   := { |o| ! empty( cToD( o:varGet() ) ) }
  oTB:getColumn( 1 ):getSave    := { |n,o| Pay->payTgl := cToD( n ) }
  oTB:getColumn( 2 ):getPicture := "@K!"
  oTB:getColumn( 2 ):getSave    := { |n,o| Pay->payNotes := n }
  oTB:getColumn( 3 ):getPicture := pictAmount
  oTB:getColumn( 3 ):getSave    := { |n,o| Pay->payAmount := crypt( allTrim( strTran( n, ",", "" ) ), isWho() ) }

  oTB:readModal()

  close Pay


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

Go Top