home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol079 / sale.pli < prev    next >
Text File  |  1983-08-29  |  4KB  |  186 lines

  1. sale:
  2.     proc;
  3.     /* sale mode */
  4.     %replace
  5.         true  by '1'b,
  6.         false by '0'b;
  7.  
  8.     %include 'attrib.dcl';
  9.  
  10.     %include 'key.dcl';
  11.  
  12.     dcl
  13.         prc_start fixed ext,
  14.         prc_len   fixed ext,
  15.         qty_start fixed ext,
  16.         qty_len   fixed ext,
  17.         sales_tax dec(4,2) ext;
  18.     dcl
  19.         list  file,
  20.         sysin  file,
  21.         device char(11) var,
  22.         rec    char(max_siz);
  23.     dcl
  24.         open_data   entry,
  25.         close_data  entry,
  26.         input_key   entry(char(max_siz)),
  27.         locate_key  entry(char(max_siz)) returns(bit),
  28.         alter_rec   entry(char(max_siz)),
  29.         att_len     entry(fixed) returns(fixed);
  30.  
  31.     on endfile(sysin)
  32.         go to end_sale;
  33.  
  34.     call open_data();
  35.     put edit('Sales Mode','')(skip,a);
  36.         do while(true);
  37.         /* read next request */
  38.         put skip list('Output To: ');
  39.         get list(device);
  40.         open file(list) print title(device);
  41.         put file(list) page;
  42.         call transaction();
  43.         close file(list);
  44.         end;
  45.  
  46.     dcl
  47.         qty         fixed,
  48.         qty_sold    fixed,
  49.         item_no     fixed,
  50.         total_price dec(10,2);
  51.  
  52.     transaction:
  53.         proc;
  54.         on endfile(sysin)
  55.             go to summary;
  56.         on error(1)
  57.             begin;
  58.             put edit('Bad Data in Record','')
  59.                 (column(4),a,skip,a);
  60.             go to retry;
  61.             end;
  62.         call header();
  63.         total_price = 0.00;
  64.         item_no     = 1;
  65.         retry:
  66.             do while(true);
  67.             call input_key(rec);
  68.             if locate_key(rec) then
  69.                 do;
  70.                 put edit('Quantity Sold')
  71.                     (column(4),a(max_chr));
  72.                 get list(qty_sold);
  73.                 qty = get_qty();
  74.                 if qty_sold > qty then
  75.                     call too_few();
  76.                 else
  77.                     call itemize();
  78.                 end;
  79.             end;
  80.         summary:
  81.         call trailer();
  82.         end transaction;
  83.  
  84.     itemize:
  85.         proc;
  86.         /* process one item */
  87.         dcl
  88.             line_price dec(10,2),
  89.             item_price dec(10,2);
  90.         item_price = get_price();
  91.         line_price = dec(qty_sold,3) * item_price;
  92.         put file(list) edit('|',item_no,
  93.             '|',substr(rec,att_start(1),att_len(1)),
  94.             '|',qty_sold,
  95.             '|',item_price,
  96.             '|',line_price,'|')
  97.             (skip, a,f(2), a,a(max_chr), a,f(3),
  98.             a,p'$,$$9V.99', a,p'$$,$$9V.99', a);
  99.         /* operation sucessful, change record */
  100.         total_price = total_price + line_price;
  101.         item_no = item_no + 1;
  102.         call set_qty (qty - qty_sold);
  103.         call alter_rec(rec);
  104.         end itemize;
  105.  
  106.     header:
  107.         proc;
  108.         /* write the invoice header */
  109.         call line();
  110.         put file(list) edit
  111.         ('| #|','Item','|Qty|  Price | Sub Tot |')
  112.             (skip,a,a(max_chr),a);
  113.         call line();
  114.         end header;
  115.  
  116.     trailer:
  117.         proc;
  118.         /* write summary records */
  119.         dcl
  120.             tax dec(10,2);
  121.         call line();
  122.         put file(list) edit
  123.             ('|','Sub Total','',total_price,'|') (r(fmt));
  124.         tax = total_price * sales_tax / 100 + .005;
  125.         put file(list) edit
  126.             ('|','Sales Tax','',tax,'|') (r(fmt));
  127.         total_price = total_price + tax;
  128.         call line();
  129.         put file(list) edit
  130.             ('|','Total','',total_price,'|') (r(fmt));
  131.         call line();
  132.         fmt: format
  133.             (skip, a,a(15),a(max_chr),p'$ZZZ,ZZ9V.99',a);
  134.         end trailer;
  135.  
  136.     line:
  137.         proc;
  138.         /* write a line of '-' */
  139.         dcl
  140.             i fixed;
  141.         put file(list) skip edit
  142.             (('-' do i = 1 to max_chr + 28)) (a);
  143.         end line;
  144.  
  145.     get_price:
  146.         proc returns(dec(10,2));
  147.         /* get price field for current record */
  148.         dcl
  149.             i fixed,
  150.             v char(max_chr) var;
  151.         v = substr(rec,prc_start,prc_len);
  152.         /* remove trailing blanks */
  153.         i = verify(v,'0123456789.');
  154.         if i > 0 then
  155.             v = substr(v,1,i-1);
  156.         return (v);
  157.         end get_price;
  158.  
  159.     get_qty:
  160.         proc returns(fixed);
  161.         /* get quantity for current record */
  162.         return (substr(rec,qty_start,qty_len));
  163.         end get_qty;
  164.  
  165.     set_qty:
  166.         proc(c);
  167.         /* set the quantity field for current record */
  168.         dcl
  169.             c fixed,
  170.             v char(9) var;
  171.         v = c;
  172.         substr(rec,qty_start,qty_len) =
  173.             substr(v,verify(v,' '));
  174.         end set_qty;
  175.  
  176.     too_few:
  177.         proc;
  178.         put edit('Only',qty,'In Inventory','')
  179.             (column(4),a,f(6),x(1),a,skip);
  180.         end too_few;
  181.  
  182.     end_sale:
  183.     call close_data();
  184.     close file(list);
  185.     end sale;
  186.