#!/usr/local/bin/apl --script ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ ⍝ ⍝ time 2017-01-19 09:29:35 (GMT-5) ⍝ ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ )copy 1 date )copy 1 lex )copy prompt ∇time∆add_client;po;ln ⍝ Function to add a client po←prompt∆loop time∆prompt∆add_client ln←⊂po lex∆lookup 'ans' ln←ln,⊂(po lex∆lookup 'next')lex∆lookup 'ans' →(prompt∆∆done≠po lex∆lookup 'keyword')/0 time∆clients←time∆clients,[1]ln ∇ ∇time∆add_jobs;po;ln;tmp ⍝ Function to add a job to the job table. po←prompt∆loop time∆prompt∆add_job →(prompt∆∆done≠po lex∆lookup 'keyword')/0 ln←⊂po lex∆lookup 'ans' tmp←po lex∆lookup 'next' ln←ln,⊂tmp lex∆lookup 'ans' tmp←tmp lex∆lookup 'next' ln←ln,⊂tmp lex∆lookup 'ans' time∆jobs←time∆jobs,[1]ln ∇ ∇b←time∆ec∆Add_Client_ID id ⍝ Prompt edit check for a client id duplication. →(b←0=⍴time∆clients[;1] util∆stringSearch id)/0 ⍞←id,' found in client table',⎕tc[3] ∇ ∇b←time∆ec∆Add_Job_ID id ⍝ Edit check to see that we are adding a new jobs. →(b←0=⍴time∆jobs[;1] util∆stringSearch id)/0 ⍞←id,' found in Job table',⎕tc[3] ∇ ∇b←time∆ec∆Client_ID id ⍝ Prompt edit check for a client id. →(b←0≠⍴time∆clients[;1] util∆stringSearch id)/0 ⍞←id,' not found in client table',⎕tc[3] ∇ ∇sheet←time∆init_day date ⍝ Function to instantiate a time sheet for the given day. ⎕es(∧/'NOT'=3↑date∆US date∆parse date)/'Not a valid date.' sheet←44 5⍴' ' sheet[1;1]←⊂date sheet[1+4×0,⍳10;2]←⍕¨(6+⍳5),⍳6 sheet[;3]←44⍴ '00' '15' '30' '45' sheet←'Day' 'Hour' 'Min' 'Job' 'Comment',[1]sheet ∇ time∆clients←3 2⍴00 00 00 00 00 00 ((⎕IO+(⊂0 0))⊃time∆clients)←'Client ID' ((⎕IO+(⊂0 1))⊃time∆clients)←'Client' ((⎕IO+(⊂1 0))⊃time∆clients)←'DWE' ((⎕IO+(⊂1 1))⊃time∆clients)←'Daly Web and Edit, Inc.' ((⎕IO+(⊂2 0))⊃time∆clients)←'DWEA' ((⎕IO+(⊂2 1))⊃time∆clients)←'DWE Accounting' time∆jobs←4 3⍴00 00 00 00 00 00 00 00 00 00 00 00 ((⎕IO+(⊂0 0))⊃time∆jobs)←'Job ID' ((⎕IO+(⊂0 1))⊃time∆jobs)←'Client ID' ((⎕IO+(⊂0 2))⊃time∆jobs)←'Title' ((⎕IO+(⊂1 0))⊃time∆jobs)←'Admin' ((⎕IO+(⊂1 1))⊃time∆jobs)←'DWEA' ((⎕IO+(⊂1 2))⊃time∆jobs)←'Administrative tasks' ((⎕IO+(⊂2 0))⊃time∆jobs)←'Lunch' ((⎕IO+(⊂2 1))⊃time∆jobs)←'DWEA' ((⎕IO+(⊂2 2))⊃time∆jobs)←'Breaks' ((⎕IO+(⊂3 0))⊃time∆jobs)←'wld' ((⎕IO+(⊂3 1))⊃time∆jobs)←'DWEA' ((⎕IO+(⊂3 2))⊃time∆jobs)←'Working for my self' time∆prompt∆add_client←5 2⍴00 00 00 00 00 00 00 00 00 ¯1 ((⎕IO+(⊂0 0))⊃time∆prompt∆add_client)←'prompt' ((⎕IO+(⊂0 1))⊃time∆prompt∆add_client)←'Client ID: ' ((⎕IO+(⊂1 0))⊃time∆prompt∆add_client)←'edit_check' ((⎕IO+(⊂1 1))⊃time∆prompt∆add_client)←⊂21⍴0 ⍝ prolog ≡2 (⊃((⎕IO+(⊂1 1))⊃time∆prompt∆add_client))[⍳8]←'time',(,⎕UCS 8710 101 99 8710) (⊃((⎕IO+(⊂1 1))⊃time∆prompt∆add_client))[8+⍳13]←'Add_Client_ID' ((⎕IO+(⊂2 0))⊃time∆prompt∆add_client)←'next' ((⎕IO+(⊂2 1))⊃time∆prompt∆add_client)←4 2⍴00 00 00 00 00 00 00 ¯1 ((⎕IO+(2 1) (0 0))⊃time∆prompt∆add_client)←'prompt' ((⎕IO+(2 1) (0 1))⊃time∆prompt∆add_client)←'Client Name: ' ((⎕IO+(2 1) (1 0))⊃time∆prompt∆add_client)←'edit_check' ((⎕IO+(2 1) (1 1))⊃time∆prompt∆add_client)←⊂13⍴0 ⍝ prolog ≡3 (⊃((⎕IO+(2 1) (1 1))⊃time∆prompt∆add_client))[⍳7]←'prompt',(,⎕UCS 8710) (⊃((⎕IO+(2 1) (1 1))⊃time∆prompt∆add_client))[7+⍳4]←(,⎕UCS 101 99 8710),'n' (⊃((⎕IO+(2 1) (1 1))⊃time∆prompt∆add_client))[11+⍳2]←'ul' ((⎕IO+(2 1) (2 0))⊃time∆prompt∆add_client)←'ans' ((⎕IO+(2 1) (0 0))⊃time∆prompt∆add_client)←' ' ⍝ prototype... ((⎕IO+(2 1) (2 1))⊃time∆prompt∆add_client)←0⍴((⎕IO+(2 1) (2 1))⊃time∆prompt∆add_client) ((⎕IO+(2 1) (3 0))⊃time∆prompt∆add_client)←'keyword' ((⎕IO+(⊂3 0))⊃time∆prompt∆add_client)←'ans' ((⎕IO+(⊂0 0))⊃time∆prompt∆add_client)←' ' ⍝ prototype... ((⎕IO+(⊂3 1))⊃time∆prompt∆add_client)←0⍴((⎕IO+(⊂3 1))⊃time∆prompt∆add_client) ((⎕IO+(⊂4 0))⊃time∆prompt∆add_client)←'keyword' time∆prompt∆add_job←5 2⍴00 00 00 00 00 00 00 00 00 ¯1 ((⎕IO+(⊂0 0))⊃time∆prompt∆add_job)←'prompt' ((⎕IO+(⊂0 1))⊃time∆prompt∆add_job)←'Job ID: ' ((⎕IO+(⊂1 0))⊃time∆prompt∆add_job)←'edit_check' ((⎕IO+(⊂1 1))⊃time∆prompt∆add_job)←⊂18⍴0 ⍝ prolog ≡2 (⊃((⎕IO+(⊂1 1))⊃time∆prompt∆add_job))[⍳9]←'time',(,⎕UCS 8710 101 99 8710),'A' (⊃((⎕IO+(⊂1 1))⊃time∆prompt∆add_job))[9+⍳9]←'dd_Job_ID' ((⎕IO+(⊂2 0))⊃time∆prompt∆add_job)←'next' ((⎕IO+(⊂2 1))⊃time∆prompt∆add_job)←⊂5 2⍴0 ⍝ prolog ≡2 (,⊃((⎕IO+(⊂2 1))⊃time∆prompt∆add_job))[⍳10]←00 00 00 00 00 00 00 00 00 ¯1 ((⎕IO+(2 1) (0 0))⊃time∆prompt∆add_job)←'prompt' ((⎕IO+(2 1) (0 1))⊃time∆prompt∆add_job)←'Client ID: ' ((⎕IO+(2 1) (1 0))⊃time∆prompt∆add_job)←'edit_check' ((⎕IO+(2 1) (1 1))⊃time∆prompt∆add_job)←⊂17⍴0 ⍝ prolog ≡3 (⊃((⎕IO+(2 1) (1 1))⊃time∆prompt∆add_job))[⍳7]←'time',(,⎕UCS 8710 101 99) (⊃((⎕IO+(2 1) (1 1))⊃time∆prompt∆add_job))[7+⍳10]←(,⎕UCS 8710),'Client_ID' ((⎕IO+(2 1) (2 0))⊃time∆prompt∆add_job)←'next' ((⎕IO+(2 1) (2 1))⊃time∆prompt∆add_job)←⊂4 2⍴0 ⍝ prolog ≡3 (,⊃((⎕IO+(2 1) (2 1))⊃time∆prompt∆add_job))[⍳8]←00 00 00 00 00 00 00 ¯1 ((⎕IO+(2 1) (2 1) (0 0))⊃time∆prompt∆add_job)←'prompt' ((⎕IO+(2 1) (2 1) (0 1))⊃time∆prompt∆add_job)←'Job Title: ' ((⎕IO+(2 1) (2 1) (1 0))⊃time∆prompt∆add_job)←'edit_check' ((⎕IO+(2 1) (2 1) (1 1))⊃time∆prompt∆add_job)←⊂13⍴0 ⍝ prolog ≡4 (⊃((⎕IO+(2 1) (2 1) (1 1))⊃time∆prompt∆add_job))[⍳7]←'prompt',(,⎕UCS 8710) (⊃((⎕IO+(2 1) (2 1) (1 1))⊃time∆prompt∆add_job))[7+⍳2]←(,⎕UCS 101 99) (⊃((⎕IO+(2 1) (2 1) (1 1))⊃time∆prompt∆add_job))[9+⍳2]←(,⎕UCS 8710),'n' (⊃((⎕IO+(2 1) (2 1) (1 1))⊃time∆prompt∆add_job))[11+⍳2]←'ul' ((⎕IO+(2 1) (2 1) (2 0))⊃time∆prompt∆add_job)←'ans' ((⎕IO+(2 1) (2 1) (0 0))⊃time∆prompt∆add_job)←' ' ⍝ prototype... ((⎕IO+(2 1) (2 1) (2 1))⊃time∆prompt∆add_job)←0⍴((⎕IO+(2 1) (2 1) (2 1))⊃time∆prompt∆add_job) ((⎕IO+(2 1) (2 1) (3 0))⊃time∆prompt∆add_job)←'keyword' ((⎕IO+(2 1) (3 0))⊃time∆prompt∆add_job)←'ans' ((⎕IO+(2 1) (0 0))⊃time∆prompt∆add_job)←' ' ⍝ prototype... ((⎕IO+(2 1) (3 1))⊃time∆prompt∆add_job)←0⍴((⎕IO+(2 1) (3 1))⊃time∆prompt∆add_job) ((⎕IO+(2 1) (4 0))⊃time∆prompt∆add_job)←'keyword' ((⎕IO+(⊂3 0))⊃time∆prompt∆add_job)←'ans' ((⎕IO+(⊂0 0))⊃time∆prompt∆add_job)←' ' ⍝ prototype... ((⎕IO+(⊂3 1))⊃time∆prompt∆add_job)←0⍴((⎕IO+(⊂3 1))⊃time∆prompt∆add_job) ((⎕IO+(⊂4 0))⊃time∆prompt∆add_job)←'keyword'