home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / utilsa / bank / BANK.OPL < prev   
Text File  |  1992-04-12  |  9KB  |  508 lines

  1. PROC bank:
  2.     LOCAL ld%,lm%,ly%,k%,f$(20)
  3.     GLOBAL file$(128),fileso$(128),bal
  4.     k%=290
  5.     f$="LOC::M:\OPD\BANK"
  6.     TRAP MKDIR f$+"\SO"
  7.     DO
  8.         IF k%=290
  9.             mINIT
  10.             mCARD "File","Open",%O,"Create",%C
  11.             IF ld%
  12.                 mCARD "Edit","Transact",%T,"Add S/O",%S,"Delete S/O",%D,"Edit S/O",%E,"Verify",%V
  13.                 mCARD "View","First",%F,"Next",%N,"Back",%B,"Last",%L
  14.                 mCARD "Special","Print",%P,"Exit",%X
  15.             ENDIF
  16.             k%=MENU
  17.         ENDIF
  18.         IF k%=%c
  19.             dINIT "Create New File"
  20.             file$=f$+"\*.odb"
  21.             dFILE file$,"",25
  22.             IF DIALOG
  23.                 TRAP USE a : TRAP CLOSE
  24.                 TRAP USE b : TRAP CLOSE
  25.                 setfilso: : bal=0
  26.                 CREATE file$,a,r$,d$,s,b,dy%,mn%,yr%
  27.                 CREATE fileso$,b,i$,amt,nop%,pm%,pd%
  28.                 addtrans:("Opening Balance")
  29.                 IF yorn%:("Any S/Orders")
  30.                     addso:
  31.                 ELSE
  32.                     USE b
  33.                     b.pm%=0 : APPEND : ERASE
  34.                 ENDIF
  35.                 USE a : FIRST
  36.             ELSE
  37.                 k%=290 : CONTINUE
  38.             ENDIF
  39.         ELSEIF k%=%o
  40.             dINIT "Open File"
  41.             file$=f$+"\*.odb"
  42.             dFILE file$,"",16
  43.             IF DIALOG
  44.                 TRAP USE a : TRAP CLOSE
  45.                 TRAP USE b : TRAP CLOSE
  46.                 setfilso: : bal=0
  47.                 OPEN file$,a,r$,d$,s,b,dy%,mn%,yr%
  48.                 OPEN fileso$,b,i$,amt,nop%,pm%,pd%
  49.                 USE a : LAST
  50.                 bal=a.b : FIRST
  51.             ELSE
  52.                 k%=290 : CONTINUE
  53.             ENDIF
  54.         ELSEIF k%=%x
  55.             BREAK
  56.         ENDIF
  57.  
  58.         IF k%=0
  59.             break
  60.         ENDIF
  61.  
  62.         IF ld%<>DAY OR lm%<>MONTH OR ly%<>YEAR
  63.             proso:
  64.             ld%=DAY : lm%=MONTH : ly%=YEAR
  65.         ENDIF
  66.  
  67.         IF k%=%s
  68.             addso:
  69.         ELSEIF k%=%d OR k%=%e
  70.             amendso:(k%)
  71.         ELSEIF k%=%t
  72.             DO
  73.                 addtrans:("")
  74.             UNTIL NOT yorn%:("Add Another")
  75.         ELSEIF k%=%v
  76.             verify:
  77.         ELSEIF k%=%f
  78.             FIRST
  79.         ELSEIF k%=%n
  80.             NEXT
  81.             IF EOF
  82.                 LAST
  83.             ENDIF
  84.         ELSEIF k%=%b
  85.             BACK
  86.         ELSEIF k%=%l
  87.             LAST
  88.         ELSEIF k%=%p
  89.             print:
  90.         ENDIF
  91.         k%=display:
  92.     UNTIL k%=0
  93.     TRAP CLOSE
  94.     TRAP CLOSE
  95. ENDP
  96.  
  97.  
  98. PROC setfilso:
  99.     REM Setup filename for standing orders
  100.     LOCAL p%(6)
  101.     fileso$=PARSE$(file$,"",p%())
  102.     IF p%(5)-p%(4)>6
  103.         fileso$=left$(fileso$,p%(5)-3)+"SO"+right$(fileso$,len(fileso$)-(p%(5)-1))
  104.     ELSE
  105.         fileso$=left$(fileso$,p%(5)-1)+"SO"+right$(fileso$,len(fileso$)-p%(5)+1)
  106.     ENDIF
  107.     fileso$=PARSE$(fileso$,"",p%())
  108.     fileso$=left$(fileso$,p%(4)-1)+"SO\"+right$(fileso$,len(fileso$)-p%(4)+1)
  109. ENDP
  110.  
  111. PROC display:
  112.     REM Display current transaction
  113.     LOCAL c%,a%
  114.     IF COUNT = POS
  115.         BUSY "Last Record"
  116.     ENDIF
  117.     DO
  118.         dINIT
  119.         dTEXT "Date",NUM$(a.dy%,2)+"/"+NUM$(a.mn%,2)+"/"+NUM$(a.yr%-(INT(a.yr%/100)*100),2)
  120.         IF LEN(a.r$)
  121.             dTEXT "Reference",a.r$
  122.         ENDIF
  123.         IF LEN(a.d$)
  124.             dTEXT "Desc.    ",a.d$
  125.         ENDIF
  126.         dTEXT "Amount",FIX$(a.s,2,-7),1
  127.         dTEXT "Balance",FIX$(a.b,2,-9),1
  128.         dCHOICE c%,"Option","Next,Back,First,Last,Menu"
  129.         a%=DIALOG
  130.  
  131.         IF c%=1
  132.             c%=%n
  133.         ELSEIF c%=2
  134.             c%=%b
  135.         ELSEIF c%=3
  136.             c%=%f
  137.         ELSEIF c%=4
  138.             c%=%l
  139.         ELSE
  140.             c%=290
  141.         ENDIF
  142.     UNTIL c%<>0
  143.     BUSY OFF
  144.     RETURN c%
  145. ENDP
  146.  
  147. PROC addtrans:(d$)
  148.     REM Add an account transaction
  149.     LOCAL a$(50),r$(20),c%,amt,a%
  150.     a$=d$
  151.     DO
  152.         dINIT "Add Transaction"
  153.         dEDIT r$,"Reference",30
  154.         dEDIT a$,"Desc.",30
  155.         dCHOICE c%,"","Debit,Credit"
  156.         dFLOAT amt,"Amount",0,99999
  157.         a%=DIALOG
  158.     UNTIL amt<>0 or a%=0
  159.     IF a%
  160.         IF c%=1
  161.             amt=-amt
  162.         ENDIF
  163.         bal=bal+amt
  164.         USE a
  165.         a.dy%=DAY : a.mn%=MONTH : a.yr%=YEAR
  166.         a.s=amt : a.b=bal
  167.         a.d$=a$ : a.r$=r$
  168.         APPEND
  169.     ENDIF
  170. ENDP
  171.  
  172.  
  173. PROC addso:
  174.     REM Add a standing order
  175.     LOCAL payee$(30),amt,nop&,day&,c%,s%
  176.     USE b
  177.     DO
  178.         payee$="" : amt=0 : nop&=-1 : day&=1
  179.         dINIT "Add Standing Order"
  180.         dEDIT payee$,"Pay to",20
  181.         dCHOICE s%,"","Debit,Credit"
  182.         dFLOAT amt,"Amount",0,99999
  183.         dLONG nop&,"No of payments",-1,99999
  184.         dLONG day&,"Date paid",1,28
  185.         dCHOICE c%,"Already paid THIS Month","No,Yes"
  186.         IF DIALOG
  187.             IF s%=1
  188.                 amt=-amt
  189.             ENDIF
  190.             b.i$=payee$ : b.amt=amt
  191.             b.nop%=nop& : b.pd%=day&
  192.             IF c%=1
  193.                 b.pm%=(MONTH-1)-12*(MONTH<=1)
  194.             ELSE
  195.                 b.pm%=MONTH
  196.             ENDIF
  197.             APPEND
  198.         ENDIF
  199.     UNTIL NOT yorn%:("Add another")
  200.     proso:
  201. ENDP
  202.  
  203.  
  204. PROC amendso:(mode%)
  205.     LOCAL s$(30),t$(6),ret%,s%
  206.     LOCAL nop&,day&,amt,c%,payee$(30)
  207.     REM Amend a standing order. mode% holds %d for delete, %e for edit
  208.     USE b
  209.     IF mode%=%e
  210.         t$="Edit"
  211.     ELSE
  212.         t$="Delete"
  213.     ENDIF
  214.     DO
  215.         dINIT t$+" S/Order"
  216.         dEDIT s$,"Search String"
  217.         IF DIALOG
  218.             FIRST
  219.             IF FIND("*"+s$+"*")=0
  220.                 ALERT("Not Found")
  221.             ELSE
  222.                 DO
  223.                     payee$=b.i$ : nop&=b.nop% : day&=b.pd%
  224.                     c%=-(b.pm%>=MONTH)+1
  225.                     amt=abs(b.amt) : s%=-(b.amt>=0)+1
  226.                     dINIT t$+" Standing Order"
  227.                     dEDIT payee$,"Pay to",20
  228.                     dCHOICE s%,"","Debit,Credit"
  229.                     dFLOAT amt,"Amount",0,99999
  230.                     dLONG nop&,"No of payments",-1,99999
  231.                     dLONG day&,"Date paid",1,28
  232.                     dCHOICE c%,"Already paid THIS Month","No,Yes"
  233.                     ret%=DIALOG
  234.                     IF ret%
  235.                         IF s%=1
  236.                             amt=-amt
  237.                         ENDIF
  238.                         b.i$=payee$ : b.amt=amt
  239.                         b.nop%=nop& : b.pd%=day&
  240.                         IF c%=1
  241.                             b.pm%=(MONTH-1)-12*(MONTH<=1)
  242.                         ELSE
  243.                             b.pm%=MONTH
  244.                         ENDIF
  245.                         IF mode%=%e
  246.                             UPDATE
  247.                         ELSE
  248.                             IF yorn%:("Are you sure you want to delete")
  249.                                 ERASE
  250.                             ENDIF
  251.                         ENDIF
  252.                         BREAK
  253.                     ELSE
  254.                         NEXT
  255.                     ENDIF
  256.                     FIND("*"+s$+"*")
  257.                     IF EOF
  258.                         ALERT("No more matching records")
  259.                         BREAK
  260.                     ENDIF
  261.                 UNTIL 0
  262.             ENDIF
  263.         ELSE
  264.             BREAK
  265.         ENDIF
  266.     UNTIL NOT yorn%:(t$+" Another")
  267.     proso:
  268. ENDP
  269.  
  270.  
  271. PROC proso:
  272.     REM Process any outstanding standing orders
  273.     LOCAL f%,d%
  274.     USE b
  275.     FIRST
  276.     WHILE NOT EOF
  277.         IF b.nop%
  278.             f%=0
  279.             IF b.pm%<>MONTH
  280.                 IF b.pm%<>(MONTH-1)-12*(MONTH<=1)
  281.                     f%=1
  282.                 ELSE
  283.                     IF DAY>=b.pd%
  284.                         f%=1
  285.                     ENDIF
  286.                 ENDIF
  287.             ENDIF
  288.             IF f%
  289.                 d%=b.pd%
  290.                 b.pm%=(b.pm%+1)+12*(b.pm%>=12)
  291.                 USE a
  292.                 LAST
  293.                 a.r$="S/O"
  294.                 a.s=b.amt
  295.                 a.d$="S/O to "+b.i$+" for "+MONTH$(b.pm%)
  296.                 bal=bal+a.s : a.b=bal
  297.                 a.dy%=d% : a.mn%=b.pm% : a.yr%=YEAR
  298.                 APPEND
  299.                 USE b
  300.                 b.nop%=b.nop%-1
  301.                 UPDATE
  302.                 FIRST
  303.             ELSE
  304.                 NEXT
  305.             ENDIF
  306.         ELSE
  307.             NEXT
  308.         ENDIF
  309.     ENDWH
  310.     USE a
  311. ENDP
  312.  
  313.  
  314. proc BASO:
  315. LOCAL C%,D%
  316. USE B
  317. CLS
  318. DO
  319. rem D%=MENU("ADD,CHANGE,DELETE,END")
  320.  IF D%=1
  321.   addso:
  322.  ELSEIF D%=2
  323.   MSG:("Select S/Order")
  324.   BLAR:(2)
  325.   DO
  326. rem   C%=MENU("NAME,AMOUNT,DAY,MONTHS-LEFT,END")
  327.    IF C%=1
  328.     EDIT B.I$
  329.    ELSEIF C%=2
  330.     b.amt=EF:(b.amt,2)
  331.    ELSEIF C%=3
  332.     B.PD%=EI%:(B.PD%)
  333.     IF B.PD% > 28
  334.      B.PD%=28
  335.     ENDIF
  336.    ELSEIF C%=4
  337.     B.NOP%=EI%:(B.NOP%)
  338.    ELSE
  339.     C%=0
  340.    ENDIF
  341.   UNTIL C%=0
  342.   UPDATE
  343.  ELSEIF D%=3
  344.   MSG:("Select S/O")
  345.   BLAR:(2)
  346.   PRINT "Delete",LEFT$(B.I$,6);"-"
  347.   IF YORN%:
  348.    ERASE
  349.   ENDIF
  350.  ELSE D%=0
  351.  ENDIF
  352. UNTIL D%=0
  353. endp
  354.  
  355. PROC verify:
  356.     LOCAL agreed,amt,c$(128),c%,f%,p%(6)
  357.  
  358.     c$=PARSE$(file$,"",p%())
  359.     IF p%(5)-p%(4)>6
  360.         c$=left$(c$,p%(5)-3)+"XX"+right$(c$,len(c$)-(p%(5)-1))
  361.     ELSE
  362.         c$=left$(c$,p%(5)-1)+"XX"+right$(c$,len(c$)-p%(5)+1)
  363.     ENDIF
  364.  
  365.     IF EXIST(c$)
  366.         DELETE(c$)
  367.     ENDIF
  368.  
  369.     CREATE c$,c,r$,d$,s,b,dy%,mn%,yr%
  370.     USE a : FIRST
  371.  
  372.     agreed=a.b
  373.  
  374.     NEXT
  375.     WHILE NOT EOF
  376.         dINIT "Verifying Statement"
  377.         dTEXT "Date",NUM$(a.dy%,2)+"/"+NUM$(a.mn%,2)+"/"+RIGHT$(NUM$(a.yr%,4),2)
  378.         IF LEN(a.r$)
  379.             dTEXT "Reference",a.r$
  380.         ENDIF
  381.         IF LEN(a.d$)
  382.             dTEXT "Desc.    ",a.d$
  383.         ENDIF
  384.         dTEXT "Amount",FIX$(a.s,2,-7),1
  385.         dCHOICE c%,"On Stmnt?","Yes,No,Adjust"
  386.         IF DIALOG
  387.             IF c%=1
  388.                 agreed=agreed+a.s
  389.             ELSEIF c%=2
  390.                 c.r$=a.r$ : c.d$=a.d$ : c.s=a.s : c.b=0
  391.                 c.dy%=a.dy% : c.mn%=a.mn% : c.yr%=a.yr%
  392.                 USE c : APPEND
  393.             ELSE
  394.                 DO
  395.                     dINIT "Adjust Transaction"
  396.                     dTEXT "Reference",a.r$
  397.                     dTEXT "Desc.",a.d$
  398.                     dCHOICE c%,"","Debit,Credit"
  399.                     dFLOAT amt,"Amount",0,99999
  400.                     f%=DIALOG
  401.                 UNTIL amt<>0 or f%=0
  402.                 IF f%
  403.                     IF c%=1
  404.                         amt=-amt
  405.                     ENDIF
  406.                     agreed=agreed+amt
  407.                 ELSE
  408.                     GOTO tidyup::
  409.                 ENDIF
  410.             ENDIF
  411.         ELSE
  412.             GOTO tidyup::
  413.         ENDIF
  414.         USE A : NEXT
  415.     ENDWH
  416.  
  417.     IF yorn%:("Items still on stmt")
  418.         f%=1
  419.         WHILE f%
  420.             amt=0
  421.             dINIT "Adjust Transaction"
  422.             dCHOICE c%,"","Debit,Credit"
  423.             dFLOAT amt,"Amount",0,99999
  424.             dBUTTONS "More",%M,"End",%E
  425.             f%=DIALOG
  426.             IF f%
  427.                 IF c%=1
  428.                     amt=-amt
  429.                 ENDIF
  430.                 agreed=agreed+amt
  431.                 IF f%=%e
  432.                     f%=0
  433.                 ENDIF
  434.             ENDIF
  435.         ENDWH
  436.     ENDIF
  437.  
  438.     USE c : LAST : c%=COUNT
  439.     c.r$="" : c.d$="Opening Balance"
  440.     c.s=0 : c