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

  1. '***********************************************************************
  2. '    DVChart.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 iz(x, y)
  12.     RETURN (x-1)*10 + y
  13. END FUNC
  14.  
  15. FUNC iw(w, x, y)
  16.     RETURN (w-1)*20 + (x-1)*2 + y
  17. END FUNC
  18.  
  19. PROC ChComputeItem(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("     Division P(0)", div)
  26.     NEXT div
  27.     FOR div = 1 to 5
  28.         FOR per = 1 to 10
  29.             c.sales[iz(div,per)] = 0
  30.             IF seg = 1 OR seg = 3 THEN
  31.                 c.sales[iz(div,per)] = c.sales[iz(div,per)] + data.sales[ix(item, per, div, 1)]
  32.             END IF
  33.             IF seg = 2 OR seg = 3 THEN        
  34.                 c.sales[iz(div,per)] = c.sales[iz(div,per)] + data.sales[ix(item, per, div, 2)]
  35.             END IF
  36.         NEXT per
  37.     NEXT div
  38.     IF dollars THEN
  39.         c.sales = c.sales * data.itemprice[item]
  40.     END IF
  41. END PROC
  42.  
  43. PROC ChComputeCat(cat, seg, dollars)
  44.     LOCAL per, div, item
  45.  
  46.     c.title = data.catname[cat]
  47.     c.numdiv = data.catcount[cat]
  48.     ist = data.catindex[cat]
  49.     ie = data.catindex[cat] + data.catcount[cat] - 1
  50.     c.divname[1:c.numdiv] = data.itemname[ist:ie]
  51.     c.firstitem = ist
  52.     c.seg = seg
  53.     c.dollars = dollars
  54.     FOR item = ist to ie
  55.         itx = item - data.catindex[cat] + 1
  56.         FOR per = 1 to 10
  57.             c.sales[iz(itx, per)] = 0
  58.             IF seg = 1 OR seg = 3 THEN
  59.                 c.sales[iz(itx, per)] = data.divsum[iw(item,per,1)]
  60.             END IF
  61.             IF seg = 2 OR seg = 3 THEN    
  62.                 c.sales[iz(itx, per)] = c.sales[iz(itx, per)] + data.divsum[iw(item,per,2)]
  63.             END IF
  64.             IF dollars THEN
  65.                 c.sales[iz(itx,per)] = c.sales[iz(itx,per)] * data.itemprice[item]
  66.             END IF
  67.         NEXT per
  68.         FOR per = 2 to 10
  69.             delta[iz(itx,per)] = (c.sales[iz(itx,per)] - c.sales[iz(itx,per-1)])/c.sales[iz(itx, per-1)]*100
  70.         NEXT per
  71.     NEXT item
  72. END PROC
  73.  
  74. PROC ChartSales(item, dollars, seg)
  75.     LOCAL per, x
  76.     LOCAL chartReport, font1
  77.     
  78.     Message("Computing...")
  79.     IF item < 0 THEN    
  80.         ChComputeCat(-item, seg, dollars)
  81.     ELSE
  82.         ChComputeItem(item, seg, dollars)
  83.     END IF
  84.  
  85.     Message("Formatting...")
  86.  
  87.     chartReport = ChartQUnique
  88.     ChartNew(chartReport; "Sales Data for " + c.title)
  89.  
  90.     segstr = {"Hospital Sales Only", "Retail Sales Only", "Hospital and Retail Sales"}
  91.     ChartSetTitle(segstr[seg])
  92.     IF dollars THEN
  93.         ChartText(_Center, _Top, "All figures are in US dollars", _Screen)
  94.     ELSE
  95.         ChartText(_Center, _Top, "All figures are in numbers of prescriptions", _Screen)
  96.     END IF
  97.     PRINT
  98.  
  99.     FOR div = 1 to c.numdiv
  100.         ChartSetColor(div+2)
  101.         x[1:10] = c.sales[iz(div,1):iz(div,10)]
  102.         ChartLine(x)
  103.         ChartMark(x)
  104.         ChartSetKey(c.divname[div])
  105.         IF item < 0 THEN
  106.             FOR per = 1 to 10
  107.                 EXECUTE Sprint("ChartP(0).pP(0)[div] = c.sales[iz(div,per)]", chartReport, per)
  108.             NEXT per
  109.         END IF
  110.     NEXT div
  111.     ChartSetXAxis(AddToDate(StrToDate("6/1/86"), 0, Index(10)*6), "D(M3 Y1)", 1)
  112.     ChartControlKey(_Show)
  113.     IF item < 0 THEN
  114.         ChartSetProc(chartprocDV)
  115.         EXECUTE Sprint("ChartP(0).firstitem = c.firstitem", chartReport)
  116.         EXECUTE Sprint("ChartP(0).seg = c.seg", chartReport)
  117.         EXECUTE Sprint("ChartP(0).dollars = c.dollars", chartReport)
  118.     END IF
  119.     UnMessage
  120.     ChartControl(_Show)
  121. END PROC
  122.  
  123. PROC chartprocDV(params)
  124.     LOCAL x, y, a1, a2, a, n, m
  125.  
  126.     IF params[_Invoke] <> _Click THEN
  127.         EXIT PROC
  128.     END IF
  129.     ChartSelect(params[_ItemNum])
  130.     x = ChartQPtInfo(params[_XPos], params[_YPos])[1]
  131.     y = ChartQPtInfo(params[_XPos], params[_YPos])[2]
  132.     EXECUTE Sprint("a1 = ChartP(0).pP(0)", params[_ItemNum], Floor(x))
  133.     EXECUTE Sprint("a2 = ChartP(0).pP(0)", params[_ItemNum], Ceil(x))
  134.     a = a1 + (a2 - a1)*(x - Floor(x))
  135.     m =Abs(a - y)
  136.     n = FirstMatch(m, Min(m))
  137.     EXECUTE Sprint("n = n + ChartP(0).firstitem - 1", params[_ItemNum])
  138.     EXECUTE Sprint("ChartSales(n, ChartP(0).dollars,ChartP(0).seg)", params[_ItemNum], params[_ItemNum])
  139. END PROC
  140.  
  141.