home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / nfsrc21.zip / ACCTADJ.PRG < prev    next >
Text File  |  1992-09-28  |  3KB  |  112 lines

  1. /*
  2.  * File......: ACCTADJ.PRG
  3.  * Author....: Jo W. French dba Practical Computing
  4.  * CIS ID....: 74731,1751
  5.  * Date......: $Date:   28 Sep 1992 00:22:38  $
  6.  * Revision..: $Revision:   1.4  $
  7.  * Log file..: $Logfile:   C:/nanfor/src/acctadj.prv  $
  8.  * 
  9.  * The functions contained herein are the original work of Jo W. French
  10.  * and are placed in the public domain.
  11.  *
  12.  * Modification history:
  13.  * ---------------------
  14.  *
  15.  * $Log:   C:/nanfor/src/acctadj.prv  $
  16.  * 
  17.  *    Rev 1.4   28 Sep 1992 00:22:38   GLENN
  18.  * Jo French clean up.
  19.  * 
  20.  *    Rev 1.3   15 Aug 1991 23:04:58   GLENN
  21.  * Forest Belt proofread/edited/cleaned up doc
  22.  * 
  23.  *    Rev 1.2   14 Jun 1991 19:50:40   GLENN
  24.  * Minor edit to file header
  25.  * 
  26.  *    Rev 1.1   11 May 1991 00:34:00   GLENN
  27.  * Documentation rewrite.  Enter DOC header was rewritten and resubmitted
  28.  * by the author.  No code changes.
  29.  * 
  30.  *    Rev 1.0   01 Apr 1991 01:00:22   GLENN
  31.  * Nanforum Toolkit
  32.  *
  33.  */
  34.  
  35.  
  36. /*  $DOC$
  37.  *  $FUNCNAME$
  38.  *     FT_ACCTADJ()
  39.  *  $CATEGORY$
  40.  *     Date/Time
  41.  *  $ONELINER$
  42.  *     Adjust beginning or ending fiscal pd. dates to acctg. dates
  43.  *  $SYNTAX$
  44.  *     FT_ACCTADJ( [ <dGivenDate> ], [ <lIsEnd> ] ) -> dDate
  45.  *  $ARGUMENTS$
  46.  *     <dGivenDate> is any valid date in any valid format.
  47.  *     Defaults to DATE() if not supplied.
  48.  *
  49.  *     <lIsEnd> is a logical variable. .F. = adjust for beginning of
  50.  *     period mode, .T. = adjust for end of period mode.  Defaults to
  51.  *     beginning of period mode.
  52.  *  $RETURNS$
  53.  *     An adjusted date dependent upon mode and work week start day.
  54.  *  $DESCRIPTION$
  55.  *     Called by other FT_ACCT.. functions. The algorithm is:
  56.  *
  57.  *     Beginning of period mode:
  58.  *
  59.  *        If dGivenDate is in last 3 days of work week
  60.  *           Return next week's start date
  61.  *        Else
  62.  *           Return this week's start date
  63.  *        Endif
  64.  *
  65.  *     End of period mode:
  66.  *
  67.  *        If dGivenDate is in last 4 days of work week
  68.  *           Return this week's end date
  69.  *        Else
  70.  *           Return prior week's end date
  71.  *        Endif
  72.  *  $EXAMPLES$
  73.  *     Beginning of period mode (lIsEnd == .F.)
  74.  *
  75.  *       dDate := Ctod( "01/31/91" )  // In last 3 days of work week
  76.  *       ? FT_ACCTADJ( dDate )        // 02/03/91 (next week's start)
  77.  *
  78.  *       dDate := Ctod( "03/31/91" )  // Not in last 3 days of work week
  79.  *       ? FT_ACCTADJ( dDate )        // 03/31/91 (this week's start)
  80.  *
  81.  *     End of period mode (lIsEnd == .T.)
  82.  *
  83.  *       dDate := Ctod( "01/31/91" )  // In last 4 days of work week
  84.  *       ? FT_ACCTADJ( dDate, .T. )   // 02/02/91 (this week's end)
  85.  *
  86.  *       dDate := Ctod( "03/31/91" )  // Not in last 4 days of work week
  87.  *       ? FT_ACCTADJ( dDate, .T. )   // 03/30/91 (prior week's end)
  88.  *  $SEEALSO$
  89.  *     FT_DATECNFG() FT_DAYTOBOW()
  90.  *  $END$
  91. */
  92.  
  93. FUNCTION FT_ACCTADJ(dGivenDate, lIsEnd)
  94.  
  95.   LOCAL nTemp
  96.  
  97.   IF( VALTYPE(dGivenDate) != 'D', dGivenDate := DATE(), )
  98.   lIsEnd     := ( VALTYPE(lIsEnd) == 'L' )
  99.   nTemp      := FT_DAYTOBOW(dGivenDate)
  100.  
  101.   IF nTemp > ( 2 + IF(!lIsEnd, 1, 0) )
  102.      dGivenDate += ( 7 - nTemp )      // Next Week Start (This Week End + 1)
  103.   ELSE
  104.      dGivenDate -= nTemp              // This Week Start (Prior Week End + 1)
  105.   ENDIF
  106.  
  107.   IF( lIsEnd,  dGivenDate -= 1, )
  108.  
  109. RETURN dGivenDate
  110.  
  111.  
  112.