From 36dffd53729573654f61ecc01a944e593e969fca Mon Sep 17 00:00:00 2001 From: HotSwapp <47397945+HotSwapp@users.noreply.github.com> Date: Mon, 6 Oct 2025 18:18:47 -0500 Subject: [PATCH] Initial project structure: directories, empty files, requirements.txt, and logo --- .DS_Store | Bin 0 -> 6148 bytes .cursor/rules/ai.mdc | 39 + TODO.md | 39 + app/main.py | 1 + app/models.py | 1 + app/templates/admin.html | 1 + app/templates/base.html | 1 + app/templates/case.html | 1 + app/templates/dashboard.html | 1 + app/templates/login.html | 1 + delphi-logo.webp | Bin 0 -> 4906 bytes old-csv/.DS_Store | Bin 0 -> 10244 bytes old-csv/DEPOSITS.csv | 1 + old-csv/EMPLOYEE.csv | 1 + old-csv/FILENOTS.csv | 1 + old-csv/FILES.csv | 1 + old-csv/FILESTAT.csv | 1 + old-csv/FILES_R.csv | 1 + old-csv/FILES_V.csv | 1 + old-csv/FILETYPE.csv | 1 + old-csv/FOOTERS.csv | 1 + old-csv/FVARLKUP.csv | 1 + old-csv/Forms/FORM_INX.csv | 1 + old-csv/Forms/FORM_LST.csv | 1 + old-csv/Forms/INX_LKUP.csv | 1 + old-csv/Forms/LIFETABL.csv | 1 + old-csv/Forms/NUMBERAL.csv | 1 + old-csv/GRUPLKUP.csv | 1 + old-csv/LEDGER.csv | 1 + old-csv/PAYMENTS.csv | 1 + old-csv/PHONE.csv | 1 + old-csv/PLANINFO.csv | 1 + old-csv/PRINTERS.csv | 1 + old-csv/Pensions/DEATH.csv | 1 + old-csv/Pensions/LIFETABL.csv | 1 + old-csv/Pensions/MARRIAGE.csv | 1 + old-csv/Pensions/NUMBERAL.csv | 1 + old-csv/Pensions/PENSIONS.csv | 1 + old-csv/Pensions/RESULTS.csv | 1 + old-csv/Pensions/SCHEDULE.csv | 1 + old-csv/Pensions/SEPARATE.csv | 1 + old-csv/QDROS.csv | 1 + old-csv/ROLEX_V.csv | 1 + old-csv/ROLODEX.csv | 1 + old-csv/RVARLKUP.csv | 1 + old-csv/SETUP.csv | 2 + old-csv/STATES.csv | 53 + old-csv/TRNSACTN.csv | 1 + old-csv/TRNSLKUP.csv | 1 + old-csv/TRNSTYPE.csv | 1 + old-database/.DS_Store | Bin 0 -> 6148 bytes old-database/DEPOSITS.SC | 409 +++++ old-database/FILCABNT.SC | 1040 +++++++++++ old-database/FILCABNT.SC2 | Bin 0 -> 31488 bytes old-database/FORM_MGR.SC | 597 ++++++ old-database/FORM_MGR.SC2 | Bin 0 -> 17408 bytes old-database/GENERATE.SC | 262 +++ old-database/GENERATE.SC2 | Bin 0 -> 9728 bytes old-database/LEDGER.SC | 397 ++++ old-database/LEDGER.SC2 | Bin 0 -> 12800 bytes old-database/MAIN_RH.SC2 | Bin 0 -> 9216 bytes old-database/Main_RH.SC | 155 ++ old-database/OFFICE.LIB | Bin 0 -> 117248 bytes old-database/Office/DEPOSITS.csv | 2002 +++++++++++++++++++++ old-database/Office/EMPLOYEE.csv | 1 + old-database/Office/FILENOTS.csv | 10 + old-database/Office/FILES.csv | 1 + old-database/Office/FILESTAT.csv | 1 + old-database/Office/FILES_R.csv | 1 + old-database/Office/FILES_V.csv | 1 + old-database/Office/FILETYPE.csv | 1 + old-database/Office/FOOTERS.csv | 1 + old-database/Office/FVARLKUP.csv | 1 + old-database/Office/Forms/FORM_INX.csv | 1 + old-database/Office/Forms/FORM_LST.csv | 1 + old-database/Office/Forms/INX_LKUP.csv | 1 + old-database/Office/Forms/LIFETABL.csv | 1 + old-database/Office/Forms/NUMBERAL.csv | 1 + old-database/Office/GRUPLKUP.csv | 1 + old-database/Office/LEDGER.csv | 1 + old-database/Office/PAYMENTS.csv | 1 + old-database/Office/PHONE.csv | 1 + old-database/Office/PLANINFO.csv | 1 + old-database/Office/PRINTERS.csv | 1 + old-database/Office/Pensions/DEATH.csv | 1 + old-database/Office/Pensions/LIFETABL.csv | 1 + old-database/Office/Pensions/MARRIAGE.csv | 1 + old-database/Office/Pensions/NUMBERAL.csv | 1 + old-database/Office/Pensions/PENSIONS.csv | 1 + old-database/Office/Pensions/RESULTS.csv | 1 + old-database/Office/Pensions/SCHEDULE.csv | 1 + old-database/Office/Pensions/SEPARATE.csv | 1 + old-database/Office/QDROS.csv | 1 + old-database/Office/ROLEX_V.csv | 1 + old-database/Office/ROLODEX.csv | 1 + old-database/Office/RVARLKUP.csv | 1 + old-database/Office/SETUP.csv | 1 + old-database/Office/STATES.csv | 1 + old-database/Office/TRNSACTN.csv | 1 + old-database/Office/TRNSLKUP.csv | 1 + old-database/Office/TRNSTYPE.csv | 1 + old-database/PENSION.SC | 685 +++++++ old-database/PENSION.SC2 | Bin 0 -> 23040 bytes old-database/QDRO.SC | 104 ++ old-database/QDRO.SC2 | Bin 0 -> 6144 bytes old-database/ROLODEX.SC | 388 ++++ old-database/ROLODEX.SC2 | Bin 0 -> 13824 bytes old-database/SETUP.SC | 212 +++ old-database/SETUP.SC2 | Bin 0 -> 10752 bytes old-database/UTILITY.SC | 621 +++++++ old-database/UTILITY.SC2 | Bin 0 -> 20480 bytes requirements.txt | 9 + static/logo/delphi-logo.webp | Bin 0 -> 4906 bytes 113 files changed, 7103 insertions(+) create mode 100644 .DS_Store create mode 100644 .cursor/rules/ai.mdc create mode 100644 TODO.md create mode 100644 app/main.py create mode 100644 app/models.py create mode 100644 app/templates/admin.html create mode 100644 app/templates/base.html create mode 100644 app/templates/case.html create mode 100644 app/templates/dashboard.html create mode 100644 app/templates/login.html create mode 100644 delphi-logo.webp create mode 100644 old-csv/.DS_Store create mode 100755 old-csv/DEPOSITS.csv create mode 100755 old-csv/EMPLOYEE.csv create mode 100755 old-csv/FILENOTS.csv create mode 100755 old-csv/FILES.csv create mode 100755 old-csv/FILESTAT.csv create mode 100755 old-csv/FILES_R.csv create mode 100755 old-csv/FILES_V.csv create mode 100755 old-csv/FILETYPE.csv create mode 100755 old-csv/FOOTERS.csv create mode 100755 old-csv/FVARLKUP.csv create mode 100755 old-csv/Forms/FORM_INX.csv create mode 100755 old-csv/Forms/FORM_LST.csv create mode 100755 old-csv/Forms/INX_LKUP.csv create mode 100755 old-csv/Forms/LIFETABL.csv create mode 100755 old-csv/Forms/NUMBERAL.csv create mode 100755 old-csv/GRUPLKUP.csv create mode 100755 old-csv/LEDGER.csv create mode 100755 old-csv/PAYMENTS.csv create mode 100755 old-csv/PHONE.csv create mode 100755 old-csv/PLANINFO.csv create mode 100755 old-csv/PRINTERS.csv create mode 100755 old-csv/Pensions/DEATH.csv create mode 100755 old-csv/Pensions/LIFETABL.csv create mode 100755 old-csv/Pensions/MARRIAGE.csv create mode 100755 old-csv/Pensions/NUMBERAL.csv create mode 100755 old-csv/Pensions/PENSIONS.csv create mode 100755 old-csv/Pensions/RESULTS.csv create mode 100755 old-csv/Pensions/SCHEDULE.csv create mode 100755 old-csv/Pensions/SEPARATE.csv create mode 100755 old-csv/QDROS.csv create mode 100755 old-csv/ROLEX_V.csv create mode 100755 old-csv/ROLODEX.csv create mode 100755 old-csv/RVARLKUP.csv create mode 100755 old-csv/SETUP.csv create mode 100755 old-csv/STATES.csv create mode 100755 old-csv/TRNSACTN.csv create mode 100755 old-csv/TRNSLKUP.csv create mode 100755 old-csv/TRNSTYPE.csv create mode 100644 old-database/.DS_Store create mode 100755 old-database/DEPOSITS.SC create mode 100755 old-database/FILCABNT.SC create mode 100755 old-database/FILCABNT.SC2 create mode 100755 old-database/FORM_MGR.SC create mode 100755 old-database/FORM_MGR.SC2 create mode 100755 old-database/GENERATE.SC create mode 100755 old-database/GENERATE.SC2 create mode 100755 old-database/LEDGER.SC create mode 100755 old-database/LEDGER.SC2 create mode 100755 old-database/MAIN_RH.SC2 create mode 100755 old-database/Main_RH.SC create mode 100755 old-database/OFFICE.LIB create mode 100644 old-database/Office/DEPOSITS.csv create mode 100644 old-database/Office/EMPLOYEE.csv create mode 100644 old-database/Office/FILENOTS.csv create mode 100644 old-database/Office/FILES.csv create mode 100644 old-database/Office/FILESTAT.csv create mode 100644 old-database/Office/FILES_R.csv create mode 100644 old-database/Office/FILES_V.csv create mode 100644 old-database/Office/FILETYPE.csv create mode 100644 old-database/Office/FOOTERS.csv create mode 100644 old-database/Office/FVARLKUP.csv create mode 100644 old-database/Office/Forms/FORM_INX.csv create mode 100644 old-database/Office/Forms/FORM_LST.csv create mode 100644 old-database/Office/Forms/INX_LKUP.csv create mode 100644 old-database/Office/Forms/LIFETABL.csv create mode 100644 old-database/Office/Forms/NUMBERAL.csv create mode 100644 old-database/Office/GRUPLKUP.csv create mode 100644 old-database/Office/LEDGER.csv create mode 100644 old-database/Office/PAYMENTS.csv create mode 100644 old-database/Office/PHONE.csv create mode 100644 old-database/Office/PLANINFO.csv create mode 100644 old-database/Office/PRINTERS.csv create mode 100644 old-database/Office/Pensions/DEATH.csv create mode 100644 old-database/Office/Pensions/LIFETABL.csv create mode 100644 old-database/Office/Pensions/MARRIAGE.csv create mode 100644 old-database/Office/Pensions/NUMBERAL.csv create mode 100644 old-database/Office/Pensions/PENSIONS.csv create mode 100644 old-database/Office/Pensions/RESULTS.csv create mode 100644 old-database/Office/Pensions/SCHEDULE.csv create mode 100644 old-database/Office/Pensions/SEPARATE.csv create mode 100644 old-database/Office/QDROS.csv create mode 100644 old-database/Office/ROLEX_V.csv create mode 100644 old-database/Office/ROLODEX.csv create mode 100644 old-database/Office/RVARLKUP.csv create mode 100644 old-database/Office/SETUP.csv create mode 100644 old-database/Office/STATES.csv create mode 100644 old-database/Office/TRNSACTN.csv create mode 100644 old-database/Office/TRNSLKUP.csv create mode 100644 old-database/Office/TRNSTYPE.csv create mode 100755 old-database/PENSION.SC create mode 100755 old-database/PENSION.SC2 create mode 100755 old-database/QDRO.SC create mode 100755 old-database/QDRO.SC2 create mode 100755 old-database/ROLODEX.SC create mode 100755 old-database/ROLODEX.SC2 create mode 100755 old-database/SETUP.SC create mode 100755 old-database/SETUP.SC2 create mode 100755 old-database/UTILITY.SC create mode 100755 old-database/UTILITY.SC2 create mode 100644 requirements.txt create mode 100644 static/logo/delphi-logo.webp diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..baa5d01b056b1bcc7f2655369a653df908f05c8f GIT binary patch literal 6148 zcmeHKF;2rk5Zp6SNJNSt8cG*52!WJ>g3gIdLz@pkVg!XFM=_!H11NX{qM+m#ye1L_ z4`BB8Y;4&^R0yG6X>aWH+<81c`FuoVChKTKG$f)PlF{pEc zEpK_Y`+XRn6`PGjrXWwk%yS9JH^S+|Bdpbn@5Z4O|~=IHGRYO4;Y z1L{EG0Dm8RBxB$(6SSWWG diff --git a/app/templates/base.html b/app/templates/base.html new file mode 100644 index 0000000..ebe8c10 --- /dev/null +++ b/app/templates/base.html @@ -0,0 +1 @@ + diff --git a/app/templates/case.html b/app/templates/case.html new file mode 100644 index 0000000..ec139a7 --- /dev/null +++ b/app/templates/case.html @@ -0,0 +1 @@ + diff --git a/app/templates/dashboard.html b/app/templates/dashboard.html new file mode 100644 index 0000000..996a5b5 --- /dev/null +++ b/app/templates/dashboard.html @@ -0,0 +1 @@ + diff --git a/app/templates/login.html b/app/templates/login.html new file mode 100644 index 0000000..76598de --- /dev/null +++ b/app/templates/login.html @@ -0,0 +1 @@ + diff --git a/delphi-logo.webp b/delphi-logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..4fde23ff42b0c6f1ff2c0ecee079c0e51119ca99 GIT binary patch literal 4906 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 literal 0 HcmV?d00001 diff --git a/old-csv/.DS_Store b/old-csv/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b61ebceda7c04c43704aa92fcf589b75f1196802 GIT binary patch literal 10244 zcmeHMU2GIp6uxI#=nNxtz#>2H$Y3FqT45;=it@AFQslqDwsc#5%IwZa$Ii~wo!Ko= zi}lIG;@^uJjWIF)#Rq&4P<%2mCYl%@NF~AxCO)aWn5c=G7|*?TwqbX{CrL_jC%O0B zpL6b=bLKm9=AI#hK(b)1A;chr$XF=V?!oF77oDf2>XM=nIteIGNRSx`hBL08sp1s_ z!UDnq!UDnq!UDnq)58K7v*{(PoQhglKv+OnV9EmY{a|3BG!fBpPT8viD|Q4xT8qQ% z!Zw}*n2Zt8L`26qWumwyKRrMs3egb*xH!%mlpSdzqT`%$aROYNK(sSNClp}2qnyFm z2_!fbwXlG&K(z&^+sq)_iBIw*S9X5Clo@uNAdJVafK*dEV`iOPC#&+&)Sy3-3eB(( zB+dL`+UxdxH&bexnL~~}GN3hd_+Dr_o}Fg`j%6dukzU8M{E?(z@T`Ezruc-c$jX4W zXmqq~V{41ix_;wWi!r(;9$(*LY*-f`8&l-@jjJC$I56bqJb!{~0nwX)%&yStY`IEq zQ0(9-iJDYNrE4XXlv%1eTklQx^&dVmplOA`K4`mU=oIa3W@rZkT77^T?#%k${=8j8 z&3d!GTgZ7hGdF9x*#a`#?XH`0PIK;T-gn*oe&B?T@Aaia`(#Mx=t5;v>HfgahaGIO zw1ew&u6cBiu3;)19J2EPQbjp8XTg$XO%Jzj*p%qpx%a?iy*78=y$!0`kH+&t=W)l* z_l!7JIM`bRpwBS#ZKrTB9tp zJ&dKgdc;Bn_xcvy#nLXwxDM{Ve5tMQ#BnOrX*r?KCea%EP>VjgT)Sm49TqQKRIjJ> z9$C9ABN`m9=pfSZ8F0YMjU}WtCYpJ(@$(^rwV0tB6LCJ=z{yliqnl3RBuRFWV`P|| zA`|2l@)kKyE|81lOY$wbO0JWi$gkuN@+bL={0+4*3mPB>%V7mH!AfX_t>mZe!?dX(FtRbC3 za?|?*oh{1$N#}0uY_Z37?A*0`&$M;6t8=(}&A)GfvAlWpy0*>jQ!wPXEkX5W2Vkf# z^A(1AhKdTrPI5m~my~?8(jj}$UF?%G^;)ftb3dpqlhIwY8N9nfT`8lZXft`YCALaN z*VH7|RoBGUD(HY(4ez$ZHYlz6N;h{)`@k*I%RYxO}UVvBOHAMRx@FrsYefR)Agpc7oT!c>|)PIARzXm^6;COF2j^Vd*92Zl0 z&-J|%I7*Q(ll{ad9tntpkrL@mdG5P9PF5)#VrJF1 z;dGCgRcNk=oaJFw^rn*qYWU3

du`~Uyb>6XR42nz@c{LdDE+HI+ANnEsa$gfHj~$vJ5S@VttwfWO(&7etgC$yOid+CC;U{IaX;LEjO7!#`gp2T=XFyu8ghYV? znu+W;_I%d+R*Plx#JVokw7Fc1s`13zN` zXEvodHH?wWix(|VNB&gYMLWajgMnaR%D}M==RE%}@t3I<`O}aX1p~pr zKVv{={jy)+rTlFD@_IaL6WTQzg?^a|1p4F>fC2ZBvtl%Rq7J{#F&i=q=Sw&+E&_#+ K=z@V?VBih+Q7i=j literal 0 HcmV?d00001 diff --git a/old-database/DEPOSITS.SC b/old-database/DEPOSITS.SC new file mode 100755 index 0000000..c1bd991 --- /dev/null +++ b/old-database/DEPOSITS.SC @@ -0,0 +1,409 @@ +MESSAGE "Writing deposit procedures to library..." + +PROC CLOSED Deposit_Table_Wait(M_Tbl, R, C, F_Num) + USEVARS Autolib, Rpt_St + PRIVATE Answer_Menu, Fld_Prompt, Old_Amt, New_Amt + DYNARRAY Fld_Prompt[] + + PROC Ask_Deposit_Book() + PRIVATE + File_No, Id, Re, From_Date, To_Date, Button + File_No = "" + Id = "" + Re = "" + From_Date = "" + To_Date = "" + FORMKEY + SHOWPULLDOWN + ENDMENU + CLEARSPEEDBAR + PROMPT "Enter selection criteria. Press Search to find matches, Cancel to quit." + MOUSE SHOW + SHOWDIALOG "Deposit Book Selection Criteria" + @4, 15 HEIGHT 15 WIDTH 50 + @1, 6 ?? "File No(s)." + ACCEPT @1,20 + WIDTH 18 "A60" PICTURE "*!" + TAG "" + TO File_No + @3, 6 ?? "Id(s)" + ACCEPT @3,20 + WIDTH 18 "A60" PICTURE "*!" + TAG "" + TO Id + @5, 6 ?? "Regarding" + ACCEPT @5,20 + WIDTH 18 "A60" PICTURE "*!" + TAG "" + TO Re + @7, 6 ?? "From Date" + ACCEPT @7,20 + WIDTH 11 "D" PICTURE "#[#]/##/##" + TAG "" + TO From_Date + @9, 6 ?? "To Date" + ACCEPT @9,20 + WIDTH 11 "D" PICTURE "#[#]/##/##" + TAG "" + TO To_Date + PUSHBUTTON @11,12 WIDTH 10 + "~S~earch" + OK + DEFAULT + VALUE "" + TAG "OK" + TO Button + PUSHBUTTON @11,25 WIDTH 10 + "~C~ancel" + CANCEL + VALUE "" + TAG "Cancel" + TO Button + ENDDIALOG + PROMPT "" + + RETURN + if (RetVal = True) then + MESSAGE "Searching..." + ECHO SLOW + + {Ask} TYPEIN "PAYMENTS" ENTER CHECK + if NOT ISBLANK(From_Date) then + TYPEIN (">= " + STRVAL(From_Date)) + endif + if NOT ISBLANK(From_Date) And NOT ISBLANK(To_Date) then + TYPEIN (", ") + endif + if NOT ISBLANK(To_Date) then + TYPEIN ("<= " + STRVAL(To_Date)) + endif + [File_No] = File_No + [Id] = Id + [Regarding] = Regarding + DO_IT! + Subset_Table = PRIVDIR() + "SUBSET" + RENAME TABLE() Subset_Table + MOVETO ("Payments(Q)") + CLEARIMAGE ; erase query image + MOVETO Subset_Table + if ISEMPTY(Subset_Table) then + CLEARIMAGE + No_Matches_Found() + else ; copy form and display on screen + COPYFORM "Payments" "2" Subset_Table "1" + View_Answer_Table(Subset_Table, 4, 0) + SLEEP 10000 +; Payments_Answer_Wait() + endif + endif + FORMKEY + MOUSE HIDE + ENDPROC; Ask_Deposit_Book + + PROC Edit_Mode_Menu() + MENUENABLE "Main\Mode" + MENUDISABLE "Edit\Mode" + MENUDISABLE "Reports" + ENDPROC; Edit_Mode_Menu + + PROC Main_Mode_Menu() + MENUENABLE "Edit\Mode" + MENUENABLE "Reports" + MENUDISABLE "Main\Mode" + ENDPROC; Main_Mode_Menu + + PROC Edit_Mode() + if (SYSMODE() = "Main") then + COEDITKEY + Edit_Mode_Menu() + Arrive_Row() + Arrive_Field() + NEWWAITSPEC + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD", "ARRIVEROW", "DEPARTROW" + KEY -60, -66, -83, 43, 45 + ; DO_IT Clear Delete + - + ; F2 F8 DEL + endif + RETURN 1 + ENDPROC; Edit_Mode + + PROC Main_Mode() + if (HELPMODE() = "LookupHelp") then ; if in lookup help and pressed + RETURN 0 ; F2 to select, do not exit wait loop + endif + if NOT ISVALID() then ; if field data is not valid, + MESSAGE "Error: The data for this field is not valid." + RETURN 1 ; do not exit wait + endif + if ISFIELDVIEW() then ; if in field view, exit field view + DO_IT! + RETURN 1 + endif + DO_IT! ; return to main mode + if (SYSMODE() = "Main") then ; record posted successfully + Main_Mode_Menu() + Arrive_Field() + NEWWAITSPEC + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD" + KEY -66, -67 + ; Clear Edit + ; F8 F9 + else ECHO NORMAL ; key violation exists + DO_IT! + endif + RETURN 1 + ENDPROC; Main_Mode + + PROC Arrive_Field() + SPEEDBAR "~F10~ Menu":-68 + PROMPT Fld_Prompt[FIELD()] + RETURN 0 + ENDPROC; Arrive_Field + + PROC Arrive_Row() + RETURN 0 + ENDPROC; Arrive_Row + + PROC Update_Balances() + PRIVATE Prev_Bal, Rec_No, Row_No + RETURN + ECHO OFF + Rec_No = RECNO() + Row_No = ROWNO() + if ATFIRST() then + [Balance] = [Amount] + else UP + Prev_Bal = [Balance] + DOWN + [Balance] = Prev_Bal + [Amount] + endif + Prev_Bal = [Balance] + WHILE NOT ATLAST() + DOWN + [Balance] = Prev_Bal + [Amount] + Prev_Bal = [Balance] + ENDWHILE + MOVETO RECORD Rec_No + FOR I FROM 1 TO Row_No - 1 + UP + ENDFOR + MOVETO RECORD Rec_No + ECHO NORMAL + ENDPROC; Update_Balances + + PROC Post_It() + RETURN + if ISBLANK([Item_No]) then + [Item_No] = 1 + endif + WHILE TRUE + POSTRECORD NOPOST LEAVELOCKED + if RetVal then + QUITLOOP + else [Item_No] = [Item_No] + 1 + endif + ENDWHILE + if (Old_Amt <> [Amount]) then + Update_Balances() + endif + ENDPROC; Post_It + + PROC Depart_Row() ; do not leave row if essential information is lacking + RETURN 0 + ; test for valid field data + if NOT ISVALID() then + Message_Box("Invalid Field Entry", "The data for this field is invalid.") + RETURN 1 + endif + ; depart row if record is new & blank + if RECORDSTATUS("New") AND NOT RECORDSTATUS("Modified") then + RETURN 0 + endif + ; delete row if all fields are blank + if ISBLANK([File_No]) AND ISBLANK([Date]) AND ISBLANK([Acnt_No]) AND + ISBLANK([Amount]) AND ISBLANK([Billed]) then + DEL + RETURN 0 + endif + ; test for missing field entries + if ISBLANK([Date]) then + Message_Box("Incomplete Entry", "This record requires a date for the transaction.") + MOVETO [Date] + PROMPT Fld_Prompt[FIELD()] + RETURN 1 + endif + if ISBLANK([File_No]) then + Message_Box("Incomplete Entry", "This record requires a file number for the transaction.") + MOVETO [File_No] + PROMPT Fld_Prompt[FIELD()] + RETURN 1 + endif + if ISBLANK([Acnt_No]) then + Message_Box("Incomplete Entry", "This record requires an account number.") + MOVETO [Acnt_No] + PROMPT Fld_Prompt[FIELD()] + RETURN 1 + endif + if ISBLANK([Amount]) then + Message_Box("Incomplete Entry", "This record requires an amount.") + MOVETO [Amount] + PROMPT Fld_Prompt[FIELD()] + RETURN 1 + endif + if ISBLANK([Billed]) then + Message_Box("Incomplete Entry", "Please enter (Y/N) for billed.") + MOVETO [Billed] + PROMPT Fld_Prompt[FIELD()] + RETURN 1 + endif + Post_It() ; post record & update balances if needed + RETURN 0 + ENDPROC; Depart_Row + + PROC Deposit_Table_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Key_Code, Menu_Pick, Temp_File_No, Temp_Date, Temp_Empl_Num + if (TriggerType = "ARRIVEFIELD") then + RETURN Arrive_Field() + endif + if (TriggerType = "DEPARTFIELD") then + RETURN Depart_Field() + endif + if (TriggerType = "ARRIVEROW") then + RETURN Arrive_Row() + endif + if (TriggerType = "DEPARTROW") then + RETURN Depart_Row() + endif + if (EventInfo["TYPE"] = "MESSAGE") then + Menu_Pick = EventInfo["MENUTAG"] + SWITCH + CASE (Menu_Pick = "Edit\Mode") : RETURN Edit_Mode() + CASE (Menu_Pick = "Main\Mode") : if (Depart_Row() = 0) then + if ISEMPTY(M_Tbl) then + RETURN Clear_Table() + else RETURN Main_Mode() + endif + else RETURN 1 + endif + CASE (Menu_Pick = "R_Summary") : ECHO OFF + Print_Report("Payments", "1", "") + Trust_Table_Menu() + Arrive_Field() + RETURN 1 + CASE (Menu_Pick = "R_Detailed"): ECHO OFF + Print_Report("Payments", "2", "") + Trust_Table_Menu() + Arrive_Field() + RETURN 1 + CASE (Menu_Pick = "R_Cancel") : RETURN 1 + CASE (Menu_Pick = "Return\Yes") : if (SYSMODE() = "Main") then + RETURN Clear_Table() + else if (Depart_Row() = 0) then + RETURN Clear_Table() + else RETURN 1 + endif + endif + CASE (Menu_Pick = "Return\No") : RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + if (EventInfo["TYPE"] = "KEY") then + Key_Code = EventInfo["KEYCODE"] + SWITCH + ; F9 - COEDIT + CASE (Key_Code = -67) : RETURN Edit_Mode() + ; F2 - DO_IT! + CASE (Key_Code = -60) : if (Depart_Row() = 0) then + if ISEMPTY(M_Tbl) then + RETURN Clear_Table() + else RETURN Main_Mode() + endif + else RETURN 1 + endif + ; F8 - CLEAR + CASE (Key_Code = -66) : if (SYSMODE() = "Main") then + RETURN Clear_Table() + else if (Depart_Row() = 0) then + RETURN Clear_Table() + else RETURN 1 + endif + endif + ; DELETE + CASE (Key_Code = -83) : if (Display_Delete_Box() = 1) then + Update_Balances() + endif + RETURN 1 + ; + to add one day to current date + CASE (Key_Code = 43) : RETURN Change_Date(43) + ; - to subtract one day from current date + CASE (Key_Code = 45) : RETURN Change_Date(45) + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + SOUND 400 100 RETURN 1 + ENDPROC; Deposit_Table_Wait_Proc + + PROC Main_Mode_Wait() + Arrive_Field() + WAIT TABLE + PROC "Deposit_Table_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD" + KEY -66, -67 + ; Clear Edit + ; F8 F9 + ENDWAIT + ENDPROC; Main_Mode_Wait + + PROC Edit_Mode_Wait() + Arrive_Row() + Arrive_Field() + WAIT TABLE + PROC "Deposit_Table_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD", "ARRIVEROW", "DEPARTROW" + KEY -60, -66, -83, 43, 45 + ; DO_IT Clear Delete + - + ; F2 F8 DEL + ENDWAIT + ENDPROC; Edit_Mode_Wait + + ; main body of procedure follows + Fld_Prompt["Date"] = " Date of transaction" + Fld_Prompt["File_No"] = " F1 to select file no. from file cabinet" + Fld_Prompt["Empl_Num"] = " F1 to select employee for this transaction" + Fld_Prompt["T_Code"] = " F1 to select code describing transaction" + Fld_Prompt["Acnt_No"] = " Account number for this entry" + Fld_Prompt["Amount"] = " Dollar amount of this transaction" + Fld_Prompt["Billed"] = " Y if transaction has been billed, N if not" + Fld_Prompt["Note"] = " Notation to help describe this entry" + Answer_Menu = "Deposit_Answer_Menu" + ECHO OFF + VIEW M_Tbl + Deposit_Table_Menu() + WINDOW MOVE GETWINDOW() TO -100, -100 + PICKFORM F_Num + WINDOW HANDLE CURRENT TO Form_Win + DYNARRAY Win_Atts[] + Win_Atts["ORIGINROW"] = R + Win_Atts["ORIGINCOL"] = C + Win_Atts["CANMOVE"] = False + Win_Atts["CANRESIZE"] = False + Win_Atts["CANCLOSE"] = False + WINDOW SETATTRIBUTES Form_Win FROM Win_Atts + ECHO NORMAL + KEYENABLE -31 + if (SYSMODE() = "Main") then + Main_Mode_Wait() + else Edit_Mode_Wait() + endif + KEYDISABLE -31 + CLEARSPEEDBAR + MESSAGE "" + PROMPT "" +ENDPROC +WRITELIB Off_Lib Deposit_Table_Wait + +RELEASE PROCS ALL \ No newline at end of file diff --git a/old-database/FILCABNT.SC b/old-database/FILCABNT.SC new file mode 100755 index 0000000..18cdc80 --- /dev/null +++ b/old-database/FILCABNT.SC @@ -0,0 +1,1040 @@ +MESSAGE "Writing file cabinet procedures to library..." + +PROC File_Cabinet_Wait(M_Tbl, D_Tbl) + ; M_Tbl (master = files of files_x) D_Tbl (detail = ledger or ledger_x) + PRIVATE Fld_Prompt, Answer_Menu, Cabinet, Employee, Hourly_Rate, Timing, Start_Time, + File_No, Id, File_Type, Regarding, Opened, Closed, Status, + Empl_Num, Trust_Bal, Total_Charges, Amount_Owing, Transferable + + PROC Start_Ticker() + Timing = TRUE + Start_Time = Ticks() + MESSAGE "Press Alt-T to stop timer" + ENDPROC; Start_Ticker + + PROC Stop_Ticker() + PRIVATE Secs, Hrs, Seconds, Minutes, Hours, Button_Val + Secs = (Ticks() - Start_Time) / 1000; + Hrs = Round(Secs / 3600, 2) + Hours = INT(Secs / 3600) + Minutes = INT((Secs - Hours * 3600) / 60) + Seconds = ROUND(MOD((Secs - Hours * 3600), 60), 0) + Hours = STRVAL(Hours) + if (LEN(Hours) < 2) then + Hours = "0" + Hours + endif + Minutes = STRVAL(Minutes) + if (LEN(Minutes) < 2) then + Minutes = "0" + Minutes + endif + Seconds = STRVAL(Seconds) + if (LEN(Seconds) < 2) then + Seconds = "0" + Seconds + endif + SHOWDIALOG "Elapsed Time" + @10,20 HEIGHT 7 WIDTH 40 + @1, 1 ?? FORMAT("W36,AC", "Time: " + Hours + ":" + Minutes + ":" + Seconds + " (" + FORMAT("W6.2",Hrs) +" hours)") + PUSHBUTTON @3,13 WIDTH 12 + "~O~K" + OK + VALUE "OK" + TAG "OK_Button" + TO Button_Val + ENDDIALOG + if (SYSMODE() = "CoEdit") then + REFRESH + endif + Timing = FALSE + ENDPROC; Stop_Ticker + + PROC Show_Rolodex_Info() + PRIVATE Owner_Id, Form_No, Image_No, Msg_Str + if (TABLE() = "Files_r") OR (TABLE() = "Files_rx")then + Owner_Id = [Rolodex_Id] + Msg_Str = "Related Party Details - Press ESC to return to file cabinet." + else if (TABLE() = M_Tbl) AND (FIELD() = "Opposing") then + Owner_Id = [Opposing] + Msg_Str = "Opposing Party Details - Press ESC to return to file cabinet." + else Owner_Id = "" + endif + endif + Image_No = IMAGENO() + MOVETO M_Tbl + Form_No = FORM() + if (Owner_Id = "") then + Owner_Id = [Id] + Msg_Str = "File Owner Details - Press ESC to return to file cabinet." + endif + ECHO OFF + FORMKEY + VIEW "ROLODEX" + WINDOW MOVE GETWINDOW() TO -100, -100 ; move rolodex table off screen + TAB + LOCATE Owner_Id + if RetVal then + SHOWPULLDOWN + ENDMENU ; hide main menu + PICKFORM "4" + ECHO NORMAL + MESSAGE Msg_Str + WAIT WORKSPACE + UNTIL "ESC" + ECHO OFF + Main_Table_Menu() + else MESSAGE "No matching rolodex entry found!" + ENDIF + CLEARIMAGE; remove rolodex image + MOVETO M_Tbl + PICKFORM Form_No + MOVETO Image_No + ECHO NORMAL + ENDPROC; Show_Rolodex_Info + + PROC If_Status_Send_Or_Hold(Stat) + PRIVATE Tmp_Tbl, Q_St, N, I + {Ask} {Filestat} TAB CHECK TAB TAB + if (Stat = "SEND") then + TYPEIN "\"YES\"" + else TYPEIN "\"NO\"" + endif + DO_IT! + Tmp_Tbl = TABLE() + MOVETO "Filestat(Q)" + CLEARIMAGE ; erase query image + MOVETO Tmp_Tbl + N = NRECORDS(Tmp_Tbl) + if (N = 0) then + CLEARIMAGE + RETURN Stat + endif + TAB + Q_St = [] + FOR I FROM 1 TO N-1 + DOWN + Q_St = Q_St + " OR " + [] + ENDFOR + CLEARIMAGE + RETURN Q_St + ENDPROC; If_Status_Send_Or_Hold + + PROC Ask_File_Cabinet(F_Num) + PRIVATE Subset_Table, Temp_Status, Button, I, Form_List + FORMKEY + SHOWPULLDOWN + ENDMENU + CLEARSPEEDBAR + PROMPT "Enter selection criteria. Press Search to find matches, Cancel to quit." + MOUSE SHOW + SHOWDIALOG "File Cabinet Selection Criteria" + @6, 3 HEIGHT 15 WIDTH 74 + @1, 2 ?? "File No." + ACCEPT @1,14 + WIDTH 20 "A45" PICTURE "*!" + TAG "" + TO File_No + @2, 2 ?? "Owner ID" + ACCEPT @2,14 + WIDTH 20 "A45" PICTURE "*!" + TAG "" + TO Id + @3, 2 ?? "Area of Law" + ACCEPT @3,14 + WIDTH 20 "A45" PICTURE "*!" + TAG "" + TO File_Type + @4, 2 ?? "Regarding" + ACCEPT @4,14 + WIDTH 20 "A45" + TAG "" + TO Regarding + @5, 2 ?? "Opened" + ACCEPT @5,14 + WIDTH 20 "A45" PICTURE "*!" + TAG "" + TO Opened + @6, 2 ?? "Closed" + ACCEPT @6,14 + WIDTH 20 "A45" PICTURE "*!" + TAG "" + TO Closed + @7, 2 ?? "Status" + ACCEPT @7,14 + WIDTH 20 "A45" PICTURE "*!" + TAG "" + TO Status + @8, 2 ?? "Employee" + ACCEPT @8,14 + WIDTH 20 "A45" PICTURE "*!" + TAG "" + TO Empl_Num + @1, 40 ?? "**** Account Balances ****" + @2, 38 ?? "Trust" + ACCEPT @2,48 + WIDTH 20 "A35" + TAG "" + TO Trust_Bal + @3, 38 ?? "Charges" + ACCEPT @3,48 + WIDTH 20 "A35" + TAG "" + TO Total_Charges + @4, 38 ?? "Owing" + ACCEPT @4,48 + WIDTH 20 "A35" + TAG "" + TO Amount_Owing + @5, 38 ?? "Transfer" + ACCEPT @5,48 + WIDTH 20 "A35" + TAG "" + TO Transferable + @12, 7 ?? "STATUS: SEND = Print set to YES, HOLD = Print set to NO" + PUSHBUTTON @10,24 WIDTH 10 + "~S~earch" + OK + DEFAULT + VALUE "" + TAG "OK" + TO Button + PUSHBUTTON @10,37 WIDTH 10 + "~C~ancel" + CANCEL + VALUE "" + TAG "Cancel" + TO Button + ENDDIALOG + PROMPT "" + MOUSE HIDE + if (RetVal = True) then + MESSAGE "Searching..." + ECHO OFF + if (Status = "SEND") OR (Status = "HOLD") then + Temp_Status = If_Status_Send_Or_Hold(Status) + else Temp_Status = Status + endif + {Ask} TYPEIN M_Tbl ENTER CheckPlus + [File_No] = File_No + [Id] = Id + [File_Type] = File_Type + [Regarding] = Regarding + [Opened] = Opened + [Closed] = Closed + [Status] = Temp_Status + [Empl_Num] = Empl_Num + [Trust_Bal] = Trust_Bal + [Total_Charges] = Total_Charges + [Amount_Owing] = Amount_Owing + [Transferable] = Transferable + DO_IT! + ; if error in query form, abort selection process + if (TABLE() <> "Answer") then + ; erase query image(s) + WHILE (IMAGETYPE() = "Query") + CLEARIMAGE + ENDWHILE + MESSAGE "Invalid selection criteria. Query unsuccessful." + PICKFORM F_Num + RETURN + endif + Subset_Table = PRIVDIR() + "SUBSET" + RENAME TABLE() Subset_Table + MOVETO (M_Tbl + "(Q)") + CLEARIMAGE ; erase query image + MOVETO Subset_Table + if ISEMPTY(Subset_Table) then + CLEARIMAGE + No_Matches_Found() + else ; copy form and display on screen + COPYFORM M_Tbl F_Num Subset_Table "1" + COPYREPORT "Files" "1" Subset_Table "1" ; detailed file info + COPYREPORT "Files" "2" Subset_Table "2" ; summary file info + COPYREPORT "Files" "3" Subset_Table "3" ; detailed account summary + COPYREPORT "Files" "4" Subset_Table "4" ; short account summary + View_Answer_Table(Subset_Table, 1, 0) + FORMTABLES Subset_Table "1" Form_List + FOR I FROM 1 to ARRAYSIZE(Form_List) + MOVETO Form_List[I] + IMAGERIGHTS READONLY ; make all detail records uneditable + ENDFOR + MOVETO Subset_Table + File_Cabinet_Answer_Wait() + if ISTABLE(Subset_Table) then ; delete subset table + ECHO OFF + DELETE(Subset_Table) + endif + endif + endif + PICKFORM F_Num + ENDPROC; Ask_File_Cabinet + + PROC Locate_Record() + PRIVATE Search_St, Choice, Fld_Name + Choice = 2 + SHOWDIALOG "Locate Record" + @7, 14 HEIGHT 11 WIDTH 48 + @2,2 ?? "Search field:" + RADIOBUTTONS @1,18 HEIGHT 3 WIDTH 20 + "File Number", + "File Owner", + "Regarding" + TAG "Button_Tag" + TO Choice + @5,2 ?? "Search pattern:" + ACCEPT @5,18 + WIDTH 25 "A35" + TAG "Search_St" + TO Search_St + PUSHBUTTON @7,13 WIDTH 10 + "~S~earch" + OK + DEFAULT + VALUE "" + TAG "OK" + TO Button + PUSHBUTTON @7,26 WIDTH 10 + "~C~ancel" + CANCEL + VALUE "" + TAG "Cancel" + TO Button + ENDDIALOG + if (RetVal = True) And (Search_St <> "") then + SWITCH + CASE (Choice = 1) : Fld_Name = "File_No" + CASE (Choice = 2) : Fld_Name = "Id" + CASE (Choice = 3) : Fld_Name = "Regarding" + OTHERWISE : RETURN + ENDSWITCH + MESSAGE "Searching..." + MOVETO M_Tbl + MOVETO FIELD Fld_Name + LOCATE INDEXORDER PATTERN Search_St + if (RetVal = True) then + MESSAGE "" + WHILE (RetVal = True) + SHOWPOPUP "Continue Search?" @17,63 + "Next" : "Search for next match" : "Next", + "Quit" : "Terminate search" : "Quit" + ENDMENU + TO Choice + if (Choice = "Next") then + MESSAGE "Searching..." + ECHO OFF + CTRLPGDN + LOCATE INDEXORDER NEXT PATTERN Search_St + MESSAGE "" + if (RetVal = False) then + CTRLPGUP + BEEP + MESSAGE "No more matches found." + endif + ECHO NORMAL + else QUITLOOP + endif + ENDWHILE + else BEEP + MESSAGE "No matches found." + endif; initial match was found + endif; search requested + ENDPROC; Locate_Record + + PROC Close_Account() + ; must be files table & in coedit mode + PRIVATE Temp_Amount, Temp_Empl + ECHO OFF + [Closed] = TODAY() + [Status] = "INACTIVE" + Temp_Amount = [Amount_Owing] + Temp_Empl = [Empl_Num] + if (Temp_Amount > 0) then + MOVETO D_Tbl ; move to detail table (ledger) + END + if NOT RECORDSTATUS("New") then + DOWN ; move to new blank record + endif + [Date] = TODAY() + [Item_No] = 1 + [Empl_Num] = Temp_Empl + [T_Code] = "PMT" + [T_Type] = "5" + [T_Type_L] = "C" + [Amount] = Temp_Amount + [Billed] = "Y" + WHILE TRUE ; must post record + POSTRECORD NOPOST LEAVELOCKED + if RetVal then + QUITLOOP + else [Item_No] = [Item_No] + 1 + endif + ENDWHILE + endif + if (Temp_Amount > 0) then + Tally_Ledger() + endif + REFRESH + MESSAGE "Account has been closed." + ENDPROC; Close_Account + + PROC Reopen_Account() + ; must be in coedit mode + ECHO OFF + MOVETO M_Tbl ; move to master table (files) + [Closed] = BLANKDATE() + [Status] = "FOLLOW UP" + REFRESH + MESSAGE "Account has been reopened." + ENDPROC; Reopen_Account + + PROC Update_Billed_Status() + PRIVATE Old_FN, F_Nos, I, Add_Tbl + DYNARRAY F_Nos[] + if Response_Is_Yes("Change Transaction Status", "Change all transactions to BILLED - YES status?") then + MESSAGE "Changing transactions to BILLED - YES status. One moment please..." + ; make answer table match ledger table structure, change billed to yes + ECHO OFF + {Ask} TYPEIN Answer_Tbl ENTER + CHECKPLUS TAB TAB CHECKPLUS TAB CHECKPLUS + MOVETO FIELD "Billed" + TYPEIN "N" + DO_IT! + Answer_Tbl = PRIVDIR() + TABLE() + if ISEMPTY(Answer_Tbl) then + MESSAGE "" + CLEARIMAGE; remove answer table image + RETURN + endif + I = 1 + TAB + COEDITKEY + SCAN + F_Nos[I] = [File_No] ; get list of file numbers + [Billed] = "Y" + I = I + 1 + ENDSCAN + DO_IT! + CLEARIMAGE; remove answer table image + ADD Answer_Tbl D_Tbl; Target = Ledger or Ledger_x table + CLEARIMAGE; remove "changed" ledger table image + CLEARIMAGE; erase target table image + MESSAGE "" + ; update file account totals + if (DYNARRAYSIZE(F_Nos) > 0) then ; update accounts + MOVETO M_Tbl + PICKFORM "1" + COEDITKEY + Old_FN = "" + FOREACH I IN F_Nos ; array of files to be updated + if (F_Nos[I] <> Old_FN) then + Old_FN = F_Nos[I] + MOVETO M_Tbl + MOVETO FIELD "File_No" + LOCATE F_Nos[I] + if RetVal then ; file number was found + MOVETO D_Tbl ; move to ledger table + Tally_Ledger() ; total accounts for this file + endif + endif + ENDFOREACH + DO_IT! ; end edit + FORMKEY + Sound_Off() + Message_Box("Updating File Account Balances", "All modified file accounts have been updated.") + endif + endif + ENDPROC; Update_Billed_Status + + PROC Query_Ledger(S_Tbl, Billed, Rpt_No) + PRIVATE All_Billed + {Ask} TYPEIN S_Tbl ENTER + TAB CHECKPLUS EXAMPLE "LINK" TYPEIN "!" ; check file no field + TAB CHECKPLUS ; check owner id field + MOVETO FIELD "Footer_Code" CheckPlus + {Ask} TYPEIN D_Tbl ENTER + CHECKPLUS TAB CHECKPLUS EXAMPLE "LINK" ; check all fields except file no + MOVETO FIELD "Billed" TYPEIN Billed + DO_IT! + Answer_Tbl = PRIVDIR() + TABLE() + MOVETO FIELD "Billed" + All_Billed = TRUE + WHILE All_Billed + if ([Billed] = "Y") OR ISBLANK([Billed]) then + if ATLAST() then + QUITLOOP + else DOWN + endif + else All_Billed = FALSE + endif + ENDWHILE + CLEARIMAGE ; erase answer image + MOVETO (D_Tbl + "(Q)") + CLEARIMAGE ; erase 1st query image + MOVETO (S_Tbl + "(Q)") + CLEARIMAGE ; erase 2nd query image + if ISEMPTY(Answer_Tbl) then + No_Matches_Found() + else COPYREPORT "Trnsactn" Rpt_No Answer_Tbl "1" + Print_Report(Answer_Tbl, "1", Rpt_St["Statements"]) + if (Billed <> "Y") AND NOT All_Billed then + Update_Billed_Status() + endif + endif + ENDPROC; Query_Ledger + + PROC Credit_History() + {Ask} TYPEIN Subset_Table ENTER + TAB CHECKPLUS EXAMPLE "LINK" TYPEIN "!" ; check file no field + TAB CHECKPLUS ; check owner id field + MOVETO FIELD "Footer_Code" CHECKPLUS + {Ask} TYPEIN D_Tbl ENTER + CHECKPLUS TAB CHECKPLUS EXAMPLE "LINK" ; check all fields except file no + MOVETO FIELD "T_Type_L" TYPEIN "C" ; include only credit transactions + DO_IT! + Answer_Tbl = PRIVDIR() + TABLE() + CLEARIMAGE ; erase answer image + MOVETO (Subset_Table + "(Q)") + CLEARIMAGE ; erase 1st query image + MOVETO (D_Tbl + "(Q)") + CLEARIMAGE ; erase 2nd query image + if ISEMPTY(Answer_Tbl) then + No_Matches_Found() + else COPYREPORT "Trnsactn" "7" Answer_Tbl "1" + Print_Report(Answer_Tbl, "1", "") + endif + ENDPROC; Credit_History + + PROC File_Cabinet_Answer_Menu() + SHOWPULLDOWN + "Modify" : "Toggle between edit and main mode" : "Modify" + SUBMENU + "Edit Mode - F9" : "Allow data to be edited, deleted, etc." : "Edit\Mode", + "Main Mode - F2" : "Discontinue editing" : "Main\Mode" + ENDSUBMENU, + "Reports" : "Choose report to generate" : "Reports" + SUBMENU + "Envelope" : "Create an envelope" : "R_Envelope", + "Phone Book" : "Generate list of phone numbers & addresses" : "" + SUBMENU + "Address & Phone #" : "List address & phone numbers" : "R_Phone_Address", + "Phone # Only" : "List only names & phone numbers" : "R_Phone" + ENDSUBMENU, + "Rolodex Info" : "All info in rolodex" : "R_Rolodex", + "File Cabinet Info" : "Show file cabinet data by file owner" : "" + SUBMENU + "Detailed" : "All data for files, with account balances" : "R_File_Detail", + "Short Form" : "Summarize file data and account balances" : "R_File_Short" + ENDSUBMENU, + "Account Balances" : "Summarize accounts in file cabinet by employee and file status" : "" + SUBMENU + "Detailed" : "Show balances by billed & unbilled amounts" : "R_Account_Detail", + "Short Form" : "Summarize amount owing & amount to transfer" : "R_Account_Short" + ENDSUBMENU, + "Statements" : "Statement of billable services" : "" + SUBMENU + "All Transactions" : "Include all transactions for file" : "" + SUBMENU + "Total Hours" : "Include only total for all hourly transactions" : "R_Statements_All", + "Itemize Hours" : "Itemize hours for each hourly transaction" : "R_Statements_All_I" + ENDSUBMENU, + "Billed Previously" : "Select only previously billed transactions" : "" + SUBMENU + "Total Hours" : "Include only total for all hourly transactions" : "R_Statements_Billed", + "Itemize Hours" : "Itemize hours for each hourly transaction" : "R_Statements_Billed_I" + ENDSUBMENU, + "Unbilled Only " : "Select only unbilled transactions" : "" + SUBMENU + "Total Hours" : "Include only total for all hourly transactions" : "R_Statements_Unbilled", + "Itemize Hours" : "Itemize hours for each hourly transaction" : "R_Statements_Unbilled_I" + ENDSUBMENU + ENDSUBMENU, + "Credit/Payment History" : "Report on credit/payment history for each account" : "R_Credit_History" + ENDSUBMENU, + "Assemble" : "Combine data and forms into documents" : "Assemble", + "Quit" : "Return to previous menu" : "" + SUBMENU + "No " : "Continue working with selected data" : "Return\No", + "Yes - F8" : "Return to complete data set" : "Return\Yes" + ENDSUBMENU + ENDMENU + if (SYSMODE() = "Main") then + MENUDISABLE "Main\Mode" + else MENUDISABLE "Edit\Mode" + MENUDISABLE "Assemble" + MENUDISABLE "Reports" + endif + File_Cabinet_Speedbar() + ENDPROC; File_Cabinet_Answer_Menu + + PROC File_Cabinet_Answer_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Answer_Tbl, Menu_Tag, Return_Code + if (TriggerType = "ARRIVEFIELD") then + PROMPT Fld_Prompt[FIELD()] + RETURN 1 + endif + if (EventInfo["TYPE"] = "MESSAGE") AND + (EventInfo["MESSAGE"] = "MENUSELECT") AND + (SUBSTR(EventInfo["MENUTAG"],1,2) = "R_") then + Menu_Tag = EventInfo["MENUTAG"] + SHOWPULLDOWN + ENDMENU + CLEARSPEEDBAR + MESSAGE "One moment please..." + ECHO OFF + SWITCH + ; ***** envelope ***** + CASE (Menu_Tag = "R_Envelope") : + MESSAGE "" + Return_Code = Yes_No_Cancel("Duplicate Envelope Removal", "Print only one envelope per file owner?") + if (Return_Code = "Yes") then + {Ask} {Rolodex} CHECK TAB EXAMPLE "LINK" + else if (Return_Code = "No") then + {Ask} {Rolodex} CHECKPLUS TAB EXAMPLE "LINK" + else FORMKEY + endif + endif + if (Return_Code <> "Cancel") then + MESSAGE "One moment please..." + {Ask} TYPEIN Subset_Table ENTER + MOVETO FIELD "Id" EXAMPLE "LINK" + DO_IT! + Answer_Tbl = PRIVDIR() + TABLE() + SORT Answer_Tbl ON "Id" + CLEARIMAGE ; erase answer image + MOVETO "Rolodex(Q)" + CLEARIMAGE ; erase 1st query image + MOVETO (Subset_Table + "(Q)") + CLEARIMAGE ; erase 2nd query image + if ISEMPTY(Answer_Tbl) then + No_Matches_Found() + else COPYREPORT "Rolodex" "1" Answer_Tbl "R" + Print_Report(Answer_Tbl, "R", Rpt_St["Envelope"]) + endif + endif + ; ***** rolodex address & phone information ***** + CASE (Menu_Tag = "R_Phone_Address") OR (Menu_Tag = "R_Phone") OR (Menu_Tag = "R_Rolodex") : + {Ask} TYPEIN Subset_Table ENTER + TAB TAB CHECK EXAMPLE "LINK" TYPEIN "!" + {Ask} {Phone} CHECK TAB CHECK EXAMPLE "LINK" + DO_IT! + Answer_Tbl = PRIVDIR() + TABLE() + CLEARIMAGE ; erase answer image + MOVETO "Phone(Q)" + CLEARIMAGE ; erase 1st query image + MOVETO (Subset_Table + "(Q)") + CLEARIMAGE ; erase 2nd query image + if ISEMPTY(Answer_Tbl) then + No_Matches_Found() + else if (Menu_Tag = "R_Phone") then + COPYREPORT "Phone" "1" Answer_Tbl "R" + Print_Report(Answer_Tbl, "R", Rpt_St["Phone_Book"]) + else if (Menu_Tag = "R_Phone_Address") then + COPYREPORT "Phone" "2" Answer_Tbl "R" + Print_Report(Answer_Tbl, "R", Rpt_St["Phone_Book"]) + else COPYREPORT "Phone" "3" Answer_Tbl "R" + Print_Report(Answer_Tbl, "R", Rpt_St["Rolodex_Info"]) + endif + endif + endif + ; ***** detailed file cabinet information ***** + CASE (Menu_Tag = "R_File_Detail"): + FORMKEY + Print_Report(Subset_Table, "1", Rpt_St["File_Cabinet"]) + ; ***** summarized file cabinet information ***** + CASE (Menu_Tag = "R_File_Short"): + FORMKEY + Print_Report(Subset_Table, "2", Rpt_St["File_Cabinet"]) + ; ***** detailed accounts receivable information ***** + CASE (Menu_Tag = "R_Account_Detail") : + FORMKEY + Print_Report(Subset_Table, "3", Rpt_St["Accounts"]) + ; ***** summarized accounts receivable information ***** + CASE (Menu_Tag = "R_Account_Short") : + FORMKEY + Print_Report(Subset_Table, "4", Rpt_St["Accounts"]) + ; ***** statement, unbilled transactions only ***** + CASE (Menu_Tag = "R_Statements_Unbilled") : + Query_Ledger(Subset_Table, "N", "1") + ; ***** statement, unbilled transactions only, itemized ***** + CASE (Menu_Tag = "R_Statements_Unbilled_I") : + Query_Ledger(Subset_Table, "N", "2") + ; ***** statement, billed & unbilled ***** + CASE (Menu_Tag = "R_Statements_All") : + Query_Ledger(Subset_Table, "", "3") + ; ***** statement, billed & unbilled, itemized ***** + CASE (Menu_Tag = "R_Statements_All_I") : + Query_Ledger(Subset_Table, "", "4") + ; ***** statement, previously billed transactions only ***** + CASE (Menu_Tag = "R_Statements_Billed") : + Query_Ledger(Subset_Table, "Y", "5") + ; ***** statement, previously billed transactions only ***** + CASE (Menu_Tag = "R_Statements_Billed_I") : + Query_Ledger(Subset_Table, "Y", "6") + ; ***** last credit to account ***** + CASE (Menu_Tag = "R_Credit_History") : + Credit_History() + ENDSWITCH + MOVETO Subset_Table + FORMKEY + ECHO NORMAL + EXECPROC "File_Cabinet_Answer_Menu" + RETURN 1 + else Return_Code = Answer_Table_Wait_Proc(TriggerType, EventInfo, CycleNumber) + if (SYSMODE() = "Main") then + MENUENABLE "Assemble" + else MENUDISABLE "Assemble" + endif + RETURN Return_Code + endif + ENDPROC; File_Cabinet_Answer_Wait_Proc + + PROC File_Cabinet_Answer_Wait() + File_Cabinet_Answer_Menu() + Sound_Off() + ECHO NORMAL + Message_Box("Search Completed", "Matching File Cabinet Entries: " + STRVAL(NRECORDS(Subset_Table))) + WAIT WORKSPACE + PROC "File_Cabinet_Answer_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD" + KEY -60, -66, -67, -83, -50, -48, 43, 45 + ; DO_IT Clear Edit Delete Alt-M Alt-B + - + ; F2 F8 F9 DEL Memo Summarize Balances + ENDWAIT + CLEARSPEEDBAR + MESSAGE "" + ENDPROC; File_Cabinet_Answer_Wait + + PROC Summarize_Accounts(Tbl, I_No) + ; pops up window with summary of billed, unbilled & total accounts + PRIVATE Button_Val + MOVETO Tbl + SHOWDIALOG "Account Balances - File No: " + [File_No] + @3,8 HEIGHT 18 WIDTH 63 + @1, 17 ?? " Billed Not Billed Total" + @2, 17 ?? "========== ========== =========" + @3, 2 ?? "Trust Acnt. "+FORMAT("W13.2,E$C,AR", [Trust_Bal_P]) +FORMAT("W15.2,E$C,AR", [Trust_Bal]-[Trust_Bal_P]) +FORMAT("W15.2,E$C,AR", [Trust_Bal]) + @4, 2 ?? "Hours "+FORMAT("W13.2,EC,AR", [Hours_P]) +FORMAT("W15.2,EC,AR", [Hours]-[Hours_P]) +FORMAT("W15.2,EC,AR", [Hours]) + @6, 2 ?? "Hourly Fees "+FORMAT("W13.2,EC,AR", [Hourly_Fees_P]) +FORMAT("W15.2,EC,AR", [Hourly_Fees]-[Hourly_Fees_P]) +FORMAT("W15.2,EC,AR", [Hourly_Fees]) + @7, 2 ?? "Flat Fees "+FORMAT("W13.2,EC,AR", [Flat_Fees_P]) +FORMAT("W15.2,EC,AR", [Flat_Fees]-[Flat_Fees_P]) +FORMAT("W15.2,EC,AR", [Flat_Fees]) + @8, 2 ?? "Disburse. "+FORMAT("W13.2,EC,AR", [Disbursements_P])+FORMAT("W15.2,EC,AR", [Disbursements]-[Disbursements_P])+FORMAT("W15.2,EC,AR", [Disbursements]) + @9, 2 ?? "Tot. Charges"+FORMAT("W13.2,EC,AR", [Total_Charges_P])+FORMAT("W15.2,EC,AR", [Total_Charges]-[Total_Charges_P])+FORMAT("W15.2,EC,AR", [Total_Charges]) + @10,2 ?? "Credits "+FORMAT("W13.2,EC,AR", [Credit_Bal_P]) +FORMAT("W15.2,EC,AR", [Credit_Bal]-[Credit_Bal_P]) +FORMAT("W15.2,EC,AR", [Credit_Bal]) + @11,17 ?? "========== ========== =========" + @12,2 ?? "Balance Due "+FORMAT("W13.2,E$C,AR", [Amount_Owing_P]) +FORMAT("W15.2,E$C,AR", [Amount_Owing]-[Amount_Owing_P]) +FORMAT("W15.2,E$C,AR", [Amount_Owing]) + @14,32 ?? "Transferable: "+FORMAT("W11.2,E$C,AR", [Transferable]) + PUSHBUTTON @14,10 WIDTH 12 + "~O~K" + OK + VALUE "OK" + TAG "OK_Button" + TO Button_Val + ENDDIALOG + MOVETO I_No + if (SYSMODE() = "CoEdit") then + REFRESH + endif + ENDPROC; Summarize_Accounts + + PROC Depart_Cabinet_Row() + PRIVATE In_Form + if (SYSMODE() <> "CoEdit") OR FORMTYPE("Detail") then + RETURN TRUE + endif + if NOT ISVALID() then + Message_Box("Invalid Field Entry", "The data for this field is invalid.") + RETURN FALSE + endif + ; depart row if record is new & blank + if RECORDSTATUS("New") AND NOT RECORDSTATUS("Modified") then + RETURN TRUE + endif + if ISBLANK([File_No]) then + MOVETO [File_No] + Message_Box("Incomplete Entry", "This file requires a file number.") + RETURN FALSE + endif + if ISBLANK([Id]) then + MOVETO [Id] + Message_Box("Incomplete Entry", "This file requires a file owner ID.") + RETURN FALSE + endif + if ISBLANK([Empl_Num]) then + MOVETO [Empl_Num] + Message_Box("Incomplete Entry", "This file requires an employee number.") + RETURN FALSE + endif + if ISBLANK([File_Type]) then + MOVETO [File_Type] + Message_Box("Incomplete Entry", "This file requires an law area designation.") + RETURN FALSE + endif + if ISBLANK([Opened]) then + MOVETO [Opened] + Message_Box("Incomplete Entry", "This file requires a date of opening.") + RETURN FALSE + endif + if ISBLANK([Status]) then + MOVETO [Status] + Message_Box("Incomplete Entry", "This file requires a status designation.") + RETURN FALSE + endif + if ISBLANK([Rate_Per_Hour]) then + MOVETO [Rate_Per_Hour] + Message_Box("Incomplete Entry", "This file requires an hourly billing rate.") + RETURN FALSE + endif + if RECORDSTATUS("New") then + [Trust_Bal] = 0 + [Hours] = 0 + [Hourly_Fees] = 0 + [Flat_Fees] = 0 + [Disbursements] = 0 + [Total_Charges] = 0 + [Credit_Bal] = 0 + [Amount_Owing] = 0 + [Transferable] = 0 + endif + RETURN TRUE + ENDPROC; Depart_Cabinet_Row + + PROC File_Cabinet_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Key_Code, Menu_Pick, Form_Num + if (TriggerType = "ARRIVEFIELD") then + File_Cabinet_Speedbar() + RETURN 0 + endif + if (TriggerType = "DEPARTROW") then + if Depart_Cabinet_Row() then + RETURN 0 + endif + RETURN 1 + endif + if (TriggerType = "ARRIVETABLE") then + File_Cabinet_Speedbar() + if (SYSMODE() = "CoEdit") AND (TABLE() = D_Tbl) then + Ledger_Table_Wait(TRUE, Employee, Hourly_Rate) + File_Cabinet_Speedbar() + RETURN 1 + endif + RETURN 0 + endif + if (TriggerType = "DEPARTTABLE") then + if (TABLE() = M_Tbl) then + Hourly_Rate = [Rate_Per_Hour] + Employee = [Empl_Num] + endif + RETURN 0 + endif + if (EventInfo["TYPE"] = "KEY") then + Key_Code = EventInfo["KEYCODE"] + SWITCH + ; F9 - COEDIT + CASE (Key_Code = -67) : Main_Table_Edit() + if (TABLE() = D_Tbl) then + Ledger_Table_Wait(FALSE, Employee, Hourly_Rate) + if (IMAGENO() > 0) then + File_Cabinet_Speedbar() + endif + endif + RETURN 1 + ; F2 - DO_IT! + CASE (Key_Code = -60) : if Depart_Cabinet_Row() then + if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + else RETURN 1 + endif + ; F8 - CLEAR + CASE (Key_Code = -66) : if Depart_Cabinet_Row() then + RETURN Main_Table_Clear() + else RETURN 1 + endif + ; DELETE + CASE (Key_Code = -83) : if (SYSMODE() = "CoEdit") then + if ISFIELDVIEW() then + RETURN 0 + endif +; if (TABLE() = M_Tbl) then +; GETRECORD "Timecard" [File_No] TO DYNARRAY A +; if RetVal then +; Message_Box("Timecard Entries Are Outstanding", "Cannot delete if timecard contains related entries!") +; RETURN 1 +; endif +; endif + RETURN Display_Delete_Box() + endif + RETURN 1 + ; Alt-M - Memo + CASE (Key_Code = -50) : Display_Memo(Main_Table) + Main_Table_Menu() + File_Cabinet_Speedbar() + RETURN 1 + ; Alt-C Close Account + CASE (Key_Code = -46) : if (FORM() = "1") OR (FORM() = "2") then + if (SYSMODE() = "Main") then + COEDITKEY + endif + Close_Account() + endif + RETURN 1 + ; Alt-R Reopen Account + CASE (Key_Code = -19) : Main_Table_Edit() + if (SYSMODE() = "CoEdit") then + Reopen_Account() + endif + RETURN 1 + ; ALT-B - Summarize account balances + CASE (Key_Code = -48) : Summarize_Accounts(M_Tbl, IMAGENO()) + RETURN 1 + ; ALT-L - Locate Record + CASE (Key_Code = -38) : Locate_Record() + RETURN 1 + ; ALT-I - Inquire about Rolodex + CASE (Key_Code = -23) : if (SYSMODE() = "Main")then + Show_Rolodex_Info() + endif + RETURN 1 + ; ALT-T - Start or stop time keeper + CASE (Key_Code = -20) : if Timing then + Stop_Ticker() + else Start_Ticker() + endif + RETURN 1 + ; ALT-F - Switch form + CASE (Key_Code = -33) : if (SYSMODE() = "Main") then + ECHO OFF + MOVETO M_Tbl + Form_Num = NUMVAL(FORM()) + 1 + if (Form_Num > 2) then + Form_Num = 1 + endif + PICKFORM Form_Num + ECHO NORMAL + endif + RETURN 1 + ; + or - to change current date + CASE (Key_Code = 43) OR (Key_Code = 45) : + RETURN Change_Date(Key_Code) + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + if (EventInfo["MESSAGE"] = "MENUSELECT") then + Menu_Pick = EventInfo["MENUTAG"] + SWITCH + CASE (Menu_Pick = "Edit\Mode") : Main_Table_Edit() + if (TABLE() = D_Tbl) then + Ledger_Table_Wait(FALSE, Employee, Hourly_Rate) + if (IMAGENO() > 0) then + File_Cabinet_Speedbar() + endif + endif + RETURN 1 + CASE (Menu_Pick = "Main\Mode") : if Depart_Cabinet_Row() then + if ISEMPTY(M_Tbl) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + else RETURN 1 + endif + CASE (Menu_Pick = "Ask") : MOVETO M_Tbl + if ISBLANK([File_No]) then + File_No = "" + else File_No = [File_No] + endif + if (M_Tbl = "Files") then + Status = "SEND" + else Status = "HOLD" + endif + Ask_File_Cabinet(NUMVAL(FORM())) + Main_Table_Menu() + File_Cabinet_Speedbar() + RETURN 1 + CASE (Menu_Pick = "Close\Yes") : if Depart_Cabinet_Row() then + RETURN Main_Table_Clear() + else RETURN 1 + endif + CASE (Menu_Pick = "Close\No") : RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + SOUND 400 100 RETURN 1 ; safety valve, ignore all events not recognized + ENDPROC; File_Cabinet_Wait_Proc + + PROC File_Cabinet_Speedbar() + CLEARSPEEDBAR + SPEEDBAR "~F10~ Menu":-68, "~Alt-M~ Memo":-50, "~Alt-B~ Balances":-48 + if ISASSIGNED(Fld_Prompt[FIELD()]) then + PROMPT Fld_Prompt[FIELD()] + else PROMPT "" + endif + ENDPROC; File_Cabinet_Speedbar + + ; MAIN PROCEDURE BEGINS HERE! + ; initialize "ASK" dialog box variables not initialized with each ask + Id = "" + File_Type = "" + Regarding = "" + Opened = "" + Closed = "" + Empl_Num = "" + Trust_Bal = "" + Total_Charges = "" + Amount_Owing = "" + Transferable = "" + + Answer_Menu = "File_Cabinet_Answer_Menu" + DYNARRAY Fld_Prompt[] + Fld_Prompt["File_No"] = "Unique file number" + Fld_Prompt["Id"] = "F1 to select file owner from rolodex" + Fld_Prompt["Regarding"] = "Description of pertinent matter" + Fld_Prompt["Empl_Num"] = "F1 to assign atty. and default rate" + Fld_Prompt["File_Type"] = "F1 to select area of law" + Fld_Prompt["Opened"] = "Date this file was opened (##/##/##)" + Fld_Prompt["Closed"] = "Date this file closes (##/##/##)" + Fld_Prompt["Status"] = "F1 to select file status" + Fld_Prompt["Footer_Code"] = "F1 to select statement footer" + Fld_Prompt["Opposing"] = "F1 to select opposing atty from rolodex" + Fld_Prompt["Memo"] = "Add or edit notes for this file" + Fld_Prompt["Rate_Per_Hour"] = "Hourly billing rate" + + Fld_Prompt["Memo_Date"] = "Enter Date of this memo entry" + Fld_Prompt["Memo_Note"] = "Enter Memo (up to 90 characters)" + + Fld_Prompt["Date"] = "Date for this transaction, (##/##/##)" + Fld_Prompt["T_Code"] = "F1 to select trans. code & description" + Fld_Prompt["Quantity"] = "Number of billable units" + Fld_Prompt["Rate"] = "Dollar value per unit" + Fld_Prompt["Amount"] = "Dollar amount of ledger entry" + Fld_Prompt["Billed"] = "Has transaction been billed (Y/N)?" + Fld_Prompt["Note"] = "Note to append to trans. description" + Fld_Prompt["A1"] = "First line of address, or firm name" + Fld_Prompt["Location"] = "Location for this phone number" + Fld_Prompt["Phone"] = "Phone No.: ###-####, 1-###-###-####" + Fld_Prompt["Relationship"] = "Code for type of relationship" + Fld_Prompt["Rolodex_Id"] = "Select Id from Rolodex" + Fld_Prompt["Identifier"] = "Name of variable" + Fld_Prompt["Response"] = "Text to replace variable" + if (M_Tbl = "Files") then + Cabinet = "Open" + else Cabinet = "Archived" + endif + Main_Table_View(M_Tbl, 1, 0) + END + Timing = False + File_Cabinet_Speedbar() + ECHO NORMAL + WAIT WORKSPACE + PROC "File_Cabinet_Wait_Proc" + TRIGGER "ARRIVEFIELD", "ARRIVETABLE", "DEPARTROW", "DEPARTTABLE" + MESSAGE "MENUSELECT" + KEY -60, -66, -67, -83, -50, -46, -19, -48, -38, -23, -33, -20, 43, 45 + ; DO_IT Clear Edit Del Alt-M Alt-C Alt-R Alt-B Alt-L Alt-I Alt-F Alt-T + ; F2 F8 F9 DEL Memo Close Reopen Balnces Locate Inquire Form Timer + - + ENDWAIT + CLEARSPEEDBAR + PROMPT "" + MESSAGE "" +ENDPROC +WRITELIB Off_Lib File_Cabinet_Wait + +RELEASE PROCS ALL \ No newline at end of file diff --git a/old-database/FILCABNT.SC2 b/old-database/FILCABNT.SC2 new file mode 100755 index 0000000000000000000000000000000000000000..49e78129024930c345071f98c1082c00487b348b GIT binary patch literal 31488 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 Jynmq6{x9z7pv?dP literal 0 HcmV?d00001 diff --git a/old-database/FORM_MGR.SC b/old-database/FORM_MGR.SC new file mode 100755 index 0000000..03d1eec --- /dev/null +++ b/old-database/FORM_MGR.SC @@ -0,0 +1,597 @@ +MESSAGE "Writing forms procedures to library..." + +PROC Select_Forms() + ; read list of form files on disk, match with descriptions in form table + ; and place info in dialog box for user to select forms + PRIVATE Form_Table, Main_Drv, New_Form_Dir, + File_1, File_2, Form_Array, Form_Description, Button, Element + + PROC Get_Form_Info(Key) + PRIVATE Form_Array + GETRECORD Form_Table UPPER(Key) TO Form_Array + if RetVal then + Key = Form_Array["Memo"] + else Key = "This file not listed in table of form names!" + endif + RETURN Key + ENDPROC; Get_Form_Info + + PROC Process_Save_As_Dialog(TriggerType, TagValue, EventValue, ElementValue) + PRIVATE FileInfo + if (TriggerType = "SELECT") AND (TagValue = "Pick_Tag") then + PARSEFILENAME Pick_File TO FileInfo + File_Name = UPPER(FileInfo["FILE"]) + REFRESHCONTROL "Accept_Tag" + RETURN TRUE + endif; SELECT + if (TriggerType = "ACCEPT") then + if (File_Name = "") then + MESSAGE "Error! File name cannot be blank!" + RETURN FALSE + else Text_File = PRIVDIR() + File_Name + ".MRG" + if ISFILE(Text_File) then + if Response_Is_Yes("Warning: Duplicate File Name!", "File exists, replace?") then + RETURN TRUE ; replace file + else RETURN FALSE ; do not replace file + endif + else RETURN TRUE ; file does not already exist + endif + endif + endif + RETURN TRUE + ENDPROC; Process_Save_As_Dialog + + PROC Save_As_Dialog(File_Name) + PRIVATE Pick_File, Button_Val + SHOWDIALOG "Save Merge Configuration" + PROC "Process_Save_As_Dialog" + TRIGGER "SELECT", "ACCEPT" + @4,20 HEIGHT 16 WIDTH 40 + @1,3 ?? "Save File As:" + ACCEPT @1,20 + WIDTH 11 "A8" + PICTURE "*!" + TAG "Accept_Tag" + TO File_Name + PICKFILE @3,3 HEIGHT 8 WIDTH 32 + COLUMNS 2 + PRIVDIR() + "*.MRG" + TAG "Pick_Tag" + TO Pick_File + PUSHBUTTON @12,5 WIDTH 12 + "~Y~es" + OK + DEFAULT + VALUE "OK" + TAG "OK_Button" + TO Button_Val + PUSHBUTTON @12,22 WIDTH 12 + "~N~o" + CANCEL + VALUE "Cancel" + TAG "Cancel_Button" + TO Button_Val + ENDDIALOG + RETURN RetVal + ENDPROC; Save_As_Dialog + + PROC Process_Dialog(TriggerType, TagValue, EventValue, ElementValue) + PRIVATE New_Dir, Text_File, Ch, L, Continue + if (TriggerType = "OPEN") then + SELECTCONTROL "Available_Tag" + Form_Description = Get_Form_Info(File_1) + REFRESHCONTROL "Description_Tag" + RETURN TRUE + endif; OPEN + if (TriggerType = "ARRIVE") then + RESYNCDIALOG + if (TagValue = "Available_Tag") then + Form_Description = Get_Form_Info(File_1) + else if (TagValue = "Selected_Tag") then + Form_Description = Get_Form_Info(File_2) + endif + endif + REFRESHCONTROL "Description_Tag" + RETURN TRUE + endif; ARRIVE + if (TriggerType = "UPDATE") then + if (TagValue = "Available_Tag") OR (TagValue = "Selected_Tag") then + Form_Description = Get_Form_Info(EventValue) + REFRESHCONTROL "Description_Tag" + RETURN TRUE + endif + ; if user selects new subdirectory, verify then load file list + if (TagValue = "Directory_Tag") then + New_Dir = EventValue + if NOT MATCH(New_Dir, "..\\") then + New_Dir = New_Dir + "\\" + endif + if (New_Dir = Form_Dir) then + RETURN TRUE + endif + if (DIREXISTS(New_Dir) = 1) then ; change directory string + Form_Dir = New_Dir + New_Form_Dir = Form_Dir + File_1 = "" + File_2 = "" + FOREACH Element IN Form_Array + RELEASE VARS Form_Array[Element] + ENDFOREACH + REFRESHCONTROL "Available_Tag" + REFRESHCONTROL "Selected_Tag" + REFRESHCONTROL "Description_Tag" + RETURN TRUE + else BEEP + MESSAGE "Invalid subdirectory. Press any key to continue." + Ch = GETCHAR() + RETURN FALSE + endif + endif; Directory_Tag + endif; UPDATE + if (TriggerType = "SELECT") then + if (TagValue = "Available_Tag") then + if NOT ISFILE(Form_Dir + File_1) then + Form_Dir = SUBSTR(Main_Drv,1,2) + RELATIVEFILENAME(Form_Dir + File_1) + New_Form_Dir = Form_Dir + File_1 = "" + File_2 = "" + FOREACH Element IN Form_Array + RELEASE VARS Form_Array[Element] + ENDFOREACH + REFRESHCONTROL "Available_Tag" + REFRESHCONTROL "Selected_Tag" + REFRESHCONTROL "Description_Tag" + REFRESHCONTROL "Directory_Tag" + RETURN TRUE + else Form_Array[File_1] = File_1 + REFRESHCONTROL "Selected_Tag" + endif + else if (TagValue = "Selected_Tag") then + RELEASE VARS Form_Array[File_2] + REFRESHCONTROL "Selected_Tag" + Form_Description = Get_Form_Info(File_2) + REFRESHCONTROL "Description_Tag" + endif + endif + RETURN TRUE + endif; SELECT + if (TriggerType = "ACCEPT") then + if (TagValue = "Save") OR (TagValue = "Run") then + if (DYNARRAYSIZE(Form_Array) <= 0) then + BEEP + SELECTCONTROL "Available_Tag" + MESSAGE("No form(s) selected. Press any key to continue.") + Ch = GETCHAR() + RETURN FALSE + endif + +; if (TagValue = "Save") then +; if (USERNAME() <> "") then +; L = LEN(USERNAME()) +; if (L > 8) then +; L = 8 +; endif +; Text_File = SUBSTR(USERNAME(), 1, L) +; else Text_File = "ASSEMBLE" +; endif +; if ISFILE(PRIVDIR() + Text_File + ".MRG") then +; Text_File = "" ; if file exists, set name to blank +; endif +; Continue = Save_As_Dialog(Text_File) +; else Continue = True +; Text_File = PRIVDIR() + "$$$$$$$$.MRG" +; endif + + + Text_File = "R:\\PRIVATE\\$$$$$$$$.MRG" + Continue = True + + if Continue then + FILEWRITE Text_File FROM Main_Dir + "\n" ; data subdirectory + PRINT FILE Text_File Main_Drv, "DOCUMENT\\WPDOCS\\DOCS\\", "\n" ; target subdirectory + PRINT FILE Text_File UPPER(Main_Table), "\n" ; rolodex, files, etc. + MOVETO Subset_Table + FORMKEY ; show table form view + CTRLHOME + TAB + SCAN + PRINT FILE Text_File FIELDSTR(), "\n" + ENDSCAN + FORMKEY ; return to form view + PRINT FILE Text_File "FORMS\n" ; print full file name for each selected form + if NOT MATCH(Form_Dir, "..\\") then + Form_Dir = Form_Dir + "\\" + endif + FOREACH Element IN Form_Array + PRINT FILE Text_File Form_Dir, Form_Array[Element], "\n" + ENDFOREACH + if (TagValue = "Run") then + MESSAGE "Executing document assembly program..." + RUN BIG "R:\\PRIVATE\\GO.BAT" ; run external dos merge program + MESSAGE "" + else MESSAGE "Configuration file saved successfully." + endif + endif; + RETURN FALSE ; return to dialog box + endif; Save Or Run + if (TagValue = "Tag_All") then + ; method to select all available form files + RETURN FALSE + else if (TagValue = "UnTag_All") then + FOREACH Element IN Form_Array + RELEASE VARS Form_Array[Element] + ENDFOREACH + REFRESHCONTROL "Selected_Tag" + REFRESHCONTROL "Description_Tag" + RETURN FALSE + else RETURN TRUE + endif + endif; Tag_All + endif; ACCEPT + RETURN TRUE + ENDPROC; Process_Dialog + +; Main procedure begins here + MOUSE SHOW + if (DIREXISTS(Form_Dir) <> 1) then ; does initial subdir exist + Form_Dir = Main_Dir + endif + New_Form_Dir = Form_Dir + Main_Drv = SUBSTR(Main_Dir, 1, 3) + Form_Table = Main_Dir + "FORMS\\FORM_LST" + File_1 = "" + File_2 = "" + DYNARRAY Form_Array[] + ECHO OFF + SHOWDIALOG "Select Forms To Merge With Data" + PROC "Process_Dialog" + TRIGGER "UPDATE", "ARRIVE", "SELECT", "OPEN", "ACCEPT" + @2, 4 HEIGHT 21 WIDTH 71 + LABEL @1,1 + "~C~urrent Directory:" + FOR "Directory_Tag" + ACCEPT @2,2 WIDTH 65 "A80" PICTURE "*!" + TAG "Directory_Tag" + TO Form_Dir + LABEL @4,1 + "~A~vailable Forms: (Space = Tag)" + FOR "Available_Tag" + PICKFILE @5,2 HEIGHT 10 WIDTH 32 + COLUMNS 2 + Form_Dir + SHOWDIRS + TAG "Available_Tag" + TO File_1 + LABEL @16,1 + "~F~orm Description:" + FOR "Description_Tag" + ACCEPT @17,2 WIDTH 65 + "A150" + TAG "Description_Tag" + TO Form_Description + LABEL @4,36 + "~S~elected Forms: (Space = Untag)" + FOR "Selected_Tag" + PICKDYNARRAY @5,37 HEIGHT 10 WIDTH 15 + Form_Array + TAG "Selected_Tag" + TO File_2 + PUSHBUTTON @6,55 WIDTH 12 + "~R~un" + OK + DEFAULT + VALUE "" + TAG "Run" + TO Button + PUSHBUTTON @8,55 WIDTH 12 + "~S~ave" + OK + VALUE "" + TAG "Save" + TO Button + PUSHBUTTON @10,55 WIDTH 12 + "~T~ag All" + OK + VALUE "ACCEPT" + TAG "Tag_All" + TO Button + PUSHBUTTON @12,55 WIDTH 12 + "~U~nTag All" + OK + VALUE "ACCEPT" + TAG "UnTag_All" + TO Button + PUSHBUTTON @14,55 WIDTH 12 + "~Q~uit" + CANCEL + VALUE "" + TAG "Cancel" + TO Button + ENDDIALOG + Form_Dir = New_Form_Dir ; use current subdir as default next time + MOUSE HIDE + MOVETO Subset_Table +ENDPROC +WRITELIB Off_Lib Select_Forms + +;============================================================================= + +PROC Form_Wait() + PRIVATE Fld_Prompt, Answer_Menu + + PROC Process_Dialog(TriggerType, TagValue, EventValue, ElementValue) + if (TriggerType = "SELECT") then + if (TagValue = "IndexArrayTag") then + Search_Words[I_Word] = I_Word + else if (TagValue = "SearchArrayTag") then + RELEASE VARS Search_Words[S_Word] + endif + endif + REFRESHCONTROL "SearchArrayTag" + endif + RETURN TRUE + ENDPROC; Process_Dialog + + PROC Ask_Form() + ; user selects a subset of forms table based on search criteria + PRIVATE Index_Words, Search_Words, I_Word, S_Word, Name, Description, Status, Element + FORMKEY ; switch to table view + SHOWPULLDOWN ; hide main menu + ENDMENU + CLEARSPEEDBAR ; clear form speedbar + PROMPT "Press Search to find matching forms; ESC or Cancel to quit." + MOUSE SHOW + DYNARRAY Index_Words[] + DYNARRAY Search_Words[] + Name = "" + Description = "" + Status = "" + ECHO OFF + ; load all index words into a dynamic array + VIEW "Inx_Lkup" + SCAN + Index_Words[STRVAL([Keyword])] = [Keyword] + ENDSCAN + CLEARIMAGE + SHOWDIALOG "Form Selection Criteria" + PROC "Process_Dialog" + TRIGGER "SELECT", "ARRIVE" + @2, 6 HEIGHT 21 WIDTH 68 + @1, 2 ?? "Name" + ACCEPT @1,15 + WIDTH 48 "A80" PICTURE "*!" + TAG "Name_Tag" + TO Name + @2, 2 ?? "Description" + ACCEPT @2,15 + WIDTH 48 "A80" + TAG "Desc_Tag" + TO Description + @3, 2 ?? "Status" + ACCEPT @3,15 + WIDTH 15 "A40" + TAG "Status_Tag" + TO Status + LABEL @5,2 + "~I~ndex List: (Space = Add)" + FOR "IndexArrayTag" + PICKDYNARRAY @6,2 HEIGHT 10 WIDTH 28 + Index_Words + TAG "IndexArrayTag" + TO I_Word + LABEL @5,35 + "~S~earch For: (Space = Delete)" + FOR "SearchArrayTag" + PICKDYNARRAY @6,35 HEIGHT 10 WIDTH 28 + Search_Words + TAG "SearchArrayTag" + TO S_Word + PUSHBUTTON @17,20 WIDTH 10 + "~S~earch" + OK + DEFAULT + VALUE "" + TAG "OK" + TO Button + PUSHBUTTON @17,40 WIDTH 10 + "~C~ancel" + CANCEL + VALUE "" + TAG "Cancel" + TO Button + ENDDIALOG + PROMPT "" + if (RetVal = True) then + MESSAGE "Searching..." + ECHO OFF + {Ask} {Form_lst} Check Tab Example "link" + if NOT ISBLANK(Name) then + TYPEIN (", " + Name) + endif + TAB + if NOT ISBLANK(Description) then + TYPEIN Description + endif + TAB + if NOT ISBLANK(Status) then + TYPEIN Status + endif + {Ask} {Form_inx} + FOREACH Element IN Search_Words + if NOT ISBLANK(Search_Words[Element]) then + TAB + EXAMPLE "link" + TAB + TYPEIN Search_Words[Element] + RIGHT + endif + ENDFOREACH + DO_IT! + Subset_Table = PRIVDIR() + "SUBSET" + RENAME TABLE() Subset_Table + MOVETO "Form_lst(Q)" CLEARIMAGE + MOVETO "Form_inx(Q)" CLEARIMAGE + MOVETO Subset_Table + if ISEMPTY(Subset_Table) then + CLEARIMAGE + No_Matches_Found() + else ; copy form and display on screen + {Tools} {Copy} {JustFamily} {Form_lst} TYPEIN Subset_Table ENTER {Replace} + View_Answer_Table(Subset_Table, 1, 3) + DOWNIMAGE + IMAGERIGHTS READONLY + UPIMAGE + Form_Answer_Wait() + endif + endif + FORMKEY ; return to form view + MOUSE HIDE + ENDPROC; Ask_Form + + PROC Form_Answer_Menu() + SHOWPULLDOWN + "Modify" : "Toggle between edit and main mode" : "Modify" + SUBMENU + "Edit Mode - F9" : "Allow data to be edited, deleted, etc." : "Edit\Mode", + "Main Mode - F2" : "Discontinue editing" : "Main\Mode" + ENDSUBMENU, + "Reports" : "Choose report to generate" : "Reports" + SUBMENU + "Form List" : "Print list of matching forms" : "Form_List" + ENDSUBMENU, + "Return" : "Return to previous menu" : "" + SUBMENU + "No " : "Continue working with selected data" : "Return\No", + "Yes - F8" : "Return to complete data set" : "Return\Yes" + ENDSUBMENU + ENDMENU + if (SYSMODE() = "Main") then + MENUDISABLE "Main\Mode" + else MENUDISABLE "Edit\Mode" + MENUDISABLE "Reports" + endif + Form_Speedbar() + ENDPROC; Form_Answer_Menu + + PROC Form_Answer_Wait_Proc(TriggerType, EventInfo, CycleNumber) + if (EventInfo["TYPE"] = "MESSAGE") And + (EventInfo["MESSAGE"] = "MENUSELECT") And + (EventInfo["MENUTAG"] = "Form_List") then + SHOWPULLDOWN + ENDMENU + CLEARSPEEDBAR + MESSAGE "One moment please..." + ECHO OFF + Print_Report(Subset_Table, "1", "") + EXECPROC Answer_Menu + RETURN 1 + else RETURN Answer_Table_Wait_Proc(TriggerType, EventInfo, CycleNumber) + endif + ENDPROC; Form_Answer_Wait_Proc + + PROC Form_Answer_Wait() + Form_Answer_Menu() + Sound_Off() + ECHO NORMAL + Message_Box("Search Completed", "Matching Form Entries: " + STRVAL(NRECORDS(Subset_Table))) + WAIT WORKSPACE + PROC "Form_Answer_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD" + KEY -60, -66, -67, -83, -50 + ; DO_IT Clear Edit Delete Memo + ; F2 F8 F9 DEL Alt-M + ENDWAIT + CLEARSPEEDBAR + MESSAGE "" + ENDPROC; Form_Answer_Wait + + PROC Form_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Key_Code, Menu_Pick + if (TriggerType = "ARRIVEFIELD") then + PROMPT Fld_Prompt[FIELD()] + RETURN 1 + endif + if (EventInfo["TYPE"] = "KEY") then + Key_Code = EventInfo["KEYCODE"] + SWITCH + ; F9 - COEDIT + CASE (Key_Code = -67) : RETURN Main_Table_Edit() + ; F2 - DO_IT! + CASE (Key_Code = -60) : if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + ; F8 - CLEAR + CASE (Key_Code = -66) : RETURN Main_Table_Clear() + ; Alt-M - Memo + CASE (Key_Code = -50) : Display_Memo(Main_Table) + Main_Table_Menu() + Form_Speedbar() + RETURN 1 + ; DELETE + CASE (Key_Code = -83) : if (SYSMODE() = "CoEdit") then + RETURN Display_Delete_Box() + else RETURN 1 + endif + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + if (EventInfo["MESSAGE"] = "MENUSELECT") then + Menu_Pick = EventInfo["MENUTAG"] + SWITCH + CASE (Menu_Pick = "Edit\Mode") : RETURN Main_Table_Edit() + CASE (Menu_Pick = "Main\Mode") : if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + CASE (Menu_Pick = "Ask") : Ask_Form() + Main_Table_Menu() + Form_Speedbar() + RETURN 1 + CASE (Menu_Pick = "Close\Yes") : RETURN Main_Table_Clear() + CASE (Menu_Pick = "Close\No") : RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + SOUND 400 100 RETURN 1 ; safety valve + ENDPROC; Form_Wait_Proc + + PROC Form_Speedbar() + CLEARSPEEDBAR + SPEEDBAR "~F10~ Menu":-68, "~Alt-M~ Memo":-50 + PROMPT Fld_Prompt[FIELD()] + ENDPROC; Form_Speedbar + + ; MAIN PROCEDURE BEGINS HERE + ECHO OFF + SETDIR "FORMS" + Answer_Menu = "Form_Answer_Menu" + DYNARRAY Fld_Prompt[] + Fld_Prompt["Name"] = "Unique form name (required)." + Fld_Prompt["Memo"] = "Description of form and its usage." + Fld_Prompt["Status"] = "Status code indicating merge availability." + Fld_Prompt["Keyword"] = "Indexed keywords for form. F1 for lookup help." + Main_Table_View(Main_Table, 1, 3) + Form_Speedbar() + ECHO NORMAL + WAIT WORKSPACE + PROC "Form_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD" + KEY -60, -66, -67, -83, -50 + ; DO_IT Clear Edit Delete Alt-M + ; F2 F8 F9 DEL Memo + ENDWAIT + CLEARSPEEDBAR + PROMPT "" + MESSAGE "" + ECHO OFF + if ISTABLE(Subset_Table) then + DELETE Subset_Table + endif + SETDIR Main_Dir +ENDPROC +WRITELIB Off_Lib Form_Wait + +RELEASE PROCS ALL diff --git a/old-database/FORM_MGR.SC2 b/old-database/FORM_MGR.SC2 new file mode 100755 index 0000000000000000000000000000000000000000..697214d36fc40a240c62a8bb762745ba14f58ad6 GIT binary patch literal 17408 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 mnMEp*Luf=u;{ovnBmG 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 0) And ([Trust_Bal] > 0) then + if ([Trust_Bal] >= [Amount_Owing]) then + [Transferable] = [Amount_Owing] + else [Transferable] = [Trust_Bal] + endif + else [Transferable] = 0.0 + endif + MESSAGE "" +ENDPROC +WRITELIB Off_Lib Tally_Ledger + +PROC Tally_All(M_Tbl, D_Tbl) + if ISEMPTY(M_Tbl) then + RETURN 1 + endif + MESSAGE "Updating file accounts..." + ECHO OFF + COEDIT M_Tbl + PICKFORM "1" + SCAN ; assign file numbers to dynamic array + MOVETO D_Tbl ; move to ledger table + Tally_Ledger() ; total accounts for this file + ENDSCAN + DO_IT! + CLEARALL; remove file cabinet images + ECHO NORMAL + Message_Box("Updating Balances", "All accounts have been updated.") +ENDPROC +WRITELIB Off_Lib Tally_All + +PROC Update_Accounts() + ECHO OFF + Tally_Ledger() +ENDPROC +WRITELIB Off_Lib Update_Accounts + +PROC Total_Row() + PRIVATE New_Amount + if RECORDSTATUS("New") OR RECORDSTATUS("Modified") then + if NOT ISBLANK([Quantity]) AND NOT ISBLANK([Rate]) then + New_Amount = Round([Quantity]*[Rate], 2) + if (New_Amount <> [Amount]) then + [Amount] = New_Amount + endif + endif + endif +ENDPROC +WRITELIB Off_Lib Total_Row + +; ************* Local Procedures ***************** + +PROC Ledger_Table_Wait(New_Row, Empl_Code, Hourly_Rate) + + PROC Arr_Field() + File_Cabinet_Speedbar() + ENDPROC; Arr_Field + + PROC Arr_Row() + if RECORDSTATUS("New") AND NOT RECORDSTATUS("Modified") then + [Billed] = "N" + endif + ENDPROC; Arr_Row + + PROC Dep_Field() + if NOT ISVALID() then + Message_Box("Invalid Field Entry", "The data in this field is invalid.") + RETURN 1 + endif + SWITCH + CASE FIELD() = "Date" : + if ISBLANK([]) then + [Date] = TODAY() + endif + CASE FIELD() = "T_Code" : + if ISBLANK([]) then + [T_Type_L] = "" + endif + ECHO OFF + TAB + REVERSETAB + ECHO NORMAL + CASE FIELD() = "Empl_Num" : + if ISBLANK([]) then + [Empl_Num] = Empl_Code + endif + CASE FIELD() = "Quantity" : + Total_Row() + CASE FIELD() = "Rate" : + if ISBLANK([Rate]) AND ([T_Type] = "2") then + if ([Empl_Num] = Empl_Code) then + [Rate] = Hourly_Rate + else if NOT ISBLANK([Empl_Num]) then + GETRECORD "Employee" [Empl_Num] TO DYNARRAY A + if RETVAL then + [Rate] = A["Rate_Per_Hour"] + endif + endif + endif + endif + Total_Row() + CASE FIELD() = "Amount" : + Total_Row() + CASE FIELD() = "Billed" : + if ISBLANK([]) then + [Billed] = "N" + endif + OTHERWISE : + ENDSWITCH + RETURN 0 + ENDPROC; Dep_Field + + PROC Dep_Row() + ; depart row if record is new & blank + if RECORDSTATUS("New") AND NOT RECORDSTATUS("Modified") then + RETURN 0 + endif + if ISBLANK([Date]) then + Message_Box("Incomplete Entry", "This transaction requires a date.") + MOVETO [Date] + RETURN 1 + endif + if ISBLANK([T_Code]) then + Message_Box("Incomplete Entry", "This transaction requires a transaction code.") + MOVETO [T_Code] + RETURN 1 + endif + if ISBLANK([Empl_Num]) then + Message_Box("Incomplete Entry", "This transaction requires an employee number.") + MOVETO [Empl_Num] + RETURN 1 + endif + if ISBLANK([Amount]) then + Message_Box("Incomplete Entry", "This transaction requires an hours/dollar amount entry.") + MOVETO [Amount] + RETURN 1 + endif + if ISBLANK([Billed]) then + Message_Box("Incomplete Entry", "Specify whether transaction has been billed (Y/N).") + MOVETO [Billed] + RETURN 1 + endif + if ISFIELDVIEW() then + DO_IT! + endif + ; repeat attempts to post record by changing item_no key until posted + if RECORDSTATUS("New") OR RECORDSTATUS("Modified") then + ECHO OFF + WHILE TRUE + if ISBLANK([Item_No]) then + [Item_No] = 1 + endif + POSTRECORD NOPOST LEAVELOCKED + if RetVal then + QUITLOOP + else [Item_No] = [Item_No] + 1 + endif + ENDWHILE + ECHO NORMAL + endif + RETURN 0 + ENDPROC; Depart_Row + + PROC End_Edit(Clear_Table) + if ISFIELDVIEW() then + DO_IT! + RETURN 1 + endif + if (Dep_Field() <> 0) then + RETURN 1 + endif + if (Dep_Row() = 0) then ; record posted + Update_Accounts() + if Clear_Table then + Main_Table_Clear() + else Main_Table_End_Edit() + endif + if (SYSMODE() = "Main") then + RETURN 2 + endif + endif + RETURN 1 + ENDPROC; End_Edit + + PROC Ledger_Table_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Key_Code, Menu_Pick, Temp_Date, Rec_No, Row_No, I + if (TriggerType = "ARRIVEFIELD") then + Arr_Field() + RETURN 0 + endif + if (TriggerType = "ARRIVEROW") then + Arr_Row() + RETURN 0 + endif + if (TriggerType = "DEPARTFIELD") then + RETURN Dep_Field() + endif + if (TriggerType = "DEPARTROW") then + RETURN Dep_Row() + endif + if (EventInfo["TYPE"] = "KEY") then + Key_Code = EventInfo["KEYCODE"] + SWITCH + ; DELETE + CASE (Key_Code = -83) : + if ISFIELDVIEW() then + RETURN 0 + endif + if Response_Is_Yes("Confirm Deletion", "Are you sure you want to delete this entry?") then + if (NIMAGERECORDS() = 1) then + DEL + Update_Accounts() + RETURN 2 ; deletion of only record terminates ledger wait + else DEL + Arr_Row() + Arr_Field() + endif + endif + RETURN 1 + ; INSERT + CASE (Key_Code = -82) : + if (Dep_Field() <> 0) then + RETURN 1 + endif + if (Dep_Row() = 0) then + MOVETO FIELD "Date" + if ATFIRST() then + Temp_Date = BLANKDATE() + else UP + Temp_Date = [] + DOWN + endif + INS + [] = Temp_Date + Arr_Row() + Arr_Field() + endif + RETURN 1 + ; F2 - Do_It! + CASE (Key_Code = -60) : RETURN End_Edit(FALSE) + ; F8 - CLEAR + CASE (Key_Code = -66) : RETURN End_Edit(TRUE) + ; F3-UPIMAGE, F4-DOWNIMAGE + CASE (Key_Code = -61) OR (Key_Code = -62) : + if (Dep_Field() <> 0) then + RETURN 1 + endif + if (Dep_Row() = 0) then ; record posted + Update_Accounts() + DOWNIMAGE ; move to ledger table + HOME ; go to first record + MOVETO M_Tbl ; move back to file cabinet + RETURN 2 + else RETURN 1 + endif + ; ALT-B - Summarize Balances + CASE (Key_Code = -48) : + if (Dep_Field() <> 0) then + RETURN 1 + endif + if (Dep_Row() = 0) then ; record posted + Rec_No = RECNO() + Row_No = ROWNO() + Update_Accounts() + Summarize_Accounts(M_Tbl, 1) + DOWNIMAGE ; move back to ledger table + HOME + FOR I FROM 1 TO Row_No-1 + DOWN + ENDFOR + MOVETO RECORD Rec_No + REFRESH + endif + RETURN 1 + ; ALT-T - Start or stop time keeper + CASE (Key_Code = -20) : + if Timing then + Stop_Ticker() + else Start_Ticker() + endif + RETURN 1 + ; Alt-Y or Alt-N + CASE (Key_Code = -21) OR (Key_Code = -49) : + if ISFIELDVIEW() then + DO_IT! + endif + if (SYSMODE() <> "CoEdit") OR NOT ISVALID() then + RETURN 0 + else if (Key_Code = -21) then + [Billed] = "Y" + else [Billed] = "N" + endif + endif + RETURN 1 + ; + or - to change current date + CASE (Key_Code = 43) OR (Key_Code = 45) : + RETURN Change_Date(Key_Code) + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + RETURN 1 + endif; key type + if (EventInfo["MESSAGE"] = "MENUSELECT") then + Menu_Pick = EventInfo["MENUTAG"] + SWITCH + CASE (Menu_Pick = "Main\Mode") : RETURN End_Edit(FALSE) + CASE (Menu_Pick = "Return\Yes") : RETURN End_Edit(TRUE) + CASE (Menu_Pick = "Return\No") : RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + SOUND 400 100 RETURN 1 ; safety valve, ignore all events not recognized + ENDPROC; Ledger_Table_Wait_Proc + +; ********** MAIN PROCEDURE BEGINS HERE ********** + if New_Row then + if (RecordStatus("New") = FALSE) then ; table is not empty + END ; open up new row + DOWN + endif + endif + MOVETO FIELD "Date" + Arr_Field() + Arr_Row() + ECHO NORMAL + WAIT WORKSPACE + PROC "Ledger_Table_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD", "DEPARTFIELD", "ARRIVEROW", "DEPARTROW" + KEY -60, -66, -48, -83, -82, -61, -62, -20, 43, 45, -49, -21 + ; DO_IT Clear Alt-B Del Ins UpI DnI Alt-T + - + ; F2 F8 Sum Balances Del Ins F3 F4 Timer AltN,Y + ENDWAIT + CLEARSPEEDBAR + MESSAGE "" +ENDPROC +WRITELIB Off_Lib Ledger_Table_Wait + +RELEASE PROCS ALL \ No newline at end of file diff --git a/old-database/LEDGER.SC2 b/old-database/LEDGER.SC2 new file mode 100755 index 0000000000000000000000000000000000000000..227a70f864bff38278015173e0850827cda3d1c9 GIT binary patch literal 12800 zcmeHOdvu${mA^BeKH0MT$P*|cvPfLXmJ-KFoR^ajWLpjneo0oG*i8_MEhlCjJ5lU} z6exCDwmh0bb{EQ{&@Caz_-wpO&hlsq?3Mx>(nHpGA+R(&PTCEHE%}4P?kRf?_5SXR zB+E(2X-|9haL(pS^v&EmcV_O~nYs7QozGX7S;?d(8nR2ue9Fr+A+pC^H?F^_o^f@7 z>NNq%CEAl+zW8h+_Z_#k(99GOGJ8b%k_!`EN^~8SFTF6)Wkepa_#B=lcXv6_TQlPo z8=I;dH&pw>{*869jxDjctJFmkJe3hWD<*Yz5x6LUixRjffr}EjD1nO-xF~^(61XUV z|2Gnd@2LcWx!_+_^boItN|a2Yy-ZW0iS);Lo3$U%W3F+hcT9WMjS9H3%wK`@#Q9_%t-+* ztH3CNWHzB*Y{@WN^P%3`=0r+{K8wu}&so?vIM$>`apE$t2AE zhhjJ@a0Adqt9rQ$@!0m@$y~xQrJjX9|x{o(#|6CB_UY zu+83PaJfdL3G=M>YU4nv8qmwRp|RX`j7-xiWN<9E-Cz-DC}Hxh$R8iaA)6#w$V%Ci zLxKz()w9S(b{fayZiwwBH@R!Nx?_=sUUIM7-VyEV>e=EVw=3G--rL{P=j!Y2i+1lU zEiI)o;jZlJ?v8bkyOrGGNO;fo7`Yda+rNz|$-R)=!TxAZUsvBAaxWrxIk^{uFy6nj zFH#xpjx>?`n%@5S&Qzv*PoyRmQ(#SZv@Z=*ckSE^ve>p*PoFBSipM&-(rtv9qe#`( zXnc#Vtox5N?gs1JcDl!8e>zF_hT*3ABKM@8$UV^y8p-S>HAdYB_Ym#b*%^yRH+S>8 zPCr(i%h$;aom`=l**fv+1W^Qjmg(dwoz&>0PA6fVv=SyO9I5ozk$Pi<*EFsRHS0G+ zs!Y8B)hI~40aYtVy#ZAzNWB$hLnGBk!j*OOoQ1F|h-T9%u|#_59T6ZQzYMCqK-szV zD#dX*QwZ}OsPF9lQ|YNF+dHyH-bb&Y{$%Vd)Vwgo`Rkn@`&kar3@Q;XXJvy!!!nrWVm8f|r);O> zb@Fj~HO)l|`!#Tp%AcR&kHKyL7t`rCVsOed+Aqv3NKCF1Qnt{D1V`C_cnZnMkUT6$ zji{7A5=~6M-|CtApQ7;uPwdc@a zK`?<8<~TIqcygFCpClZP`{2oxlgDW)IOK6?1Kl#d=)*tm|VPr5RcuIy&0Z9^08I z#H2>cMSpm{Mq+$itBh);IKuwAy4Hw_=!U31(A?}_6NpqcZlE{j5!IqbsW>HLm|-XO zyfk>;u)pO35(ZYY#gDw3-jkeufql;_{3+yrJ)aO#E~O`hq|ZrOORyfWGA*l6?>4jw z!N{-L{Bsl<^S_doK&w|E4ZsbXJpZL2!E}!hOfx?$Qp_aOd!`tN5ES1CJPYY7GDyYe z`CsYv&jEIf|5197en@{yzrYT7|E%%P2Z{3SoAbzHu2|D%-%6u%3TP^tE<93LS2#61 zp8z}3aGQM#?M+jpi(J_*oFlN6fVol;=Na}+f_tptqF^ux8MEa~xjFT{9bKJW?7U=p zDIx5ElyOguZ+yHVus-6iZ(P?9roN>_?I>X@wx7s6F84umT_sN0PRm1p*%s^v<^j+= z%~lH<^|<^Q*6=jJcI^SI{ZcydRavd6G5-0|^!yvRJDIY2`iIkhIsI4D|6}^v8F$V2 zWCpK)Rss6_w*(|JEuQsu9#Z3u)T%}s$o zb)`Q<-+>Rsnk%FI?{oWMYJe&U(RPaCAM?X2Mf0#9= zk7L-j$z*MmSPe4P!$mN`EuC(%pPUUQNxJZEphE0oJ;@t1SS1 zIBTz_ElG~TuM(hb3i9;lS=#JHs+?OXJmM9o@Sl9J)-`a5nUhh>8{a-#3|oZf#$?Zh zM@q!9W-CM*d;nlnwVM{yMv?e2s`BnE!Xc?scpkHN zih+XE#D=%VT(E;tS67d#Z)?|17gR)dhYOjmo?X%IF1C-gI_IiUMS-5aIF2{fN^#&M z5UJ|zfC|yap-3IM1KYNDM;iLKovUV2M<$$;n5cJ83>8@eMVeyq2p^5oswlO(+zl|{ zU>=W3_&|r}5)HW&Ky!6c%IYrD1_$b!>LOK*)d31O!ooyCjqBB+0Tw&t4+qFkp+L9= z=ZcelqFd02Q=FD?xXpdYKMoV?hdb-U@{vY8I%KDiOR=AAJCL&B?jm6;3lM#W%Hgz0 z3)Ae$pjkr4Ih3$tpoE@Z1;sNlupCsIyjGca(cY0KOLu?WeaZo-bkE)%HQ+QJE zETYrK*?MON4HN`3jiG%pB`)<;l+gigARW&@9WVhO57}DUTPP7u5-=`J@a+`AZc6M+ z5-=`J@LY=EeoDNQBw$>cfKLdjizD=1QzR)EsVSTt_LqsB(xA5H|CY4o9swmYnzdZ0 z-CsZ}ux3>=zoS7g&R|h+kd}RG)GH7Z`(6>^Z%%>nX+nXhN{VVM_Z?hI!le@qs+r-q+RJi4;K=-r-tO*b+!a+p6&FGv@jYlD6?tji z9&7LF+~eB4HP*KkpC)87xiz{|`}Uhvn8sDyI=`Vr#cgW)V%s>vqaREI@%I;#wM9}F zY+Mib8s%qOGpz?wdw&oVhoK=BKtrsfrb%W49 z+;6&NV@&p^OIbVR3+N$pzc9=RH|<{N1wXXTL-m^B=3;6=PnSFmj z^d?!k1p+sgg|yH%CdTB3E}~H?6d%bf1o{kf2X=bKE*I1;u*+|zKDv>WW!>EpW4SN}lAU3;@M$F)-bFGJqR@2^s zU~sS?-$Z4sfJau@~6mmol&orGR<4dI)TFu9b>OfPZrZ!MlO`K!(zpe@2wFDym zsw(zwo2jZU;15N@{>r)l)%$B3bT*>UnTS9`btF(-8>XY+-~)83MGnzIC_F(p%ga{; zPf-e9D8~e!?IBdDsXyC6h@;LW7!iWvw>+upfljhAb^>Q)irAnt*%0w8!!+^?hcRwE zWVu;gC}1*^B3=v#buTfJy|-X2_q#eTM+8sR zSZ<&6T8l%fi8D01(BSz#sOQ_lllmbgzU_Es)cFnj&*+gFAMOF(prJDkws2c(J{ z4%^Tt(5piqI1F4FXl&64x1Vl)rD|S^#9fPWQe9Rm+$AEhZvwZ9am`))GN3&M)9GOxZBJ7&G^Ni-1l0E1)yAzW?mRp6*Wi3`! z?aO512N39k5HtMGN||^x1!YW~4-#wRIh@Dx>XgIQMbnjxJ^So^a;PKw9tsa|bHJENc zAIAuMaW+0~#X-adU7d%}sXB@HL!sK1fZo(@4e-8pV}tuc;Ur!I3LkE53XuES03!By zDQD2_kH=hldiz~F`;(d72-+ji@9Kyt8>t*&Wq4L2Cf?iA*%jaBs^&77*R<Ovr8p&H1YbV51Pu&y~!7pMyBeAvGR8K^OsarS*^e16tdnH?yh0IDl}0w}q+KJoX=s;*Zq^C=L3r-eWe;oUM>=_2BM6Nsp)723XGU413UZ^k*6FSu0f0*6^)!tuuuAfPlg;u##B zHvm$Z2X`%c*Ahs9zf}H{<4Wd2Fhd3-> zl=tGkV47GfkBB4>7FY=I@iu&iJaH2p6b8)`!V-fOK^twO%O!M1;^>hb1@0htbrQyr z>~F1EiNjEZag5%@s5K87x5PM3Q$-3FGSmEV^cxoQZ2n#bN05g^YIz<%j)?v{U?=_d zuZb3kka*QFVR5+x2P(sLKjG4^Rg^#iy6s!g!ui{N4JCYNV~M3wP|F+Ww0K%RfgC6- zwfJ2J2k3;Tv^eEy@ghbmEEepMHR1`L57PNzah-fztP)0c1s!7xF5y@~)}N=P!qUwb zF}#2KDB`)|Edlvqo`vNpCBH*y%1pWF^>8oR!m$pqv~QZHRm{yvS0{+t#N~XOq$I#I z%Bu)G;V5@PK873PjiQ``FPIzL5CJz+7>Fu=gq})4*zvmP=IM zJ?taHnCR~$QR7Kbe0}3dnSBOXBl~Sj<4H^Q3)zh)&Fm|48ezcfD|M90W5RT-prKPR z*6bt%6IqUDM&S1Fy+EGlGS3`OS&7B7szj6!8$C9Z#q)}N#jvgH0u;j|VCRH=oMM>u zVt5V3@Fq%fJ*KC2_Uzfk#;kwNd35RDC!*^9*owR2?3DA#r?0Y<^3O0ZUuJ_eK539L z?STHKIuho))5!WL?sc2uz3qso>E}G2?G=zYo+6zd|uIP}ZPd?I$jm#wLY$y@{(`SS&Sn2U9*`*Cy1c?;dDGRt&s3P3VF&d+L$pg=39lNv&#XZpu}uz3+=k-6undx6 zWu3JN>u(i)*!P?ovv4bRT)u*T-8jAP6(PDsO6%|Cr`Q#r;@`(AO~E=n4&0gK?~R`l z4T{^T1L=Ucn`T+FjR4yHqi)wW^O*GaKhJXf|9kY8bUW&8wXYQ338OA!g=fCUF!P< ze5AnN?Qh4zigm!tL4csw)!nr@9>rlApE9`d*9mU?@qrtETj0i@4!F~Q8KBly9*>DX z`BzY(PUh=m`8oGBjWsoqy4p(8mpHh|IoGJC!*A!TI@J+(!$N-(%7+mGp`zF4228j4 z9t@QDOLUVg}c5H`0!Tg##-#IyYK09}35|Go&`flxPbKX7n z_L3O!i&R=#ewCmIP)R9OaN@S6e2M^-D4>$IX+fzaQX0~zL@jNhAVEuLgTS5l-rm^; zK|i8WD|w@PZ{EzjdGqGYo0;8sO}hj#^unG73e%re(+2)T|5M>upo<)K(L6jo|TLj-DicFOVMKDd3O;q_d10SQxKC0A92riM7vn3_Zz-^Lp zgQOf};896=6=^;MgFa=oPcab;)}oH@E8Bg_oxY$PM2(gEead%z*y8$6`;?#fl;5x^ zultmDe9BT8!8TdxkQE(4Z7@iblB`@UE4vxx5m|XsR*o_7&$9B4j4dvqpwLi_(q4lt zuHjqGAKEccJ9m;l{@4!Fy}~E~2UNXSESNdnHEm1Pt-R_OZrQO^*H)uFY49VXDmd$H z@JDUcvR&0c3F^vetkZ;mKWVEfv=c5K{29X;HZ9#XrmqD4UdOat!^uXCLA_jX!Jjq? zM$T1>0?*bjmkf2#c2v9U7R$&{W%cIb4#N3-i<-xoC>}X;TXbv4sLCiAu4`ID$d|4{ z99GN43R9`F(st9`GE>FQa>=!a&8rRYS3#U+4>|fUS8T*CqjrOXX3l6)Q3u@57DGpk z3^&*MFHAyRMoO+Rj7HK6g^_HyP(aXj^#V%E4;hYXSgvE@2{1Dti#li)*uimjHJr=Y zWy@vTbJ4!c90LQ6vCZU%SyKI~r4Qp|dr&QT3|%;%F*9S9%pra(T&AicU(v8y)Lg+X z8Mud>Z877a1}*AQU{EJ zZ4I$g9CGY(v7`#Axq``6w~Ix)g!{n#l&z9cXiw}Vmd^x#mu=%2vi%r4 zTqcrxqpG{=fbF6$R87eg6{q4D=-qjo)Mi?EO2gdtRY|I8sS&eK@Jy5$DWWqa#M#a; z#mDTzbG*-nnB7e*RiETL~l;q1Qi5HoD&&A}1$suBvw>#h#|2#2E_?sLt8>7v_L?uS~Q z!bA;rp3Lb}M$UHf+&9tNDp-%MMr?a4Mj68@F%Lw))C;*X*T3i(B|JWLn_ehm)Id|P zz-N_BcLY@yfEr^|9ZiHX3c4likuDDp>&^(9lQLWrkDke4bhTG^T$3%pyoY1hl&U+d zkEVK%z)jG`&JrD?O6K05cl1Ga-&Bv4b!r+9-mt_$usv{}=0SklaR5DwO_?T3@T#5q zfN2?c%{>nn?oet`^?V+;UqT;XvA(#)whYfl_(6$VgM8wi_h3X|0h32&e$sgO+ihnn zE(w#9wGyz;Z}4Kk51S@|9;3eq0jz>rZ*+GMpbbt16KMzOOBz56EQLNCy+H5w12n^D zyixlKfFQKPSxDPQe{?oL04`u7X`giQasWT9Ek3XTnY1=m(1c&VW0-(f(5awcO>64lMv^ zg1r^mJb=^T39iclsW2B{F&uz#>7bOK1F#5w31^^QW75$Ez>&VonuK|Ig60`tPCI1?_Mf z-9fLW*U(kI=Y7ADXV!ldzvlA#Z;`f4(}FTw@Z-ZU+M>0tWbL`UUBlbUc$?wvX5L!7 z-ND;0^Y-h!{U&c8~sz#rOU&!za2;zZE$1i30W`+;U4fv*0{EQN1 z6cVVJPH1O@elBXp5*-X*789iD6FM2;Rz{#RCUi6WgB(9|=?#pqpAiC!XHs-VIl?Im z12Yye8D)|S6C1=MSWWQ=PLlCC>pd%!7}GpDKF1q>iH(=h@wwjkb~av3x%KCHxO*9H z4ZS5sCmOGZ^^ae}i{klEk5_UbUeZ&6;5D9{^lykKld+8%@b{#mu~a4;NyNb49Z$w% z(KuqUHjc#C@*abezt?s!*!Jo}MmB;;4>J!|oaJIR%|bAy8<#`9EZk;AX7U1aR%Di# zwGGP{RvfTQo2`cL50!Yl?BKb~u<|h>yLQ6N`dU#0~+jG^pVjE9F0<`VXtBSv8{S|_@+KyDVDBf1*}?KUym zCAx=1w@-90i0&o9`HJZNB)Ydm_czf=1l=dqo5`j#5RG+(`x2RKZz`V5#8QxsW%_!n zqi{04A(qMt-%79R*^uS`E7cuK_Ce>mo_J?W{1=yCNcALoqOpzH4Po@Zu6QDr?F>ia z$yi2Uyt5P11d2q&!Nm&BbSx3;oKmy1FP-V>j$awea!$yE6NxLb*g#iL zsyoX>_H=b+6Y&Uy`!YSOPh?Wrbx{cS_9n8Kcm^*^DwerCoPhQ=fD6$wzsBD|Izf-n zSLtE-ISd|sKyDqT(v;u&rtM1BJ;eL)7`i|`)lAe5a8?)p-C07k0TV|GR_^k_*u zvm?}^cVXRE!JUgv+zV^y-ZPiMeIUu7dL1?(!Ut_8wtA|isU{2s%EIMjBx|Ih=V08fB3j*^4lN~j+I|K64y*on< z+JkC$kSyJ^GoavD8?TIS`lHnJ*dcORpr*Mo)EHR&`G$93Pkqy4d*+53L-if~(nP3{ zpk|GYFGAvh^EZzZ-1;uHY4^P$ws~fR%9kztsIk?x@hb$r$l}{vJ4?-&xz52Pd|`jI zr?U@ZYo>n#{uMxHx}U|ebU!Cm|11E*8irj&3IP1AEV$vzqs2aZ6>R)YW~c>oz`@r* z{E|?>_gnT}jIU`(z)wEw!s)J5xEo7_&Tz83=W+q0VrdMf>@&?s0rT{R^V(a&oyd}i zqdICh8C4_kL?WJCtFpgMh=kKI&ld>m=ZVyV?=S4Zmm&5vi*B{(E)rctaBdQ#VbNVB zy6Z*vHNfojp8xZXA)ap#mP0&3AEEod0B|*IgcXE99U;Ec;7$4lMtByB zyD=-V2)+XQ%P=#Yh5da(FPg**@HV{)SNV9zMC$KxFXOVGE}Z;C6To?mM=?TEHz+06H;$1vRc HfBgIdWW*Q3 literal 0 HcmV?d00001 diff --git a/old-database/Main_RH.SC b/old-database/Main_RH.SC new file mode 100755 index 0000000..a486cb5 --- /dev/null +++ b/old-database/Main_RH.SC @@ -0,0 +1,155 @@ +; clear workspace, procedures, variables, etc. +ECHO OFF +RELEASE VARS ALL +RELEASE PROCS ALL +ALTSPACE {Desktop} {Empty} +MOUSE HIDE +SHOWPULLDOWN +ENDMENU +PROMPT "" + +PROC Show_Main_Menu() +SHOWPULLDOWN + "Open" : "Select area to work in" : "Open" + SUBMENU + "Rolodex" : "Names, addresses and phone numbers of clients, etc." : "Rolodex", + "File Cabinet" : "Client file and billing information" : "Files", + "QDRO Screen" : "Enter/edit information for drafting QDROs" : "QDROs", + SEPARATOR, + "Plan Information" : "Summary of Retirement Plan Particulars" : "PlanInfo", + "Annuity Evaluator" : "Calculate present value of an annuity" : "Pensions", + "Deposit Book" : "Record bank deposits" : "Deposits" + ENDSUBMENU, + "Utilities" : "System utilities" : "Utilities" + SUBMENU + "Basic Data" : "Enter and modify basic data" : "" + SUBMENU + "Areas of Law" : "File relate to a specific area of law (e.g. divorce)" : "FileType", + "Employee Info" : "Name, number & hourly rates of attorneys/employees" : "Employee", + "Ledger Groupings" : "Ledger transactions belong to groups (e.g. trust, credit, hourly charge)" : "TrnsType", + "Footers in Bills" : "Text to print at bottom of statements for reminders/information" : "Footers", + "Rolodex Groups" : "Rolodex members belong to groups (e.g. client, opposing counsel, personal)" : "GrupLkup", + "Transaction Codes" : "Codes & descriptions of ledger transactions (e.g. PMT for payment)" : "TrnsLkup", + "Status of Files" : "Designate files as open, closed, contingent, bankrupt, etc." : "FileStat", + "States" : "Abbreviations & names of states" : "States" + ENDSUBMENU, + "Tally Accounts" : "Total ledger entries for all files" : "Tally_All" + ENDSUBMENU, + "System" : "Customize program for your office" : "" + SUBMENU + "Customize" : "Customize program for your office, letterhead, etc." : "Customize", + "Printers" : "Set up printers to use with application" : "" + SUBMENU + "Settings" : "Add, delete or change printer settings" : "Printers", + "Default" : "Select printer to use for output" : "Printer_Default" + ENDSUBMENU + ENDSUBMENU, + "Exit" : "Terminate application" : "Exit" + SUBMENU + "No " : "Do not exit - return to application" : "Exit\No", + "Yes " : "Exit application and return to DOS" : "Exit\Yes" + ENDSUBMENU + ENDMENU +ENDPROC; Show_Main_Menu + +PROC CLOSED Main_Menu() + USEVARS Form_Dir, Main_Dir, Off_Lib, Autolib, Ltr_Hd, Appl_Title, Default_Printer + ; disable some paradox keys + KEYDISABLE "DOS", "DOSBIG", "MINIEDIT", "ORDERTABLE", "WINNEXT" + ; define report strings and read from disk + DYNARRAY Rpt_St[] + Rpt_St["Port"] = "" + Rpt_St["Page_Break"] = "" + Rpt_St["Setup_St"] = "" + Rpt_St["Reset_St"] = "" + Rpt_St["Phone_Book"] = "" + Rpt_St["Rolodex_Info"] = "" + Rpt_St["Envelope"] = "" + Rpt_St["File_Cabinet"] = "" + Rpt_St["Accounts"] = "" + Rpt_St["Statements"] = "" + Rpt_St["Calendar"] = "" + Rpt_St["B_Underline"] = "" + Rpt_St["E_Underline"] = "" + Rpt_St["B_Bold"] = "" + Rpt_St["E_Bold"] = "" + if NOT ISBLANK(Default_Printer) then + Setup_Printer(Default_Printer) + endif + Answer_Table = "" + WHILE TRUE + Show_Main_Menu() + GETMENUSELECTION TO Choice + Main_Table = Choice + SWITCH + CASE (Choice = "Rolodex") : Rolodex_Wait("Rolodex") + CASE (Choice = "Files") : File_Cabinet_Wait("Files", "Ledger") + CASE (Choice = "Pensions") : ECHO OFF + SETDIR "PENSIONS" + Pension_Table_Wait() + ECHO OFF + SETDIR Main_Dir + CASE (Choice = "QDROs") : Qdro_Table_Wait() + CASE (Choice = "Deposits") : Setup_Table_Wait(Choice, 2, 1, "1") + CASE (Choice = "PlanInfo") : Setup_Table_Wait(Choice, 1, 0, "1") + CASE (Choice = "Employee") : Setup_Table_Wait(Choice, 4, 14, "1") + CASE (Choice = "TrnsType") : Setup_Table_Wait(Choice, 6, 1, "1") + CASE (Choice = "Footers") : Setup_Table_Wait(Choice, 2, 0, "1") + CASE (Choice = "GrupLkup") : Setup_Table_Wait(Choice, 3, 1, "1") + CASE (Choice = "TrnsLkup") : Setup_Table_Wait(Choice, 2, 2, "1") + CASE (Choice = "FileStat") : Setup_Table_Wait(Choice, 4, 2, "1") + CASE (Choice = "FileType") : Setup_Table_Wait(Choice, 4, 23, "1") + CASE (Choice = "States") : Setup_Table_Wait(Choice, 3, 18, "1") + CASE (Choice = "Printers") : Setup_Table_Wait(Choice, 1, 2, "1") + ; reset default printer values + if NOT Setup_Printer(Default_Printer) then + Select_Printer() + endif + CASE (Choice = "Printer_Default"): Select_Printer() + CASE (Choice = "Customize") : Customize_Setup() + CASE (Choice = "Tally_All") : Tally_All("Files", "Ledger") + CASE (Choice = "Exit\Yes") : QUITLOOP + ENDSWITCH + ENDWHILE + CLEARPULLDOWN +ENDPROC; Main_Menu + +; =========== MAIN SCRIPT BEGINS HERE ======= +; define subdirectory and library file where application is located + Form_Dir = "R:\\DOCUMENT\\WPDOCS\\FORMS\\" + Main_Dir = "R:\\PDOXDATA\\OFFICE\\" ; location of data files + Off_Lib = "OFFICE" ; name of procedure library + if ISFILE(Off_Lib + ".LIB") then ; look for procedure library + Autolib = SDIR() + Off_Lib ; autoload library + else Quit "Cannot locate library, please recreate." + endif + SETDIR Main_Dir +; define letterhead array/application title and read from disk + ARRAY Ltr_Hd[10] +; assign default printer & read in system variables + Default_Printer = Get_Custom_Setup_Variables() +; show splash screen + ECHO NORMAL ; display empty desktop + DYNARRAY Att[] + Att["HASFRAME"] = False + Att["CANMOVE"] = False + Att["CANRESIZE"] = False + Att["Style"] = 116 + WINDOW CREATE ATTRIBUTES Att HEIGHT 13 WIDTH 52 @6,14 TO Splash_Screen + PAINTCANVAS BORDER ATTRIBUTE 16 0, 0, 12, 51 + @5,1 ?? FORMAT("W50,AC", Appl_Title) + @7,1 ?? FORMAT("W50,AC","CLIENT AND BILLING DATABASE") + SLEEP 1000 + FOR I FROM 6 TO 23 + SLEEP 10 + WINDOW MOVE Splash_Screen TO I,14 + ENDFOR + WINDOW CLOSE +; execute top level procedure + Main_Menu() + ECHO OFF + SETDIR SDIR() +; clean up before exiting + RESET + RELEASE PROCS ALL + RELEASE VARS ALL diff --git a/old-database/OFFICE.LIB b/old-database/OFFICE.LIB new file mode 100755 index 0000000000000000000000000000000000000000..baa4bc91857df754cf1b38569c16bd060b421c13 GIT binary patch literal 117248 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] + [Pensions->Version] + LOCATE File_Id + if RetVal then ; output record located + COPYTOARRAY Temp_Array + CREATE Subset_Table LIKE "Output" + VIEW Subset_Table + COEDITKEY + COPYFROMARRAY Temp_Array + DO_IT! + FORMKEY + Select_Forms() + DELETE Subset_Table + else MESSAGE("Please compute and save results of this entry first!") + endif + MOVETO "Pensions" + FORMKEY +ENDPROC; +WRITELIB Off_Lib Ask_For_Output + + +PROC Discount(DR, IR, Max_COLA, Pmts, Monthly) +PRIVATE COLA, PV_Pmt, Months_Delayed + DR = DR * 0.01/12 +; if (IR = 0) then +; Payout = Round(Pmts * Monthly,0) +; Fund_Bal = Round(PV(Monthly, DR, Pmts),0) +; else + +; F = "TEMP.TXT" +; FILEWRITE F FROM "This is a printout of the annuity stream."+"\n"+"\n" + Months_Delayed = 12; number of monthly payments until COLA kicks in + Payout = 0 + Fund_Bal = 0 + DR = 1/(1+DR) + FOR N FROM 1 to Pmts + if (IR > 0.0) then + if (N > Months_Delayed) AND (MOD(N,12) = 1) then + if (IR < 1.0) then + COLA = Round(Monthly*IR,2) + else COLA = IR + endif + if (Max_COLA > 0.0) AND (COLA > Max_COLA) then + COLA = Max_COLA + endif + Monthly = Monthly + COLA + endif; (if N > Months_Delayed AND Divisible by 12) + endif; (if Increase Rate > 0.0) + + Payout = Payout + Monthly + PV_Pmt = Round(Monthly * Round(POW(DR,N),5),2) + Fund_Bal = Fund_Bal + PV_Pmt + +; PRINT FILE F FORMAT("W5", N), FORMAT("W15.2,EC", Monthly), FORMAT("W15.2,EC", Payout), FORMAT("W15.2,EC", PV_Pmt), FORMAT("W15.2,EC", Fund_Bal),"\n" + + ENDFOR; FOR N FROM 1 to Pmts + Payout = Round(Payout,0) + Fund_Bal = Round(Fund_Bal,0) +; endif; if (IR > 0) + Last_Pmt = Monthly +ENDPROC; +WRITELIB Off_Lib Discount + + +PROC Life_Stats( Age_1, Age_2, Race_Sex_Code ) +PRIVATE + I, N, + Alive_Now, Alive_Then + FORMKEY; get out of pension table form view + MOVETO Life_Table + MOVETO FIELD "Age" + LOCATE INT(Age_1) ; integer, current age + MOVETO FIELD "NA_" + Race_Sex_Code +; F = "TEMP.TXT" + FOR I FROM 1 to ARRAYSIZE(Num_Alive) ; copy number alive to array + Num_Alive[I] = [] +; PRINT FILE F FORMAT( "W9.2", I ) +; PRINT FILE F FORMAT( "W9.2", Num_Alive[I] ), "\n" + DOWN + ENDFOR + I = ARRAYSIZE(Num_Alive) + Alive_Now = Round(Num_Alive[1]-(Num_Alive[1]-Num_Alive[2])*(Age_1-INT(Age_1)),0) + Alive_Then = Round(Num_Alive[I-1]-(Num_Alive[I-1]-Num_Alive[I])*(Age_2-INT(Age_2)),0) + Num_Alive[1] = Alive_Now + Num_Alive[I] = Alive_Then +; PRINT FILE F FORMAT( "W9.2", Num_Alive[1] ), "\n" +; PRINT FILE F FORMAT( "W9.2", Num_Alive[I] ), "\n" + Mortality = Round((Alive_Then/Alive_Now), 4) + if (Mortality > 1.0) then + Mortality = 1.0 + endif + LEFT + UP + N = [] + UP + I = [] + LE = Round(I-(I-N)*(Age_2-INT(Age_2)),2) +ENDPROC; +WRITELIB Off_Lib Life_Stats + + +PROC Is_Vested(Full, Per_Vested, V_Date) +; check for expected value of future vesting + PRIVATE + I, Prob, Expected + Expected = Round(Full*Per_Vested*0.01, 2) + if (Per_Vested < 100.0) then + MOVETO "Separate" + if (NIMAGERECORDS() > 0) then + Prob = 1 - [Separation_Rate] * 0.01 + if (Prob < 1.0) then + MOVETO "Schedule" + FOR I FROM 1 TO NIMAGERECORDS() + MOVETO RECORD I + if ([Vests_On]<> BLANKDATE()) And ([Vests_At] > 0.0) then + Expected = Expected + Round(Full*[Vests_At]*0.01*POW(Prob, ([Vests_On]-[Pensions->Valu])/365 ), 2) + endif + ENDFOR + endif + endif + MOVETO "Pensions" ; move to next table + endif + RETURN Expected +ENDPROC; +WRITELIB Off_Lib Is_Vested + + +PROC Death_Benefit(Is_Age, Pay_Age, Last_Pmt) +; check for death benefit -- Lump1, Lump2 + PRIVATE + N, I, + DB_1, DB_2, + B1, B2, + Partial, + Probability, + B_Age, + B_Starts + MOVETO "Death" + DB_1 = 0.0 + DB_2 = 0.0 + if (NIMAGERECORDS() > 0) then + if ([Lump1] > 0.0) Or ([Lump2] > 0.0) then + B1 = [Lump1] + B2 = [Lump2] + N = ARRAYSIZE(Num_Alive) + FOR I FROM 1 to N - 1 + Probability = 1 - Round(Num_Alive[I+1]/Num_Alive[I], 5) + if (I = 1) then + Partial = Is_Age - INT(Is_Age) + else if (I = N - 1) then + Partial = Pay_Age - INT(Pay_Age) + else Partial = 1 + endif + endif + B1 = Round(B1*(1+[Growth1]*.01*Partial)/(1+[Disc1]*.01*Partial), 0) + B2 = Round(B2*(1+[Growth2]*.01*Partial)/(1+[Disc2]*.01*Partial), 0) + DB_1 = DB_1 + Round((B1+B2)*Probability,0) + ENDFOR + endif ; pre-payment lump sum distribution + endif ; a record exists + R["PV_Pre_DB"] = DB_1 + R["PV_Annuity"] = R["PV_AMT"] + DB_1 + if (R["PV_Annuity"] >= R["WV_AT"]) then + R["PV_Plan"] = R["PV_Annuity"] + else R["PV_Plan"] = R["WV_AT"] + endif +ENDPROC; +WRITELIB Off_Lib Death_Benefit + + +PROC Marriage_Factor() +; check for marriage factor --- first dates, then years, finally % + PRIVATE + M, S, M_Per + MOVETO "Marriage" + M = 0.0 + S = 0.0 + M_Per = 100.0 + if (NIMAGERECORDS() > 0) then + ; calculate years married based on dates, or accept entry + if ([Married_From] <> BLANKDATE()) And ([Married_To] <> BLANKDATE()) then + M = Round(([Married_To]-[Married_From])/365,2) + [Married_Years] = M + else if ([Married_Years] > 0.0) then + M = [Married_Years] + endif + endif + ; calculate years of service based on dates, or accept entry + if ([Service_From] <> BLANKDATE()) And ([Service_To] <> BLANKDATE()) then + S = Round(([Service_To]-[Service_From])/365,2) + [Service_Years] = S + else if ([Service_Years] > 0.0) then + S = [Service_Years] + endif + endif + ; calculate marriage factor, or accept entry + if (M > 0.0) And (S >= M) then + M_Per = Round(M/S, 4) * 100 + [Marital_%] = M_Per + else if ([Marital_%] > 0.0) then + M_Per = [Marital_%] + endif + endif + endif; if an image is present + R["Years_Married"] = M + R["Years_Service"] = S + R["Marr_Per"] = M_Per + R["Marr_Amt"] = Round(M_Per * 0.01 * R["PV_Plan"], 0) + MOVETO "Pensions" +ENDPROC; +WRITELIB Off_Lib Marriage_Factor + + +PROC Save_Results() + PRIVATE File_Id, I, J + MESSAGE "Saving results of calculation..." + FORMKEY; put results table into table view + CTRLHOME + DYNARRAY Transfer[] + J = NFIELDS("Results") + FOR I FROM 1 TO J + TAB + Transfer[FIELD()] = FIELDSTR() + ENDFOR + DEL + MOVETO "Output" + MOVETO FIELD "File_No" + File_Id = [Pensions->File_No] + [Pensions->Version] + LOCATE File_Id + if (RetVal = False) then + END + DOWN ; open up a blank row + endif + [File_No] = File_Id + FOREACH Element IN Transfer + MOVETO FIELD Element + [] = Transfer[Element] + ENDFOREACH + if (R["Mortality"] < 1.0) then + [Mortality] = "0" + [Mortality] + endif + [Title] = [Pensions->Title] + [First] = [Pensions->First] + [Last] = [Pensions->Last] + if ( SUBSTR([Last], LEN([Last]), 1) = "s") then + [Last's] = [Last] + "'" + else [Last's] = [Last] + "'s" + endif + [Plan_Name] = [Pensions->Plan_Name] + [Birth] = FORMAT("d1", [Pensions->Birth]) + if (SEARCH(" ", [Birth]) = 1) then + [Birth] = "0" + SUBSTR([Birth], 2, 7) + endif + [Race] = [Pensions->Race] + [Sex] = [Pensions->Sex] + [Info] = FORMAT("d2", [Pensions->Info]) + I = SEARCH(" ", [Info]) + if (I > 1) then + [Info] = SUBSTR([Info], 1, I) + SUBSTR([Info], I+2, 15) + endif + [Valu] = FORMAT("d2", [Pensions->Valu]) + I = SEARCH(" ", [Valu]) + if (I > 1) then + [Valu] = SUBSTR([Valu], 1, I) + SUBSTR([Valu], I+2, 15) + endif + [Vested_Per] = FORMAT("w7.2", [Pensions->Vested_Per]) + if ([Pensions->Vested_Per] < 100.0) then + [Vest_Amt_Text] = "Monthly Benefit Reduced For Probability of Vesting" + endif + if ([Pensions->COLA] > 0.0) then + [Cola_Text] = "Expected Annual Increase In Benefits" + if ([Pensions->COLA] > 1.0) then + [COLA] = FORMAT("W7.2, E$", [Pensions->COLA]) + else [COLA] = FORMAT("W5.2", [Pensions->COLA]*100) + "%" + endif + endif + [Initial_Amt_Text] = "Accrued Monthly Benefit" + if ([Pensions->Pre_DR] = 0) then + [Initial_Amt_Text] = "Present Value of Monthly Annuity" + [PV_Plan_Text] = "Money Purchase Annuity Benefit" + else if ([Pensions->Pre_DR] < [Pensions->Post_DR]) then + [PV_Plan_Text] = "Money Purchase Annuity Benefit" + else [PV_Plan_Text] = "Formula Method Annuity Benefit " + endif + endif + if (R["PV_Annuity"] < R["WV_AT"]) then + [PV_Plan_Text] = "Separation Benefit" + endif + if ([Pensions->Tax_Rate] > 0.0) then + [V_Title] = "after-tax present value" + [Tax_Rate_Text] = "Estimated Tax Liability" + [PV_AT_Text] = "After-tax Present Value of Annuity" + else [V_Title] = "" + [Tax_Rate_Text] = "" + [PV_AT_Text] = "" + endif + + if ([Pensions->Withdrawal] > 0.0) then + [With_Text] = "Lump Sum Payment Option in Lieu of Annuity" + if ([Pensions->Tax_Rate] > 0) then + [With_AT_Text] = " After-tax Value of Lump Sum Payment Option" + endif + else [With_Text] = "No lump sum payment option available" + [With_AT_Text] = "" + endif + + if (R["PV_Pre_DB"] > 0.0) then + [PV_Ann_Text] = "Total Present Value, Including Death Benefit" + [Pre_DB_Text] = "Present Value of Pre-retirement Death Benefit" + else [Pre_DB_Text] = "" + endif + if (R["Marr_Per"] < 100.0) then + [Years_Married] = FORMAT("W7.2", R["Years_Married"]) + [Years_Service] = FORMAT("W7.2", R["Years_Service"]) + [Married_Text] = "Years of Service While Married" + [Service_Text] = "Total Years of Plan Service" + [Marr_Per_Text] = "Percent of Benefit Accrued While Married" + [Marr_Amt_Text] = "Marital Component" + else [Married_Text] = "" + [Service_Text] = "" + [Marr_Per_Text] = "" + [Marr_Amt_Text] = "" + endif + MESSAGE "" +ENDPROC; +WRITELIB Off_Lib Save_Results + + +PROC Life_Exp_Compute() + PRIVATE + LE, + Mortality, + Payout, + Fund_Bal, + Last_Pmt + ECHO OFF + if (SYSMODE() <> "CoEdit") then + COEDITKEY + endif + MOVETO "Pensions" + POSTRECORD NOPOST LEAVELOCKED + if NOT RetVal then + MESSAGE "Duplicate file/version entry - please change!" + MOVETO FIELD "Version" + RETURN + endif + MESSAGE "Computing present value..." + R["Age"] = Round(([Valu]-[Birth])/365.25, 2) + if ([Start_Age] > R["Age"]) then + R["Start_Age"] = [Start_Age] + else R["Start_Age"] = R["Age"] + [Start_Age] = R["Age"] + POSTRECORD NOPOST + endif + R["Accrued"] = [Accrued] + R["COLA"] = [COLA] + R["Pre_DR"] = [Pre_DR] + R["Post_DR"] = [Post_DR] + R["Tax_Rate"] = [Tax_Rate] + R["Years_From"] = R["Start_Age"] - R["Age"] + ARRAY Num_Alive[INT(R["Start_Age"])-INT(R["Age"])+2] + ; get life expectancy and mortality factor + Life_Stats(R["Age"], R["Start_Age"], SUBSTR([Race],1,1)+SUBSTR([Sex],1,1)) + MOVETO "Pensions" + FORMKEY; return to form view + R["Life_Exp"] = LE + R["Payments"] = INT(LE*12) + R["Mortality"] = Mortality + R["EV_Monthly"] = Is_Vested([Accrued], [Vested_Per], [Valu]) + Discount([Post_DR], [COLA], [Max_COLA], R["Payments"], R["EV_Monthly"]) + R["Pay_Out"] = Payout + R["Fund_Value"] = Fund_Bal + R["PV"] = Round(Fund_Bal * POW((1+[Pre_DR]*0.01/12), -R["Years_From"]*12), 0) + R["PV_AM"] = Round(R["PV"] * Mortality, 0 ) + R["PV_AMT"] = Round(R["PV_AM"] * (1-[Tax_Rate]*0.01), 0) + R["Withdrawal"] = [Withdrawal] + R["WV_AT"] = Round(R["Withdrawal"] * (1-[Tax_Rate]*0.01), 0) + Death_Benefit( R["Age"], R["Start_Age"], Last_Pmt ) + Marriage_Factor() + POSTRECORD NOPOST + FORMKEY + MOVETO "Results" + COPYFROMARRAY R + PICKFORM 1 + MESSAGE "" + PROMPT " Press ESC when finished viewing." + BEEP + WAIT FIELD + UNTIL "ESC" + PROMPT "" + if Response_Is_Yes("SAVE RESULTS", "Save Results of PV Calculation?") then + Save_Results() + else DEL + endif + MOVETO "Pensions" + FORMKEY ; redisplay pension form + PROMPT Prompt_String +ENDPROC; +WRITELIB Off_Lib Life_Exp_Compute + + +PROC Actuarial_Compute() + PRIVATE + Increase, Race_Sex_Code, Monthly, COLA, Max_COLA, Pre_Dr, Post_DR, TEP, PV_TEP, PV_TEP_NOW + TEP = 0 + PV_TEP = 0 + PV_TEP_NOW = 0 + ECHO OFF + if (SYSMODE() <> "CoEdit") then + COEDITKEY + endif + MOVETO "Pensions" + POSTRECORD NOPOST LEAVELOCKED + if NOT RetVal then + MESSAGE "Duplicate file/version entry - please change!" + MOVETO FIELD "Version" + RETURN + endif + MESSAGE "Computing present value..." + R["Age"] = Round(([Valu]-[Birth])/365.25, 2) + if ([Start_Age] > R["Age"]) then + R["Start_Age"] = [Start_Age] + else R["Start_Age"] = R["Age"] + [Start_Age] = R["Age"] + POSTRECORD NOPOST + endif + Current_Age = INT(R["Age"] * 12) + Start_Age = INT(R["Start_Age"] * 12) + First_Payment_Age = Start_Age + 1 ; first payment is made one month after retirement + Array_Size = 1200 - Start_Age + Array Pmt_Age[Array_Size] + ARRAY Num_Alive[Array_Size] + ARRAY Prob_Surv[Array_Size] + ARRAY Payment[Array_Size] + ARRAY EV_Payment[Array_Size] + ARRAY Disc_Factor[Array_Size] + ARRAY EPV_Payment[Array_Size] + R["Accrued"] = [Accrued] + R["EV_Monthly"] = Is_Vested([Accrued], [Vested_Per], [Valu]) + R["COLA"] = [COLA] + R["Pre_DR"] = [Pre_DR] + R["Post_DR"] = [Post_DR] + R["Tax_Rate"] = [Tax_Rate] + R["Years_From"] = R["Start_Age"] - R["Age"] + R["Tax_Rate"] = [Tax_Rate] + R["Withdrawal"] = [Withdrawal] + R["WV_AT"] = Round(R["Withdrawal"] * (1-[Tax_Rate]*0.01), 0) + Race_Sex_Code = SUBSTR([Race],1,1) + SUBSTR([Sex],1,1) + + Monthly = R["EV_Monthly"] + COLA = [COLA] + Max_COLA = [Max_COLA] + Increase = COLA + Pre_DR = [Pre_DR] + Pre_DR = 1/(1+Pre_DR*0.01/12) + Post_DR = [Post_DR] + Post_DR = 1/(1+Post_DR*0.01/12) + + +; (******************* New portion of code ***************) + + FORMKEY; get out of pension table form view + MOVETO Mort_Table + MOVETO FIELD "Month" + LOCATE Current_Age + MOVETO FIELD "NA_" + Race_Sex_Code + Num_Alive_Now = [] + MOVETO FIELD "Month" + LOCATE First_Payment_Age + MOVETO FIELD "NA_" + Race_Sex_Code + FOR I FROM 1 to Array_Size ; copy number alive to array + Num_Alive[I] = [] + Pmt_Age[I] = Start_Age + I + Prob_Surv[I] = Round((Num_Alive[I] / Num_Alive_Now), 6) + if (Increase > 0.0) then + if (I > 12) AND (MOD(I,12) = 1) then + if (Increase < 1.0) then + COLA = Round(Monthly * Increase,2) + else COLA = Increase + endif + if (Max_COLA > 0.0) AND (COLA > Max_COLA) then + COLA = Max_COLA + endif + Monthly = Monthly + COLA + endif; (if I > 12 AND Remainder = 1) + endif; (if Increase > 0.0) + Payment[I] = Monthly + EV_Payment[I] = Round((Monthly * Prob_Surv[I]), 2) + TEP = TEP + EV_Payment[I] + Disc_Factor[I] = Round(POW(Post_DR,I),6) + EPV_Payment[I] = Round((EV_Payment[I] * Disc_Factor[I]), 2) + PV_TEP = PV_TEP + EPV_Payment[I] + if (I < Array_Size) then + DOWN + endif + ENDFOR + + TEP = Round(TEP,0) + PV_TEP = Round(PV_TEP,0) + PV_TEP_NOW = Round(PV_TEP * Round(POW(Pre_DR,(Start_Age-Current_Age)),6),0) + + Print_To_File = "N" + if (Print_To_File = "Y") then + F = "TEMP.TXT" + FILEWRITE F FROM "This is a printout of the annuity stream. \n \n" + PRINT FILE F "Current Age: ", FORMAT("W9", Current_Age), "\n" + PRINT FILE F "Age at First Payment: ", FORMAT("W9", First_Payment_Age), "\n" + PRINT FILE F "Number Alive at Present: ", FORMAT( "W9", Num_Alive_Now), "\n", "\n", "\n", "\n" + PRINT FILE F "Pmt # Age #Alive Prob. Surv. Payment Exp. Value Disc. Fact. PVEP", "\n", "\n" + FOR I FROM 1 to Array_Size + PRINT FILE F FORMAT( "W6", I ) + PRINT FILE F FORMAT( "W6", Pmt_Age[I] ) + PRINT FILE F FORMAT( "W9", Num_Alive[I] ) + PRINT FILE F FORMAT( "W10.6", Prob_Surv[I] ) + PRINT FILE F FORMAT( "W12.2", Payment[I] ) + PRINT FILE F FORMAT( "W12.2", EV_Payment[I] ) + PRINT FILE F FORMAT( "W14.6", Disc_Factor[I] ) + PRINT FILE F FORMAT( "W14.2", EPV_Payment[I] ), "\n" + ENDFOR + PRINT FILE F "\n" + PRINT FILE F "Totals: ", FORMAT( "W10", TEP), FORMAT( "W28", PV_TEP), "\n", "\n" + PRINT FILE F "Total Expected Payout: ", FORMAT( "W10", TEP), "\n", "\n" + PRINT FILE F "Total Present Value of Expected Payments @ Commencement: ", FORMAT( "W10", PV_TEP), "\n", "\n" + PRINT FILE F "Total Present Value of Expected Payments Now: ", FORMAT( "W10", PV_TEP_Now), "\n", "\n" + endif; Print_To_File = "Y" + + MOVETO "Pensions" + FORMKEY; return to form view + R["Life_Exp"] = 0.0 + R["Payments"] = 0.0 + R["Mortality"] = 0.0 + R["PV_AM"] = 0.0 + + R["Pay_Out"] = TEP + R["Fund_Value"] = PV_TEP + R["PV"] = PV_TEP_NOW + R["PV_AMT"] = Round(R["PV"] * (1-[Tax_Rate]*0.01), 0) + +; skip death benefit calculation for now, set DB values to zero +; Death_Benefit( R["Age"], R["Start_Age"], Monthly ) + + R["PV_Pre_DB"] = 0.0 + R["PV_Annuity"] = R["PV_AMT"] + R["PV_Pre_DB"] + if (R["PV_Annuity"] >= R["WV_AT"]) then + R["PV_Plan"] = R["PV_Annuity"] + else R["PV_Plan"] = R["WV_AT"] + endif + +; (******************* balance of original compute procedure ***************) + + Marriage_Factor() + POSTRECORD NOPOST + FORMKEY + MOVETO "Results" + COPYFROMARRAY R + PICKFORM 1 + MESSAGE "" + PROMPT " Press ESC when finished viewing." + BEEP + WAIT FIELD + UNTIL "ESC" + PROMPT "" + if Response_Is_Yes("SAVE RESULTS", "Save Results of PV Calculation?") then + Save_Results() + else DEL + endif + MOVETO "Pensions" + FORMKEY; redisplay pension form + PROMPT Prompt_String +ENDPROC; +WRITELIB Off_Lib Actuarial_Compute + + +PROC Pension_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Key_Code, Menu_Pick + if (EventInfo["TYPE"] = "KEY") then + Key_Code = EventInfo["KEYCODE"] + SWITCH + ; ALT A - Compute Using Actuarial Method + CASE (Key_Code = -30) : if ISFIELDVIEW() then + DO_IT! + endif + MOVETO "Pensions" + Actuarial_Compute() ; pv of a pension + Main_Table_Menu() + RETURN 1 + + ; ALT L - Compute using Life Exepctancy Method + CASE (Key_Code = -38) : if ISFIELDVIEW() then + DO_IT! + endif + MOVETO "Pensions" + Life_Exp_Compute() ; pv of a pension + Main_Table_Menu() + RETURN 1 + ; F9 - COEDIT + CASE (Key_Code = -67) : RETURN Main_Table_Edit() + ; F2 - DO_IT! + CASE (Key_Code = -60) : if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + ; F8 - CLEAR + CASE (Key_Code = -66) : RETURN Main_Table_Clear() + ; DELETE + CASE (Key_Code = -83) : if (SYSMODE() = "CoEdit") then + RETURN Display_Delete_Box() + else RETURN 1 + endif + ; + or - to change date by day + CASE (Key_Code = 43) OR + (Key_Code = 45) : RETURN Change_Date(Key_Code) + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + if (EventInfo["MESSAGE"] = "MENUSELECT") then + Menu_Pick = EventInfo["MENUTAG"] + SWITCH + CASE (Menu_Pick = "Edit\Mode") : RETURN Main_Table_Edit() + CASE (Menu_Pick = "Main\Mode") : if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + CASE (Menu_Pick = "Ask") : Ask_For_Output() + RETURN 1 + CASE (Menu_Pick = "Close\Yes") : RETURN Main_Table_Clear() + CASE (Menu_Pick = "Close\No") : RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + SOUND 400 100 RETURN 1 ; safety valve +ENDPROC +WRITELIB Off_Lib Pension_Wait_Proc + + +PROC Pension_Table_Wait() +; Life Expectancy Method uses LifeTabl + Life_Table = "LifeTabl" +; Actuarial Method uses NumberAl Mortailty Table + Mort_Table = "NumberAl" + R_Table = "Results" + Prompt_String = " Alt-L for Life Expectancy Method; Alt-A for Actuarial Method" + Main_Table_View("Pensions", 1, 0); place pension table on workspace in form view + ECHO OFF + END; move to last record in pension table + FORMKEY; move from form view to table view + VIEW Life_Table + VIEW Mort_Table + VIEW "Output" + VIEW R_Table + COEDITKEY + COPYTOARRAY R + DO_IT! + MOVETO "Pensions" + FORMKEY + Main_Table_Edit() + PROMPT Prompt_String + ECHO NORMAL + WAIT WORKSPACE + PROC "Pension_Wait_Proc" + MESSAGE "MENUSELECT" +; TRIGGER "ARRIVEFIELD" + KEY -60, -66, -67, -83, -38, -30, 43, 45 + ; DO_IT Clear Edit Delete Alt-L Alt-A + - + ; F2 F8 F9 DEL LECompute ActCompute + ENDWAIT + ECHO OFF + EMPTY "Output"; empty output table every time script is exited + CLEARALL + PROMPT "" + MESSAGE "" +ENDPROC; +WRITELIB Off_Lib Pension_Table_Wait + + +RELEASE PROCS ALL \ No newline at end of file diff --git a/old-database/PENSION.SC2 b/old-database/PENSION.SC2 new file mode 100755 index 0000000000000000000000000000000000000000..1a18887e77c5539f4e391dbe012dd570333f8fad GIT binary patch literal 23040 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 Oedv{?M(U6L>wf}ZXJtFile_No] + [Qdros->Version] + DO_IT! + FORMKEY + Select_Forms() + DELETE Subset_Table + MOVETO Main_Table + FORMKEY +ENDPROC; +WRITELIB Off_Lib QDRO_Output + + +PROC QDRO_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Key_Code, Menu_Pick + if (EventInfo["TYPE"] = "KEY") then + Key_Code = EventInfo["KEYCODE"] + SWITCH + ; F9 - COEDIT + CASE (Key_Code = -67) : RETURN Main_Table_Edit() + ; F2 - DO_IT! + CASE (Key_Code = -60) : if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + ; F8 - CLEAR + CASE (Key_Code = -66) : RETURN Main_Table_Clear() + ; DELETE + CASE (Key_Code = -83) : if (SYSMODE() = "CoEdit") then + RETURN Display_Delete_Box() + else RETURN 1 + endif + ; + or - to change date by day + CASE (Key_Code = 43) OR + (Key_Code = 45) : RETURN Change_Date(Key_Code) + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + if (EventInfo["MESSAGE"] = "MENUSELECT") then + Menu_Pick = EventInfo["MENUTAG"] + SWITCH + CASE (Menu_Pick = "Edit\Mode") : RETURN Main_Table_Edit() + CASE (Menu_Pick = "Main\Mode") : if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + CASE (Menu_Pick = "Ask") : QDRO_Output() + RETURN 1 + CASE (Menu_Pick = "Close\Yes") : RETURN Main_Table_Clear() + CASE (Menu_Pick = "Close\No") : RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + SOUND 400 100 RETURN 1 ; safety valve +ENDPROC +WRITELIB Off_Lib QDRO_Wait_Proc + +PROC QDRO_Table_Wait() + Main_Table = "Qdros" + ECHO OFF + Main_Table_View(Main_Table, 1, 0); place table on workspace in form view + END; move to last record in table + Main_Table_Edit() + ECHO NORMAL + WAIT WORKSPACE + PROC "QDRO_Wait_Proc" + MESSAGE "MENUSELECT" +; TRIGGER "ARRIVEFIELD" + KEY -60, -66, -67, -83, 43, 45 + ; DO_IT Clear Edit Delete + - + ; F2 F8 F9 DEL + ENDWAIT + ECHO OFF + CLEARALL + PROMPT "" + MESSAGE "" +ENDPROC; +WRITELIB Off_Lib QDRO_Table_Wait + +RELEASE PROCS ALL diff --git a/old-database/QDRO.SC2 b/old-database/QDRO.SC2 new file mode 100755 index 0000000000000000000000000000000000000000..aea57e64b7a87e1a6c44cedf3f1ebcb3566be63e GIT binary patch literal 6144 zcmeHLZ){uD760A)UR<|sT3XtI>LziM#?NtDH)&T&sxHj2pMy*MC$^I`RpBXJ5-_Xk z;3NeE9nA;C3PM_?RZ~CkVSAri+&f$>_(DEV(~{68 zpi^9@r%F^kQ1w97162=HJy7*P)dN)zR6S7jz&G~5kQ#CSs>k-L^ZZS1_yb-ass zLX$Ws=1$z!{-oTyf0U(EI!uw1-V3wvzA{rI>Mw2GskMq}w2JwlFi@*|3{0XtT0Kcu&u~1KaS7jg19QLYG)v2 zJ+8_)gj_G`h4%43P-2Ag55NTLL#x~5! zwF|4yAt(a-ZB7jHL9Jo0rxSBJd%~EjS=(Ed=&~gaIz9H7tj&1@^YsUe4b(S*ITuGA z$JElG)>=LLl+wSWRzKwVC1%C$74|2MEwpE5*!^>HyG8MNqn=h8RN@!YyJ@9+)@|%3 z`KDu|Uj*GojPyUt7QXM;@j=-_yFbnTFYw~ZDSp9b^pUYr*i*4-i}bC+>81gGv24In zYt1U|AP=KR!0p6oZZOR-y~`Z5Uy)RlRHR@I=O@r6{0T;JxSOnmnPjx7;Bwlza5wx) zDp437A!{gq%xQ(ke?kRE3*#e$BaCvpwW?6LZlPFoPcE;zZ~?I8I9*EL7<{5(qo1*6@8YOj5_kscsAV=9<-vI zY|ga0QU?*aGo0);E#8KhP=2t|@yK2For;y}%cc8r$YtW)-Dbx2Wn_@blYNOUV$)bH z5TL#L#3h-LbMhI2L_aRczsNHT@^g^bCBGtdfY8yUy@q!n^+k>Xl@D!DnI{T{un+5m zz&{8W^>~->_tyh$=)#oHmd4a0ru~K~V_D03u}dzqMf+B5Gw3-d=CqLQ%L~t1$w4zq1*?dW<=a^_r{2hZr*{(+X&4$AtLbw(+ zs=3j+a(_LV*+(F*uxyf+E!+7W1kok@Q@3!$zo+mxp1>*0@g(pmuE)Q7D8h6Po&ipZ zAlijCbA|a>PI)gdpRZ^UEePxgv<3)d3K9c^I0b|)F5_lnV`F1uK&$)RDh{6c(yL83 z8_iq(JKfCe{{nNkox#g_x+3!1n7o;ctbw8Ygq1E9etcujW|jrK5T(*`tW`!?f7~3X zr0obDZUM3!cN_jFhq&nN+>}4XXJSFTCfkKzh8A`XWVU`g(5 zc{^~38~IMwgXqLM-K{B2EV|0-d#Je)SM+c9rZ}P;=$!vL)%qX9eYhV-@hkimpWLwi z>JD}qYQ-)yxip_V%yv-Jy{=uBMk`4k "Answer") then + ; erase query image(s) + WHILE (IMAGETYPE() = "Query") + CLEARIMAGE + ENDWHILE + MESSAGE "Invalid selection criteria. Query unsuccessful." + FORMKEY + RETURN + endif + Subset_Table = PRIVDIR() + "SUBSET" + RENAME TABLE() Subset_Table + MOVETO "Rolodex(Q)" CLEARIMAGE ; erase rolodex query image + if NOT ISBLANK(Phone_No) then + MOVETO "Phone(Q)" CLEARIMAGE + endif + MOVETO Subset_Table + if ISEMPTY(Subset_Table) then + CLEARIMAGE + No_Matches_Found() + else ; copy form and display on screen + COPYFORM Main_Table Form_Num Subset_Table "1" + COPYREPORT Main_Table "1" Subset_Table "1" + View_Answer_Table(Subset_Table, 2, 2) + FORMTABLES Subset_Table "1" Form_List + FOR I FROM 1 to ARRAYSIZE(Form_List) + MOVETO Form_List[I] + IMAGERIGHTS READONLY ; make all detail records uneditable + ENDFOR + MOVETO Subset_Table + Rolodex_Answer_Wait() + if ISTABLE(Subset_Table) then ; delete subset table + ECHO OFF + DELETE(Subset_Table) + endif + endif + endif + FORMKEY ; return to form view + ENDPROC; Ask_Rolodex + + PROC Rolodex_Answer_Menu() + SHOWPULLDOWN + "Modify" : "Toggle between edit and main mode" : "Modify" + SUBMENU + "Edit Mode - F9" : "Allow data to be edited, deleted, etc." : "Edit\Mode", + "Main Mode - F2" : "Discontinue editing" : "Main\Mode" + ENDSUBMENU, + "Reports" : "Choose report to generate" : "Reports" + SUBMENU + "Envelope" : "Create an envelope" : "R_Envelope", + "Phone Book" : "Generate list of phone numbers & addresses" : "" + SUBMENU + "Address & Phone #" : "List address & phone numbers" : "R_Phone_Address", + "Phone # Only" : "List only names & phone numbers" : "R_Phone" + ENDSUBMENU, + "Rolodex Info" : "All info in rolodex" : "R_Rolodex" + ENDSUBMENU, + "Assemble" : "Combine data and forms into documents" : "Assemble", + "Quit" : "Return to previous menu" : "" + SUBMENU + "No " : "Continue working with selected data" : "Return\No", + "Yes - F8" : "Return to complete data set" : "Return\Yes" + ENDSUBMENU + ENDMENU + if (SYSMODE() = "Main") then + MENUDISABLE "Main\Mode" + else MENUDISABLE "Edit\Mode" + MENUDISABLE "Reports" + MENUDISABLE "Assemble" + endif + Rolodex_Speedbar() + ENDPROC; Rolodex_Answer_Menu + + PROC Rolodex_Answer_Wait() + Rolodex_Answer_Menu() + Sound_Off() + ECHO NORMAL + Message_Box("Search Completed", "Matching Rolodex Entries: " + STRVAL(NRECORDS(Subset_Table))) + WAIT WORKSPACE + PROC "Rolodex_Answer_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD" + KEY -60, -66, -67, -83, -50 + ; DO_IT Clear Edit Delete Alt-M + ; F2 F8 F9 DEL Memo + ENDWAIT + CLEARSPEEDBAR + MESSAGE "" + ENDPROC; Rolodex_Answer_Wait + + PROC Rolodex_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Key_Code, Menu_Pick + if (TriggerType = "ARRIVEFIELD") then + PROMPT Fld_Prompt[FIELD()] + RETURN 1 + endif + if (EventInfo["TYPE"] = "KEY") then + Key_Code = EventInfo["KEYCODE"] + SWITCH + ; F9 - COEDIT + CASE (Key_Code = -67) : RETURN Main_Table_Edit() + ; F2 - DO_IT! + CASE (Key_Code = -60) : if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + ; F8 - CLEAR + CASE (Key_Code = -66) : RETURN Main_Table_Clear() + ; Alt-M - Memo + CASE (Key_Code = -50) : Display_Memo(Main_Table) + Main_Table_Menu() + Rolodex_Speedbar() + RETURN 1 + ; DELETE + CASE (Key_Code = -83) : if (SYSMODE() = "CoEdit") then + RETURN Display_Delete_Box() + else RETURN 1 + endif + ; ALT-F - Switch form + CASE (Key_Code = -33) : if (SYSMODE() = "Main") then + ECHO OFF + MOVETO M_Tbl + if (FORM() = "1") then + PICKFORM 4 + else if (FORM() = "4") then + PICKFORM 1 + endif + endif + ECHO NORMAL + endif + RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + if (EventInfo["MESSAGE"] = "MENUSELECT") then + Menu_Pick = EventInfo["MENUTAG"] + SWITCH + CASE (Menu_Pick = "Edit\Mode") : RETURN Main_Table_Edit() + CASE (Menu_Pick = "Main\Mode") : if ISEMPTY(Main_Table) then + RETURN Main_Table_Clear() + else RETURN Main_Table_End_Edit() + endif + CASE (Menu_Pick = "Ask") : Ask_Rolodex() + Main_Table_Menu() + Rolodex_Speedbar() + RETURN 1 + CASE (Menu_Pick = "Close\Yes") : RETURN Main_Table_Clear() + CASE (Menu_Pick = "Close\No") : RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + SOUND 400 100 RETURN 1 ; safety valve + ENDPROC; Rolodex_Wait_Proc + + PROC Rolodex_Speedbar() + CLEARSPEEDBAR + SPEEDBAR "~F10~ Menu":-68, "~Alt-M~ Memo":-50 + if ISASSIGNED(Fld_Prompt[FIELD()]) then + PROMPT Fld_Prompt[FIELD()] + else PROMPT "" + endif + ENDPROC; Rolodex_Speedbar + + ; MAIN PROCEDURE BEGINS HERE + Answer_Menu = "Rolodex_Answer_Menu" + DYNARRAY Fld_Prompt[] + Fld_Prompt["Id"] = "Unique key to identify & sort rolodex (required)" + Fld_Prompt["Last"] = "Last name or company name" + Fld_Prompt["Prefix"] = "Appropriate title, e.g. Mr., Ms., Dr., etc." + Fld_Prompt["First"] = "First name of individual(s)" + Fld_Prompt["Middle"] = "Middle name or initial" + Fld_Prompt["Suffix"] = "Appropriate title, e.g. Jr., Sr., M.D., etc." + Fld_Prompt["Group"] = "Press F1 to select group for this entry" + Fld_Prompt["Title"] = "Official title or postion, e.g. President" + Fld_Prompt["A1"] = "First line of address, or firm name" + Fld_Prompt["A2"] = "Second line of address" + Fld_Prompt["A3"] = "Third line of address" + Fld_Prompt["City"] = "City of mailing address" + Fld_Prompt["Abrev"] = "Press F1 to select two letter state abbreviation." + Fld_Prompt["Zip"] = "Zip code, 5 or 9 digits" + Fld_Prompt["Email"] = "Email address" + Fld_Prompt["DOB"] = "Date of Birth: ##/##/##" + Fld_Prompt["SS#"] = "Social Security No.: ###-##-###" + Fld_Prompt["Legal_Status"] = "Petitioner/Respondent, etc." + Fld_Prompt["Memo"] = "Add or edit notes for this rolodex entry" + Fld_Prompt["Location"] = "Location for phone no., e.g. Office, Home, etc." + Fld_Prompt["Phone"] = "Phone # formats: ###-####, 1-###-###-####" + Fld_Prompt["Identifier"] = "Name of variable" + Fld_Prompt["Response"] = "Text to replace variable" + Main_Table_View(M_Tbl, 2, 2) + Rolodex_Speedbar() + ECHO NORMAL + WAIT WORKSPACE + PROC "Rolodex_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD" + KEY -60, -66, -67, -83, -50, -33 + ; DO_IT Clear Edit Delete Alt-M Alt-F + ; F2 F8 F9 DEL Memo Switch form + ENDWAIT + CLEARSPEEDBAR + PROMPT "" + MESSAGE "" +ENDPROC +WRITELIB Off_Lib Rolodex_Wait + +RELEASE PROCS ALL \ No newline at end of file diff --git a/old-database/ROLODEX.SC2 b/old-database/ROLODEX.SC2 new file mode 100755 index 0000000000000000000000000000000000000000..f77b9491b38d6210cbf3e03b03e1d0330e835e3f GIT binary patch literal 13824 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 literal 0 HcmV?d00001 diff --git a/old-database/SETUP.SC b/old-database/SETUP.SC new file mode 100755 index 0000000..5cbcf4c --- /dev/null +++ b/old-database/SETUP.SC @@ -0,0 +1,212 @@ +MESSAGE "Writing setup table procedures to library..." + +PROC CLOSED Setup_Table_Wait(Tbl, R, C, F_Num) + USEVARS Autolib, Main_Table, Rpt_St + PRIVATE Fld_Prompt + DYNARRAY Fld_Prompt[] + + PROC Setup_Speedbar() + SPEEDBAR "~F10~ Menu":-68 + if ISASSIGNED(Fld_Prompt[FIELD()]) then + PROMPT Fld_Prompt[FIELD()] + else PROMPT + endif + ENDPROC; + + PROC Setup_Table_Menu() + SHOWPULLDOWN + "Modify" : "Toggle between edit and main mode" : "Modify" + SUBMENU + "Edit Mode - F9" : "Allow data to be edited, deleted, etc." : "Edit\Mode", + "Main Mode - F2" : "Discontinue editing" : "Main\Mode" + ENDSUBMENU, + "Reports" : "Choose report to generate" : "Reports" + SUBMENU + "Print All" : "Report on all records in this table" : "R_Standard", + "Cancel" : "Do not print any report" : "R_Cancel" + ENDSUBMENU, + "Return" : "Return to previous menu" : "" + SUBMENU + "No " : "Continue working with this data" : "Return\No", + "Yes - F8" : "Return to main menu" : "Return\Yes" + ENDSUBMENU + ENDMENU + if ISEMPTY(Tbl) then + Edit_Mode() + else MENUDISABLE "Main\Mode" + endif + ENDPROC + + PROC Setup_Table_Wait_Proc(TriggerType, EventInfo, CycleNumber) + PRIVATE Key_Code, Menu_Pick + if (TriggerType = "ARRIVEFIELD") then + Setup_Speedbar() + RETURN 1 + endif + if (EventInfo["TYPE"] = "MESSAGE") then + Menu_Pick = EventInfo["MENUTAG"] + SWITCH + CASE (Menu_Pick = "Edit\Mode") : RETURN Edit_Mode() + CASE (Menu_Pick = "Main\Mode") : if ISEMPTY(Tbl) then + RETURN Clear_Table() + else RETURN Main_Mode() + endif + CASE (Menu_Pick = "R_Standard") : ECHO OFF + Print_Report(Main_Table, "1", "") + Setup_Table_Menu() + Setup_Speedbar() + RETURN 1 + CASE (Menu_Pick = "R_Cancel") : RETURN 1 + CASE (Menu_Pick = "Return\Yes") : RETURN Clear_Table() + CASE (Menu_Pick = "Return\No") : RETURN 1 + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + if (EventInfo["TYPE"] = "KEY") then + Key_Code = EventInfo["KEYCODE"] + SWITCH + ; F3 or F4 UPIMAGE, DOWNIMAGE + CASE (Key_Code = -61) OR + (Key_Code = -62) : if (NIMAGES() > 1) then + RETURN 0 + else RETURN 1 + endif + ; F9 - COEDIT + CASE (Key_Code = -67) : RETURN Edit_Mode() + ; F2 - DO_IT! + CASE (Key_Code = -60) : if (SYSMODE() = "CoEdit") and (Tbl = "Deposits") then + ECHO OFF + MOVETO "Payments" + MOVETO FIELD "Amount" + Balance = IMAGECSUM() + MOVETO "Deposits" + [Total] = Balance + ECHO NORMAL + endif + if ISEMPTY(Tbl) then + RETURN Clear_Table() + else RETURN Main_Mode() + endif + ; + to add one day to current date + CASE (Key_Code = 43) : RETURN Change_Date(43) + ; - to subtract one day from current date + CASE (Key_Code = 45) : RETURN Change_Date(45) + ; DELETE + CASE (Key_Code = -83) : if (SYSMODE() = "CoEdit") then + RETURN Display_Delete_Box() + else RETURN 1 + endif + ; F8 - CLEAR + CASE (Key_Code = -66) : RETURN Clear_Table() + OTHERWISE : SOUND 400 100 RETURN 1 + ENDSWITCH + endif + SOUND 400 100 RETURN 1 + ENDPROC; + + ; main body of procedure follows + SWITCH + CASE (Tbl = "PlanInfo") : + Fld_Prompt["Plan_Name"] = "Full name of plan:" + Fld_Prompt["Plan_Id"] = "Unique plan ID code:" + Fld_Prompt["Plan_Type"] = "Type of plan (DB,DC):" + Fld_Prompt["Divisible"] = "Means by which this Plan may be divided, if any?" + Fld_Prompt["Drafted"] = "Has a QDRO been drafted for this Plan?" + Fld_Prompt["Memo"] = "Description of plan particulars:" + CASE (Tbl = "Inx_Lkup") : + Fld_Prompt["Keyword"] = "Unique keyword to index form" + CASE (Tbl = "RVarLkup") OR (Tbl = "FVarLkup"): + Fld_Prompt["Identifier"] = "Name of variable as placed in forms" + Fld_Prompt["Query"] = "Query used to solicit response" + CASE (Tbl = "Deposits") : + Fld_Prompt["Deposit_Date"] = "Enter date of deposit" + Fld_Prompt["Total"] = "Enter total amount of deposit" + Fld_Prompt["File_No"] = "File number related to this payment" + Fld_Prompt["Id"] = "Id of file owner from rolodex" + Fld_Prompt["Regarding"] = "Description of pertinent matter" + Fld_Prompt["Amount"] = "Amount of payment to this account" + Fld_Prompt["Note"] = "Additional notation for this payment" + CASE (Tbl = "FileType") : + Fld_Prompt["File_Type"] = "Unique area of law" + CASE (Tbl = "Employee") : + Fld_Prompt["Empl_Num"] = "Unique employee number" + Fld_Prompt["Empl_Id"] = "Employee ID from Rolodex" + Fld_Prompt["Rate_Per_Hour"] = "Default billing rate" + CASE (Tbl = "TrnsType") : + Fld_Prompt["T_Type"] = "Unique code to group transactions" + Fld_Prompt["T_Type_L"] = "Letter describing transaction group" + Fld_Prompt["Header"] = "Header in statement for this group" + Fld_Prompt["Footer"] = "Footer in statement for this group" + CASE (Tbl = "Footers") : + Fld_Prompt["F_Code"] = "Unique code for this footer" + Fld_Prompt["F_Footer"] = "Text of footer at end of statement" + CASE (Tbl = "GrupLkup") : + Fld_Prompt["Code"] = "Unique code for this rolodex group" + Fld_Prompt["Description"] = "Description of this rolodex group" + Fld_Prompt["Title"] = "Default title to fill in in rolodex" + CASE (Tbl = "TrnsLkup") : + Fld_Prompt["T_Code"] = "Unique code for this transaction" + Fld_Prompt["T_Type"] = "Accounting group for this transaction" + Fld_Prompt["T_Type_L"] = "Letter describing transaction's group" + Fld_Prompt["Description"] = "Description of transaction in statement" + Fld_Prompt["Amount"] = "Default amount for this transaction type" + CASE (Tbl = "FileStat") : + Fld_Prompt["Status"] = "Unique status to assign files" + Fld_Prompt["Definition"] = "Definition for files of this status" + Fld_Prompt["Send"] = "Should these statements be printed normally?" + Fld_Prompt["Footer_Code"] = "Default statement footer for these files" + CASE (Tbl = "States") : + Fld_Prompt["Abrev"] = "Two letter state abbreviation" + Fld_Prompt["St"] = "Full name of state" + CASE (Tbl = "Printers") : + Fld_Prompt["Number"] = "Unique number for this printer setup" + Fld_Prompt["Name"] = "Name of this printer or setup" + Fld_Prompt["Page_Break"] = "Page break method" + Fld_Prompt["Port"] = "Direct output to this port" + Fld_Prompt["Phone_Book"] = "Setup string for phone book report" + Fld_Prompt["Rolodex_Info"] = "Setup string for rolodex report" + Fld_Prompt["Envelope"] = "Setup string for envelope report" + Fld_Prompt["File_Cabinet"] = "Setup string for file cabinet report" + Fld_Prompt["Accounts"] = "Setup string for account summary reports" + Fld_Prompt["Statements"] = "Setup string for all statements" + Fld_Prompt["Calendar"] = "Setup string for calendar report" + Fld_Prompt["Setup_St"] = "Generic setup string for all reports" + Fld_Prompt["Reset_St"] = "Printer Reset string" + Fld_Prompt["B_Underline"] = "Begin underlining" + Fld_Prompt["E_Underline"] = "Terminate underlining" + Fld_Prompt["B_Bold"] = "Begin bold" + Fld_Prompt["E_Bold"] = "Terminate bold" + ENDSWITCH + ECHO OFF + VIEW Tbl + if (Tbl = "Deposits") then + END + endif + Setup_Table_Menu() + WINDOW MOVE GETWINDOW() TO -100, -100 + PICKFORM F_Num + WINDOW HANDLE CURRENT TO Form_Win + DYNARRAY Win_Atts[] + Win_Atts["ORIGINROW"] = R + Win_Atts["ORIGINCOL"] = C + Win_Atts["CANMOVE"] = False + Win_Atts["CANRESIZE"] = False + Win_Atts["CANCLOSE"] = False + WINDOW SETATTRIBUTES Form_Win FROM Win_Atts + ECHO NORMAL + Setup_Speedbar() + WAIT WORKSPACE + PROC "Setup_Table_Wait_Proc" + MESSAGE "MENUSELECT" + TRIGGER "ARRIVEFIELD" + KEY -60, -66, -83, -67, -61, -62, 43, 45 + ; DO_IT Clear Delete Edit UpIm DwnIm + - + ; F2 F8 DEL F9 F3 F4 Next Prev day + ENDWAIT + CLEARSPEEDBAR + MESSAGE "" + PROMPT "" +ENDPROC +WRITELIB Off_Lib Setup_Table_Wait + +RELEASE PROCS ALL \ No newline at end of file diff --git a/old-database/SETUP.SC2 b/old-database/SETUP.SC2 new file mode 100755 index 0000000000000000000000000000000000000000..7678389070af9201d5eef0a809b170e087192d0d GIT binary patch literal 10752 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 V@kc~cI7Pz2i}F!qbpKa_^4|}z3Ge^_ literal 0 HcmV?d00001 diff --git a/old-database/UTILITY.SC b/old-database/UTILITY.SC new file mode 100755 index 0000000..d38a17c --- /dev/null +++ b/old-database/UTILITY.SC @@ -0,0 +1,621 @@ +MESSAGE "Writing utility procedures to library..." + +PROC Edit_Mode() + if (SYSMODE() = "Main") then + COEDITKEY + MENUDISABLE "Edit\Mode" + MENUDISABLE "Reports" + MENUENABLE "Main\Mode" + endif + RETURN 1 +ENDPROC +WRITELIB Off_Lib Edit_Mode + +PROC Main_Mode() + if (HELPMODE() = "LookupHelp") then ; if user in lookup help and pressed + RETURN 0 ; F2 to select, do not exit wait loop + endif + if NOT ISVALID() then ; if in coedit and field data is not valid, + MESSAGE "Error: The data for this field is not valid." + RETURN 1 ; do not exit wait + endif + if ISFIELDVIEW() then + DO_IT! + RETURN 1 + endif + DO_IT! + if (SYSMODE() = "Main") then ; record posted successfully + MENUDISABLE "Main\Mode" + MENUENABLE "Edit\Mode" + MENUENABLE "Reports" + else ECHO NORMAL ; key violation exists + DO_IT! + endif + RETURN 1 +ENDPROC +WRITELIB Off_Lib Main_Mode + +PROC Clear_Table() + if (SYSMODE() = "CoEdit") then + Main_Mode() + endif + if (SYSMODE() = "Main") then + ECHO OFF + CLEARIMAGE + ECHO NORMAL + RETURN 2 ; back in main mode so exit wait + else RETURN 1 ; cannot get to main mode - wait continues + endif +ENDPROC +WRITELIB Off_Lib Clear_Table + +PROC Sound_Off() + PRIVATE HTZ, I + HTZ = 200 + FOR I FROM 1 TO 4 + SOUND HTZ 100 + HTZ = HTZ + 100 + ENDFOR +ENDPROC +WRITELIB Off_Lib Sound_Off + +PROC Get_Custom_Setup_Variables() + PRIVATE I + if ISTABLE("Setup") then + VIEW "Setup" + TAB + Appl_Title = [] + FOR I FROM 1 TO ARRAYSIZE(Ltr_Hd) + TAB + Ltr_Hd[I] = [] + ENDFOR + TAB + I = [] ; default printer + CLEARIMAGE; clear setup table + RETURN I + else Appl_Title = "DELPHI CONSULTING GROUP, INC." + FOR I FROM 1 TO ARRAYSIZE(Ltr_Hd) + TAB + Ltr_Hd[I] = "" + ENDFOR + RETURN "" + endif +ENDPROC +WRITELIB Off_Lib Get_Custom_Setup_Variables + +PROC Customize_Setup() + PRIVATE Button_Val, A_Title, LH, I + + PROC Update_Setup() + Appl_Title = A_Title + FOR I FROM 1 TO ARRAYSIZE(Ltr_Hd) + Ltr_Hd[I] = LH[I] + ENDFOR + ENDPROC + + PROC Save_Setup() + if ISTABLE("Setup") then + ECHO OFF + COEDIT "Setup" + TAB + [] = Appl_Title + FOR I FROM 1 TO ARRAYSIZE(Ltr_Hd) + TAB + [] = Ltr_Hd[I] + ENDFOR + DO_IT! + CLEARIMAGE; clear setup table + ECHO NORMAL + Message_Box("Saving Setup Variables", "Setup variables have been saved.") + else RETURN ; create table if it doesn't exist + endif + ENDPROC; Save_Setup + + I = ARRAYSIZE(Ltr_Hd) + ARRAY LH[I] + A_Title = Appl_Title ; assign global values to temp variables + FOR I FROM 1 TO ARRAYSIZE(Ltr_Hd) + LH[I] = Ltr_Hd[I] + ENDFOR + MOUSE SHOW + SHOWDIALOG "System Setup Variables" + @2,5 HEIGHT 19 WIDTH 70 + @1,2 ?? "Title of Organization" + ACCEPT @2,2 WIDTH 53 "A50" + TAG "A_Title" + TO A_Title + @3,2 ?? "Statement Letterhead (10 Lines, each centered automatically)" + ACCEPT @4,2 WIDTH 64 "A80" + TAG "L1" + TO LH[1] + ACCEPT @5,2 WIDTH 64 "A80" + TAG "L2" + TO LH[2] + ACCEPT @6,2 WIDTH 64 "A80" + TAG "L3" + TO LH[3] + ACCEPT @7,2 WIDTH 64 "A80" + TAG "L4" + TO LH[4] + ACCEPT @8,2 WIDTH 64 "A80" + TAG "L5" + TO LH[5] + ACCEPT @9,2 WIDTH 64 "A80" + TAG "L6" + TO LH[6] + ACCEPT @10,2 WIDTH 64 "A80" + TAG "L7" + TO LH[7] + ACCEPT @11,2 WIDTH 64 "A80" + TAG "L8" + TO LH[8] + ACCEPT @12,2 WIDTH 64 "A80" + TAG "L9" + TO LH[9] + ACCEPT @13,2 WIDTH 64 "A80" + TAG "L10" + TO LH[10] + PUSHBUTTON @15,7 WIDTH 10 + "~O~K" + OK + DEFAULT + VALUE "OK" + TAG "OK_Button" + TO Button_Val + PUSHBUTTON @15,22 WIDTH 10 + "~S~ave" + OK + VALUE "SAVE" + TAG "Save_Button" + TO Button_Val + PUSHBUTTON @15,37 WIDTH 10 + "~R~eset" + OK + VALUE "RESET" + TAG "Reset_Button" + TO Button_Val + PUSHBUTTON @15,52 WIDTH 10 + "~C~ancel" + CANCEL + VALUE "CANCEL" + TAG "Cancel_Button" + TO Button_Val + ENDDIALOG + if RetVal then + SWITCH + CASE (Button_Val = "OK") : Update_Setup() + CASE (Button_Val = "SAVE") : Update_Setup() + Save_Setup() + CASE (Button_Val = "RESET") : ECHO OFF + Get_Custom_Setup_Variables() + ECHO NORMAL + Message_Box("Reset Setup Variables", "Setup variables reset to previously saved values.") + ENDSWITCH + endif + MOUSE HIDE +ENDPROC +WRITELIB Off_Lib Customize_Setup + +PROC Message_Box(Title, Message_String) + PRIVATE Button_Val + MESSAGE "" + SHOWDIALOG Title + @8,10 HEIGHT 7 WIDTH 60 + @1,0 ?? FORMAT("W58,AC", Message_String) + PUSHBUTTON @3,22 WIDTH 12 + "~O~K" + OK + VALUE "OK" + TAG "OK_Button" + TO Button_Val + ENDDIALOG +ENDPROC +WRITELIB Off_Lib Message_Box + +PROC Yes_No_Cancel(Title, Question) + PRIVATE Button_Val + SHOWDIALOG Title + @8,10 HEIGHT 7 WIDTH 60 + @1,0 ?? FORMAT("W58,AC", Question) + PUSHBUTTON @3,6 WIDTH 12 + "~Y~es" + OK + VALUE "Yes" + TAG "Y_B" + TO Button_Val + PUSHBUTTON @3,22 WIDTH 12 + "~N~o" + OK + VALUE "No" + TAG "N_B" + TO Button_Val + PUSHBUTTON @3,38 WIDTH 12 + "~C~ancel" + CANCEL + VALUE "Cancel" + TAG "C_B" + TO Button_Val + ENDDIALOG + if Retval then + RETURN Button_Val + else RETURN "Cancel" + endif +ENDPROC +WRITELIB Off_Lib Yes_No_Cancel + +PROC Response_Is_Yes(Title, Question) + PRIVATE Button_Val + SHOWDIALOG Title + @8,10 HEIGHT 7 WIDTH 60 + @1,0 ?? FORMAT("W58,AC", Question) + PUSHBUTTON @3,14 WIDTH 12 + "~Y~es" + OK + VALUE "OK" + TAG "OK_Button" + TO Button_Val + PUSHBUTTON @3,32 WIDTH 12 + "~N~o" + CANCEL + VALUE "Cancel" + TAG "Cancel_Button" + TO Button_Val + ENDDIALOG + if (RetVal = TRUE) then + RETURN TRUE + else RETURN FALSE + endif +ENDPROC +WRITELIB Off_Lib Response_Is_Yes + +PROC Display_Delete_Box() + if ISFIELDVIEW() then + RETURN 0 + endif + if Response_Is_Yes("Confirm Deletion", "Are you sure you want to delete this entry?") then + DEL + endif + RETURN 1 +ENDPROC +WRITELIB Off_Lib Display_Delete_Box + +PROC No_Matches_Found() + Sound_Off() + Message_Box("Negative Search Results", "No matches were found using chosen criteria.") +ENDPROC +WRITELIB Off_Lib No_Matches_Found + +PROC Printer_Ready() + WHILE (PRINTERSTATUS() <> True) + BEEP + if Response_Is_Yes("Printer Error", "Printer not ready - please check. Retry?") then + else RETURN FALSE + endif + ENDWHILE + RETURN TRUE +ENDPROC +WRITELIB Off_lib Printer_Ready + +PROC Valid_Filename() + PRIVATE Button_Val + if ISFILE("ANSWER.RPT") then + Base_Name = "" + else Base_Name = "ANSWER" + endif + WHILE TRUE + SHOWDIALOG "File Name for Report" + @8,20 HEIGHT 8 WIDTH 40 + ACCEPT @1,14 WIDTH 11 "A8" PICTURE "*&" + TAG "Disk_File" + TO Base_Name + @2,1 ?? FORMAT("W37,AC", "(Extension .RPT is assumed)") + PUSHBUTTON @4,7 WIDTH 10 + "~O~K" + OK + DEFAULT + VALUE "OK" + TAG "OK_Button" + TO Button_Val + PUSHBUTTON @4,22 WIDTH 10 + "~C~ancel" + CANCEL + VALUE "Cancel" + TAG "Cancel_Button" + TO Button_Val + ENDDIALOG + if RetVal And NOT ISBLANK(Base_Name) then + File_Name = Base_Name + ".RPT" + if ISFILE(File_Name) then + MOUSE SHOW + SHOWDIALOG "Replace Existing File" + @8,15 HEIGHT 7 WIDTH 50 + @1,2 ?? FORMAT("W44,AC",(File_Name + " already exists. Replace?")) + PUSHBUTTON @3,8 WIDTH 10 + "~Y~es" + OK + DEFAULT + VALUE "YES" + TAG "Yes_Button" + TO Button_Val + PUSHBUTTON @3,20 WIDTH 10 + "~N~o" + CANCEL + VALUE "NO" + TAG "No_Button" + TO Button_Val + PUSHBUTTON @3,32 WIDTH 10 + "~R~etry" + OK + VALUE "RETRY" + TAG "Retry_Button" + TO Button_Val + ENDDIALOG + MOUSE HIDE + if RetVal then + SWITCH + CASE (Button_Val = "YES") : RETURN TRUE + CASE (Button_Val = "NO") : RETURN FALSE + CASE (Button_Val = "RETRY") : LOOP + OTHERWISE : RETURN FALSE + ENDSWITCH + else RETURN FALSE; user pressed escape + endif + else RETURN TRUE + endif; if file already exists + else RETURN FALSE + endif + ENDWHILE +ENDPROC +WRITELIB Off_Lib Valid_Filename + +PROC Setup_Printer(Number) + PRIVATE R + SHOWPULLDOWN + ENDMENU + CLEARSPEEDBAR + ECHO OFF + GETRECORD "Printers" Number TO DYNARRAY R + CLEARIMAGE + if RetVal then + if NOT ISBLANK(R["Port"]) then + {Report} {SetPrinter} {Override} {PrinterPort} TYPEIN R["Port"] ENTER + endif + if NOT ISBLANK(R["Page_Break"]) then + {Report} {SetPrinter} {Override} {EndOfPage} TYPEIN SUBSTR(R["Page_Break"],1,1) + endif + {Report} {SetPrinter} {Override} {Setup} + if ISBLANK(R["Setup_St"]) then + CTRLBACKSPACE + else TYPEIN R["Setup_St"] + endif + ENTER + {Report} {SetPrinter} {Override} {Reset} + if ISBLANK(R["Reset_St"]) then + CTRLBACKSPACE + else TYPEIN R["Reset_St"] + endif + ENTER + if ISTABLE("Setup") then + COEDIT "Setup" + [Default_Printer] = Number + DO_IT! + CLEARIMAGE; clear setup table + endif + Default_Printer = Number + FOREACH Element in Rpt_St + if ISASSIGNED(R[Element]) AND NOT ISBLANK(R[Element]) then + Rpt_St[Element] = R[Element] + else Rpt_St[Element] = "" + endif + ENDFOREACH + ECHO NORMAL + RETURN TRUE + endif + ECHO NORMAL + RETURN FALSE +ENDPROC +WRITELIB Off_Lib Setup_Printer + +PROC Select_Printer() + PRIVATE Button_Val, P_Array, P_Number + if NOT ISTABLE("Printers") then + Message_Box("Selection Error", "No printer table was found.") + RETURN + endif + if ISEMPTY("Printers") then + Message_Box("Selection Error", "Printer table has no printer entries.") + RETURN + endif + ECHO OFF + VIEW "Printers" + DYNARRAY P_Array[] + SCAN + P_Array[([Number])] = STRVAL([Number]) + " " + [Name] + ENDSCAN + CLEARIMAGE + P_Number = Default_Printer + MOUSE SHOW + SHOWDIALOG "Select Default Printer" + @5,16 HEIGHT 13 WIDTH 45 + PICKDYNARRAY @1,5 HEIGHT 7 WIDTH 34 + P_Array + TAG "P_Array" + TO P_Number + PUSHBUTTON @9,8 WIDTH 10 + "~O~K" + OK + DEFAULT + VALUE "YES" + TAG "Yes_Button" + TO Button_Val + PUSHBUTTON @9,26 WIDTH 10 + "~C~ancel" + CANCEL + VALUE "NO" + TAG "No_Button" + TO Button_Val + ENDDIALOG + MOUSE HIDE + if RetVal then + Setup_Printer(NUMVAL(P_Number)) + endif + ECHO NORMAL +ENDPROC +WRITELIB Off_Lib Select_Printer + +PROC Print_Report(T_Tbl, Rpt_Num, R_St) + ; allow user to select from list of available quick reports & destination + PRIVATE Destination, Base_Name, File_Name, B_Underline, E_Underline, B_Bold, E_Bold + + PROC Esc_Sequence(Orig_St) + PRIVATE Temp_St, A + Temp_St = "" + WHILE MATCH(Orig_St, "..\\027..", A, Orig_St) + Temp_St = Temp_St + A + CHR(27) + ENDWHILE + Temp_St = Temp_St + Orig_St + RETURN Temp_St + ENDPROC; Esc_Sequence + + B_Bold = Esc_Sequence(Rpt_St["B_BOLD"]) + E_Bold = Esc_Sequence(Rpt_St["E_Bold"]) + B_Underline = Esc_Sequence(Rpt_St["B_Underline"]) + E_Underline = Esc_Sequence(Rpt_St["E_Underline"]) + SHOWPULLDOWN + ENDMENU + CLEARSPEEDBAR + MESSAGE "" + SHOWPOPUP "Report Destination" CENTERED + "Printer" : "Send report to printer" : "Printer", + "Screen" : "Preview report on screen" : "Screen", + "Disk File" : "Save file on disk in ASCII format" : "Disk", + SEPARATOR, + "Cancel" : "Abort printing and return to previous work" : "Cancel" + ENDMENU + TO Destination + SWITCH + CASE (Destination = "Printer") : + if Printer_Ready() then + MESSAGE "Sending report to printer..." + OPEN PRINTER + if ISASSIGNED(R_St) AND NOT ISBLANK(R_St) then + PRINT Esc_Sequence(R_St); individual report setup string + endif + REPORT T_Tbl Rpt_Num + CLOSE PRINTER + endif + CASE (Destination = "Screen") : + MESSAGE "Sending report to screen..." + PROMPT " Use cursor keys to navigate. F2 to quit." + {Report} {Output} TYPEIN T_Tbl ENTER TYPEIN Rpt_Num ENTER {Screen} + CASE (Destination = "Disk") : + if Valid_Filename() then + MESSAGE "Sending report to file: " + File_Name + "..." + if ISFILE(File_Name) then + {Report} {Output} TYPEIN T_Tbl ENTER TYPEIN Rpt_Num ENTER {File} + TYPEIN File_Name ENTER {Replace} + else {Report} {Output} TYPEIN T_Tbl ENTER TYPEIN Rpt_Num ENTER {File} + TYPEIN File_Name ENTER + endif + endif + OTHERWISE : + ENDSWITCH + MESSAGE "" + ECHO NORMAL ; echo original image table + RETURN 1 +ENDPROC +WRITELIB Off_Lib Print_Report + +PROC Update_Calendar() + PRIVATE + M_Tbl, D_Tbl, Temp_Tbl, To_Date + M_Tbl = "Calndr" + D_Tbl = "Apoint" + To_Date = TODAY() - 30 + MESSAGE "Transferring old calendar entries to archive calendar..." + ECHO OFF + ; extract old appointment records + {Ask} TYPEIN M_Tbl ENTER + TAB TAB EXAMPLE "LINK" ; link to Day field + TYPEIN ", <=" + STRVAL(To_Date) + {Ask} TYPEIN D_Tbl ENTER CHECKPLUS + TAB TAB EXAMPLE "LINK" ; link to day field + DO_IT! + Temp_Tbl = PRIVDIR() + TABLE() + if NOT ISEMPTY(Temp_Tbl) then + ADD Temp_Tbl "Apoint_x" + SUBTRACT Temp_Tbl D_Tbl + endif + CLEARALL + ; extract old calendar records + {Ask} TYPEIN M_Tbl ENTER CHECKPLUS + TAB TAB TYPEIN " <=" + STRVAL(To_Date) + DO_IT! + Temp_Tbl = PRIVDIR() + TABLE() + if NOT ISEMPTY(Temp_Tbl) then + ADD Temp_Tbl "Calndr_x" + SUBTRACT Temp_Tbl M_Tbl + endif + MESSAGE "" + CLEARALL + ECHO NORMAL +ENDPROC +WRITELIB Off_lib Update_Calendar + +PROC Organize() + PRIVATE O_Files, A_Files, O_Ledger, A_Ledger + + PROC Transfer(Sub_From, Add_To) + PRIVATE Tbl + DO_IT! + Tbl = PRIVDIR() + TABLE() + if NOT ISEMPTY(Tbl) then + MESSAGE "Moving " + STRVAL(NRECORDS(Tbl)) + " records from " + Sub_From + " table to " + Add_To + " table" + if (Sub_From = O_Files) then + COEDITKEY + SCAN + if ISBLANK([Closed]) then + [Closed] = TODAY() + endif + ENDSCAN + DO_IT! + endif + ADD Tbl Add_To + SUBTRACT Tbl Sub_From + MESSAGE "" + endif + CLEARALL + ENDPROC; Transfer + + PROC Select_Records(F_Source, F_Target, L_Source, L_Target, Status_St) + ; move ledger source records to ledger target + {Ask} TYPEIN F_Source ENTER ; file table linked to detail tables + TAB EXAMPLE "LINK" + MOVETO FIELD "STATUS" + TYPEIN Status_St + {Ask} TYPEIN L_Source ENTER + CHECKPLUS TAB EXAMPLE "LINK" + Transfer(L_Source, L_Target) + ; move file source records to file target + {Ask} TYPEIN F_Source ENTER CHECKPLUS + MOVETO FIELD "STATUS" + TYPEIN Status_St + Transfer(F_Source, F_Target) + ENDPROC; Select_Records + + ECHO OFF + O_Files = "Files" + A_Files = "Files_x" + O_Ledger = "Ledger" + A_Ledger = "Ledger_x" + ; move archive status file cabinet records from open file table to archive file table + Select_Records(O_Files, A_Files, O_Ledger, A_Ledger, "ARCHIVE") + ; move non-archive status file cabinet records from archive file table to open file table + Select_Records(A_Files, O_Files, A_Ledger, O_Ledger, "NOT ARCHIVE") + ECHO NORMAL + Sound_Off() + Message_Box("Operation Completed", "File Cabinets have been reorganized.") +ENDPROC +WRITELIB Off_Lib Organize + +RELEASE PROCS ALL \ No newline at end of file diff --git a/old-database/UTILITY.SC2 b/old-database/UTILITY.SC2 new file mode 100755 index 0000000000000000000000000000000000000000..678ade63f52b56d602c33f6161077f03b179a63d GIT binary patch literal 20480 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 literal 0 HcmV?d00001