home *** CD-ROM | disk | FTP | other *** search
/ TestDrive Super Store 2.3 / TESTDRIVE_2.ISO / realizer / demos / apps / dataview / dvrep.rlz < prev    next >
Encoding:
Text File  |  1992-09-30  |  4.7 KB  |  159 lines

  1. '***********************************************************************
  2. '    DVRep.rlz                      
  3. '
  4. '    Executive Information System Demo
  5. '
  6. '    Copyright ⌐ 1991-1992 Computer Associates International, Inc.
  7. '    All rights reserved.
  8. '
  9. '***********************************************************************
  10.  
  11. FUNC ix(w, x, y, z)
  12.     RETURN (w-1)*100 + (x-1)*10 + (y-1)*2 + z
  13. END FUNC
  14.  
  15. FUNC iy(x, y)
  16.     RETURN (x-1)*5 + y
  17. END FUNC
  18.  
  19. PROC RepComputeItem(item, seg, dollars)
  20.     LOCAL per, div
  21.  
  22.     c.title = data.itemname[item]
  23.     c.numdiv = 5
  24.     FOR div = 1 to 5
  25.         c.divname[div] = Sprint("     DivisionP(0)", div)
  26.     NEXT div
  27.     FOR div = 1 to 5
  28.         FOR per = 1 to 5
  29.             c.sales[iy(div,per)] = 0
  30.             IF seg = 1 OR seg = 3 THEN
  31.                 c.sales[iy(div,per)] = c.sales[iy(div,per)] + data.sales[ix(item, per*2-1, div, 1)]
  32.                 c.sales[iy(div,per)] = c.sales[iy(div,per)] + data.sales[ix(item, per*2, div, 1)]
  33.             END IF
  34.             IF seg = 2 OR seg = 3 THEN        
  35.                 c.sales[iy(div,per)] = c.sales[iy(div,per)] + data.sales[ix(item, per*2-1, div, 2)]
  36.                 c.sales[iy(div,per)] = c.sales[iy(div,per)] + data.sales[ix(item, per*2, div, 2)]
  37.             END IF
  38.         NEXT per
  39.         FOR per = 2 to 5
  40.             delta[iy(div,per)] = (c.sales[iy(div,per)] - c.sales[iy(div,per-1)])/c.sales[iy(div, per-1)]*100
  41.         NEXT per
  42.     NEXT div
  43.     FOR per = 1 to 5
  44.         c.total[per] = 0
  45.         FOR div = 1 to 5
  46.             c.total[per] = c.total[per] + c.sales[iy(div,per)]
  47.         NEXT div
  48.     NEXT per
  49.     IF dollars THEN
  50.         c.sales = c.sales * data.itemprice[item]
  51.         c.total = c.total * data.itemprice[item]
  52.     END IF
  53. END PROC
  54.  
  55. PROC RepComputeCat(cat, seg, dollars)
  56.     LOCAL per, div, item
  57.  
  58.     c.title = data.catname[cat]
  59.     c.numdiv = data.catcount[cat]
  60.     ist = data.catindex[cat]
  61.     ie = data.catindex[cat] + data.catcount[cat] - 1
  62.     c.divname[1:c.numdiv] = data.itemname[ist:ie]
  63.     FOR item = ist to ie
  64.         itx = item - data.catindex[cat] + 1
  65.         FOR per = 1 to 5
  66.             c.sales[iy(itx, per)] = 0
  67.             IF seg = 1 OR seg = 3 THEN
  68.                 FOR div = 1 to 5
  69.                     c.sales[iy(itx,per)] = c.sales[iy(itx,per)] + data.sales[ix(item, per*2-1, div, 1)]
  70.                     c.sales[iy(itx,per)] = c.sales[iy(itx,per)] + data.sales[ix(item, per*2, div, 1)]
  71.                 NEXT div
  72.             END IF
  73.             IF seg = 2 OR seg = 3 THEN    
  74.                 FOR div = 1 to 5
  75.                     c.sales[iy(itx,per)] = c.sales[iy(itx,per)] + data.sales[ix(item, per*2-1, div, 2)]
  76.                     c.sales[iy(itx,per)] = c.sales[iy(itx,per)] + data.sales[ix(item, per*2, div, 2)]
  77.                 NEXT div
  78.             END IF
  79.             IF dollars THEN
  80.                 c.sales[iy(itx,per)] = c.sales[iy(itx,per)] * data.itemprice[item]
  81.             END IF
  82.         NEXT per
  83.         FOR per = 2 to 5
  84.             delta[iy(itx,per)] = (c.sales[iy(itx,per)] - c.sales[iy(itx,per-1)])/c.sales[iy(itx, per-1)]*100
  85.         NEXT per
  86.     NEXT item
  87.     FOR per = 1 to 5
  88.         c.total[per] = 0
  89.         FOR itx = 1 to c.numdiv
  90.             c.total[per] = c.total[per] + c.sales[iy(itx,per)]
  91.         NEXT itx
  92.     NEXT per
  93. END PROC
  94.  
  95. PROC ReportSales(item, dollars, seg)
  96.     LOCAL per
  97.     LOCAL logReport, font1
  98.     
  99.     Message("Computing...")
  100.     IF item < 0 THEN    
  101.         RepComputeCat(-item, seg, dollars)
  102.     ELSE
  103.         RepComputeItem(item, seg, dollars)
  104.     END IF
  105.  
  106.     Message("Formatting...")
  107.  
  108.     fmtName = "\                  \  "
  109.     fmtTitle1 = "                                        Sales"
  110.     fmtTitle2 = "                                   Percent Change"
  111.     fmtTitle3 = "                        1987    1988    1989    1990    1991"
  112.     fmtTItle4 = "                      ======= ======= ======= ======= ======="
  113.     fmtData1 = "####### ####### ####### ####### #######"
  114.     fmtData2 = " ####    ####    ####    ####    ####   "
  115.  
  116.     font1 = FontQUnique
  117.     FontNew(font1; "Courier", 10)
  118.     logReport = LogQUnique
  119.     LogNew(logReport; "Sales Report for " + c.title)
  120.     LogControl(_SetFont; font1)
  121.     LogControl(_Size; _Center, _Default, 90 pct, 80 pct)
  122.     SetSys(_PrintLog, logReport)
  123.     segstr = {"Hospital sales only", "Retail sales only", "Hospital and Retail sales"}
  124.     PRINT USING "Sales data for &  (&)"; c.title, segstr[seg]
  125.     IF dollars THEN
  126.         PRINT "All figures are in US dollars"
  127.     ELSE
  128.         PRINT "All figures are in numbers of prescriptions"
  129.     END IF
  130.     PRINT
  131.  
  132.     PRINT fmtTitle1
  133.     PRINT
  134.     PRINT fmtTitle3
  135.     PRINT
  136.     FOR div = 1 to c.numdiv
  137.         PRINT USING fmtName; c.divname[div];
  138.         PRINT USING fmtData1; c.sales[iy(div, 1)], c.sales[iy(div, 2)], c.sales[iy(div, 3)], c.sales[iy(div, 4)], c.sales[iy(div, 5)]
  139.     NEXT div
  140.     PRINT fmtTitle4
  141.  
  142.     PRINT USING String$(Len(fmtName), 32) + fmtData1; c.total[1], c.total[2], c.total[3], c.total[4], c.total[5]        
  143.     PRINT
  144.     PRINT
  145.     PRINT fmtTitle2
  146.     PRINT
  147.     PRINT fmtTitle3
  148.     PRINT
  149.     FOR div = 1 to c.numdiv
  150.         PRINT USING fmtName; c.divname[div];
  151.         PRINT USING fmtData2; 0, delta[iy(div, 2)], delta[iy(div, 3)], delta[iy(div, 4)], delta[iy(div, 5)]
  152.     NEXT div
  153.  
  154.     UnMessage
  155.     LogControl(_Show)
  156.     SetSys(_PrintLog, _PrintLog)
  157. END PROC
  158.  
  159.