home *** CD-ROM | disk | FTP | other *** search
/ Carousel Volume 2 #1 / carousel.iso / mactosh / hc / schedule.sit / Scheduler / background_2611.txt < prev    next >
Text File  |  1988-02-12  |  35KB  |  1,398 lines

  1. -- background: 2611 from stack: in
  2. -- bmap block id: 6615
  3. -- flags: 0000
  4. -- background id: 0
  5. -- name: Scheduler
  6. ----- HyperTalk script -----
  7. on newStack
  8.   extend
  9. end newStack
  10.  
  11. on extend
  12.   PLAY BOING
  13.   put "SEND THE FEE, AND YOU'LL BE ALLOWED MORE MONTHS"
  14. end extend
  15.  
  16. function getStartDate
  17. -- end of stack this month, whichever is newer
  18. put (field "Month") && "1," && (field "Year") into it
  19. if length(it) < 11 then put the date into it
  20. else
  21.   convert it to seconds
  22.   if field 16 is not empty then add 60*60*24*32 to it
  23.   --add 32 days for next month if this month has dates
  24. end if
  25. put startOfMonth(it) into it    --so we can compare
  26. put the date into thisMonth
  27. put startOfMonth(thisMonth) into thisMonth   --both at week starts in seconds
  28. if thisMonth < 2587766400 then
  29.   answer "Set the Control Panel to today's date" with "OK"
  30.   return "Cancel"
  31. end if
  32. if it >= thisMonth then return it   --calendar already beyond today
  33. convert it to short date
  34. convert thisMonth to short date
  35. answer "Start from which date?" with it or thisMonth or "Cancel"
  36. if it is "Cancel" then return it
  37. convert it to seconds
  38. return it
  39. end getStartDate
  40.  
  41. function startOfMonth aDate     -- the seconds of Monday before the 1st
  42. put 60*60*24 into OneDay      --seconds in a day
  43. put aDate into it
  44. convert it to long date
  45. put 1 into word 2 of item 2 of it     --first of month
  46. convert it to seconds
  47. convert it to long date
  48. repeat while item 1 of it <> "Sunday"
  49.   convert it to seconds
  50.   subtract OneDay from it    --look for previous Sunday
  51.   convert it to long date
  52. end repeat
  53. convert it to seconds
  54. return it
  55. end startOfMonth
  56.  
  57. on openBackground
  58.   show menubar
  59.   hide message
  60.   push recent card
  61.   put (field 1 & line 1 of field year) into it
  62.   set the name of this card to it
  63.   if length of line 2 of field year < 2 then
  64.     put "4 4" into line 2 of field Year -- default values for shifts in a row
  65.     -- and number of shifts per day to schedule
  66.   end if
  67.   if (word 1 of line 3 of field year < 1) then put 1 into line 3 of field year
  68.  
  69.   -- personal menu set up
  70.  
  71.   global menu1,menu2
  72.   put NewMenu("Schedule","Requests On","Requests Off" ,"(-","Erase Schedule","Go To Next Month", "Go To Prior Month", "Extend Calendar","(-", "HELP") into menu1
  73.   if menu1 is 0 then answer ("Unable to make menu "Beep") with "Drat"
  74.   put NewMenu("SetUp","Set Requests On","Set Requests Off","(-", "Set Max # Days in a Row", "Set # Shifts per Day","Set Salvos","(-", "Talley", "Go to Current Month", "Delete this Card") into menu2
  75.   if menu2 is 0 then answer ("Unable to make menu Visual") with "Drat"
  76. end OpenBackground
  77. on closebackground
  78.   global menu1,menu2
  79.   put deleteMenu(menu1) into menu1 -- clearing global for safety
  80.   put deleteMenu(menu2) into menu2
  81. end closebackground
  82.  
  83. on idle
  84.   global menu1, menu2, lastTick
  85.   if (the ticks-lastTick)>120 then
  86.     put the ticks into lastTick
  87.     ShowMenu(menu1)
  88.     ShowMenu(menu2)
  89.   end if
  90.   pass idle
  91. end idle
  92.  
  93. on doMenu which -- get menu items from doMenu before Hypercard does
  94.   global menu1,menu2
  95.   if which is "Requests Off" then
  96.     send "mouseUp" to bkgnd button "Schedule Off"
  97.   else if which is "Requests On" then
  98.     send "mouseUp" to bkgnd button "Schedule On"
  99.   else if which is "Set Requests Off" then
  100.     send "mouseUp" to bkgnd button "Requests Off"
  101.   else if which is "Set Requests On" then
  102.     send "mouseUp" to bkgnd button "Requests On"
  103.   else if which is "Talley" then
  104.     send "mouseUp" to bkgnd button "Talley"
  105.   else if which is "Go to Current Month" then
  106.     send "mouseUp" to bkgnd button "Show Current Month"
  107.   else if which is "Erase Schedule" then
  108.     send "mouseUp" to bkgnd button "Erase Sched"
  109.   else if which is "Set Max # Days in a Row" then
  110.     setDaysinaRow
  111.   else if which is "Set # Shifts per Day" then
  112.     setShiftsPerDay
  113.   else if which is "Set Salvos" then
  114.     ask "How days per Salvo... (1-5)" with "1"
  115.     put it into line 3 of field "year"
  116.   else if which is "Extend Calendar" then
  117.     extend
  118.   else if which is "Go To Next Month" then
  119.     visual Effect Dissolve Fast
  120.     doMenu Next
  121.   else if which is "Go To Prior Month" then
  122.     visual Effect Dissolve Fast
  123.     doMenu Prev
  124.   else if which is "Help" then
  125.     visual Effect Dissolve Fast
  126.     send "mouseUp" to bkgnd button "Help"
  127.   else if which is "Delete this Card" then
  128.     Answer "Are you Sure..." with "Yes" or "No"
  129.     if it is "No" then exit doMenu
  130.     doMenu Delete Card
  131.   else pass doMenu -- pass on menu commands I don't trap
  132. end doMenu
  133.  
  134. on SetDaysInaRow
  135.   Ask "Limit Days in a Row to..." with "5"
  136.   put it into word 1 of line 2 of field Year -- hide it here
  137. end SetDaysInaRow
  138.  
  139. on setShiftsPerDay
  140.   put 0 into it
  141.   repeat until (it > 0 and it <= 4)
  142.     Ask "How Many Shifts Per Day (1 - 4)" with "4"
  143.   end repeat
  144.   put " " & it into word 2 of line 2 of field year -- hide it here
  145. end setShiftsPerDay
  146.  
  147.  
  148. on LabelDays
  149.   global firstofmonth, lastofmonth
  150.   -- ***** now put which day of the week it is in each box ******
  151.   repeat with index = firstofmonth to lastofmonth
  152.     put field 1 && word 1 of field index & "," & field 37 into it
  153.     convert it to abbreviated date
  154.     put word 1 of it into it
  155.     put it into line 5 of field index
  156.   end repeat
  157. end LabelDays
  158.  
  159. on CheckButtons
  160.   put Char 1 of word 1 of field 1 & char 1 of word 2 of field 1 into name
  161.   global storage
  162.   put "" into storage
  163.   put "A B C D" into Shifts
  164.   repeat with shift = 1 to 4
  165.     repeat with index = 1 to 31
  166.       put index+((shift-1)*31) into today -- there are 124 buttons to check
  167.       if hilite of card button today = "True" then
  168.         put word shift of Shifts & index & " " after storage
  169.         -- storage looks like this ..A1 A3 A22 B12 C14 etc...
  170.       end if
  171.     end repeat
  172.   end repeat
  173.   put name & " " before storage
  174. end CheckButtons
  175.  
  176.  
  177.  
  178.  
  179. -- part 5 (field)
  180. -- low flags: 00
  181. -- high flags: 0000
  182. -- rect: left=196 top=44 right=67 bottom=304
  183. -- title width / last selected line: 0
  184. -- icon id / first selected line: 0 / 0
  185. -- text alignment: 1
  186. -- font id: 3
  187. -- text size: 18
  188. -- style flags: 256
  189. -- line height: 24
  190. -- part name: Month
  191.  
  192.  
  193. -- part 8 (field)
  194. -- low flags: 00
  195. -- high flags: 0000
  196. -- rect: left=11 top=99 right=141 bottom=80
  197. -- title width / last selected line: 0
  198. -- icon id / first selected line: 0 / 0
  199. -- text alignment: 0
  200. -- font id: 3
  201. -- text size: 9
  202. -- style flags: 0
  203. -- line height: 10
  204. -- part name: 
  205.  
  206.  
  207. -- part 9 (field)
  208. -- low flags: 00
  209. -- high flags: 0000
  210. -- rect: left=79 top=99 right=141 bottom=148
  211. -- title width / last selected line: 0
  212. -- icon id / first selected line: 0 / 0
  213. -- text alignment: 0
  214. -- font id: 3
  215. -- text size: 9
  216. -- style flags: 0
  217. -- line height: 10
  218. -- part name: 
  219.  
  220.  
  221. -- part 10 (field)
  222. -- low flags: 00
  223. -- high flags: 0000
  224. -- rect: left=147 top=99 right=142 bottom=216
  225. -- title width / last selected line: 0
  226. -- icon id / first selected line: 0 / 0
  227. -- text alignment: 0
  228. -- font id: 3
  229. -- text size: 9
  230. -- style flags: 0
  231. -- line height: 10
  232. -- part name: 
  233.  
  234.  
  235. -- part 11 (field)
  236. -- low flags: 00
  237. -- high flags: 0000
  238. -- rect: left=215 top=99 right=141 bottom=284
  239. -- title width / last selected line: 0
  240. -- icon id / first selected line: 0 / 0
  241. -- text alignment: 0
  242. -- font id: 3
  243. -- text size: 9
  244. -- style flags: 0
  245. -- line height: 10
  246. -- part name: 
  247.  
  248.  
  249. -- part 12 (field)
  250. -- low flags: 00
  251. -- high flags: 0000
  252. -- rect: left=283 top=99 right=141 bottom=352
  253. -- title width / last selected line: 0
  254. -- icon id / first selected line: 0 / 0
  255. -- text alignment: 0
  256. -- font id: 3
  257. -- text size: 9
  258. -- style flags: 0
  259. -- line height: 10
  260. -- part name: 
  261.  
  262.  
  263. -- part 13 (field)
  264. -- low flags: 00
  265. -- high flags: 0000
  266. -- rect: left=351 top=99 right=141 bottom=420
  267. -- title width / last selected line: 0
  268. -- icon id / first selected line: 0 / 0
  269. -- text alignment: 0
  270. -- font id: 3
  271. -- text size: 9
  272. -- style flags: 0
  273. -- line height: 10
  274. -- part name: 
  275.  
  276.  
  277. -- part 14 (field)
  278. -- low flags: 00
  279. -- high flags: 0000
  280. -- rect: left=419 top=99 right=141 bottom=488
  281. -- title width / last selected line: 0
  282. -- icon id / first selected line: 0 / 0
  283. -- text alignment: 0
  284. -- font id: 3
  285. -- text size: 9
  286. -- style flags: 0
  287. -- line height: 10
  288. -- part name: 
  289.  
  290.  
  291. -- part 15 (field)
  292. -- low flags: 00
  293. -- high flags: 0000
  294. -- rect: left=11 top=145 right=187 bottom=80
  295. -- title width / last selected line: 0
  296. -- icon id / first selected line: 0 / 0
  297. -- text alignment: 0
  298. -- font id: 3
  299. -- text size: 9
  300. -- style flags: 0
  301. -- line height: 10
  302. -- part name: 
  303.  
  304.  
  305. -- part 16 (field)
  306. -- low flags: 00
  307. -- high flags: 0000
  308. -- rect: left=79 top=145 right=187 bottom=148
  309. -- title width / last selected line: 0
  310. -- icon id / first selected line: 0 / 0
  311. -- text alignment: 0
  312. -- font id: 3
  313. -- text size: 9
  314. -- style flags: 0
  315. -- line height: 10
  316. -- part name: 
  317.  
  318.  
  319. -- part 17 (field)
  320. -- low flags: 00
  321. -- high flags: 0000
  322. -- rect: left=147 top=145 right=187 bottom=216
  323. -- title width / last selected line: 0
  324. -- icon id / first selected line: 0 / 0
  325. -- text alignment: 0
  326. -- font id: 3
  327. -- text size: 9
  328. -- style flags: 0
  329. -- line height: 10
  330. -- part name: 
  331.  
  332.  
  333. -- part 18 (field)
  334. -- low flags: 00
  335. -- high flags: 0000
  336. -- rect: left=215 top=145 right=187 bottom=284
  337. -- title width / last selected line: 0
  338. -- icon id / first selected line: 0 / 0
  339. -- text alignment: 0
  340. -- font id: 3
  341. -- text size: 9
  342. -- style flags: 0
  343. -- line height: 10
  344. -- part name: 
  345.  
  346.  
  347. -- part 19 (field)
  348. -- low flags: 00
  349. -- high flags: 0000
  350. -- rect: left=283 top=145 right=187 bottom=352
  351. -- title width / last selected line: 0
  352. -- icon id / first selected line: 0 / 0
  353. -- text alignment: 0
  354. -- font id: 3
  355. -- text size: 9
  356. -- style flags: 0
  357. -- line height: 10
  358. -- part name: 
  359.  
  360.  
  361. -- part 20 (field)
  362. -- low flags: 00
  363. -- high flags: 0000
  364. -- rect: left=351 top=145 right=187 bottom=420
  365. -- title width / last selected line: 0
  366. -- icon id / first selected line: 0 / 0
  367. -- text alignment: 0
  368. -- font id: 3
  369. -- text size: 9
  370. -- style flags: 0
  371. -- line height: 10
  372. -- part name: 
  373.  
  374.  
  375. -- part 22 (field)
  376. -- low flags: 00
  377. -- high flags: 0000
  378. -- rect: left=419 top=145 right=187 bottom=488
  379. -- title width / last selected line: 0
  380. -- icon id / first selected line: 0 / 0
  381. -- text alignment: 0
  382. -- font id: 3
  383. -- text size: 9
  384. -- style flags: 0
  385. -- line height: 10
  386. -- part name: 
  387.  
  388.  
  389. -- part 23 (field)
  390. -- low flags: 00
  391. -- high flags: 0000
  392. -- rect: left=11 top=191 right=233 bottom=80
  393. -- title width / last selected line: 0
  394. -- icon id / first selected line: 0 / 0
  395. -- text alignment: 0
  396. -- font id: 3
  397. -- text size: 9
  398. -- style flags: 0
  399. -- line height: 10
  400. -- part name: 
  401.  
  402.  
  403. -- part 24 (field)
  404. -- low flags: 00
  405. -- high flags: 0000
  406. -- rect: left=79 top=191 right=233 bottom=148
  407. -- title width / last selected line: 0
  408. -- icon id / first selected line: 0 / 0
  409. -- text alignment: 0
  410. -- font id: 3
  411. -- text size: 9
  412. -- style flags: 0
  413. -- line height: 10
  414. -- part name: 
  415.  
  416.  
  417. -- part 25 (field)
  418. -- low flags: 00
  419. -- high flags: 0000
  420. -- rect: left=147 top=191 right=233 bottom=216
  421. -- title width / last selected line: 0
  422. -- icon id / first selected line: 0 / 0
  423. -- text alignment: 0
  424. -- font id: 3
  425. -- text size: 9
  426. -- style flags: 0
  427. -- line height: 10
  428. -- part name: 
  429.  
  430.  
  431. -- part 26 (field)
  432. -- low flags: 00
  433. -- high flags: 0000
  434. -- rect: left=215 top=191 right=233 bottom=284
  435. -- title width / last selected line: 0
  436. -- icon id / first selected line: 0 / 0
  437. -- text alignment: 0
  438. -- font id: 3
  439. -- text size: 9
  440. -- style flags: 0
  441. -- line height: 10
  442. -- part name: 
  443.  
  444.  
  445. -- part 27 (field)
  446. -- low flags: 00
  447. -- high flags: 0000
  448. -- rect: left=283 top=191 right=233 bottom=352
  449. -- title width / last selected line: 0
  450. -- icon id / first selected line: 0 / 0
  451. -- text alignment: 0
  452. -- font id: 3
  453. -- text size: 9
  454. -- style flags: 0
  455. -- line height: 10
  456. -- part name: 
  457.  
  458.  
  459. -- part 28 (field)
  460. -- low flags: 00
  461. -- high flags: 0000
  462. -- rect: left=348 top=191 right=233 bottom=417
  463. -- title width / last selected line: 0
  464. -- icon id / first selected line: 0 / 0
  465. -- text alignment: 0
  466. -- font id: 3
  467. -- text size: 9
  468. -- style flags: 0
  469. -- line height: 10
  470. -- part name: 
  471.  
  472.  
  473. -- part 29 (field)
  474. -- low flags: 00
  475. -- high flags: 0000
  476. -- rect: left=419 top=191 right=233 bottom=488
  477. -- title width / last selected line: 0
  478. -- icon id / first selected line: 0 / 0
  479. -- text alignment: 0
  480. -- font id: 3
  481. -- text size: 9
  482. -- style flags: 0
  483. -- line height: 10
  484. -- part name: 
  485.  
  486.  
  487. -- part 30 (field)
  488. -- low flags: 00
  489. -- high flags: 0000
  490. -- rect: left=11 top=237 right=279 bottom=80
  491. -- title width / last selected line: 0
  492. -- icon id / first selected line: 0 / 0
  493. -- text alignment: 0
  494. -- font id: 3
  495. -- text size: 9
  496. -- style flags: 0
  497. -- line height: 10
  498. -- part name: 
  499.  
  500.  
  501. -- part 31 (field)
  502. -- low flags: 00
  503. -- high flags: 0000
  504. -- rect: left=79 top=237 right=279 bottom=148
  505. -- title width / last selected line: 0
  506. -- icon id / first selected line: 0 / 0
  507. -- text alignment: 0
  508. -- font id: 3
  509. -- text size: 9
  510. -- style flags: 0
  511. -- line height: 10
  512. -- part name: 
  513.  
  514.  
  515. -- part 32 (field)
  516. -- low flags: 00
  517. -- high flags: 0000
  518. -- rect: left=147 top=237 right=279 bottom=216
  519. -- title width / last selected line: 0
  520. -- icon id / first selected line: 0 / 0
  521. -- text alignment: 0
  522. -- font id: 3
  523. -- text size: 9
  524. -- style flags: 0
  525. -- line height: 10
  526. -- part name: 
  527.  
  528.  
  529. -- part 33 (field)
  530. -- low flags: 00
  531. -- high flags: 0000
  532. -- rect: left=215 top=237 right=279 bottom=284
  533. -- title width / last selected line: 0
  534. -- icon id / first selected line: 0 / 0
  535. -- text alignment: 0
  536. -- font id: 3
  537. -- text size: 9
  538. -- style flags: 0
  539. -- line height: 10
  540. -- part name: 
  541.  
  542.  
  543. -- part 34 (field)
  544. -- low flags: 00
  545. -- high flags: 0000
  546. -- rect: left=283 top=237 right=279 bottom=352
  547. -- title width / last selected line: 0
  548. -- icon id / first selected line: 0 / 0
  549. -- text alignment: 0
  550. -- font id: 3
  551. -- text size: 9
  552. -- style flags: 0
  553. -- line height: 10
  554. -- part name: 
  555.  
  556.  
  557. -- part 35 (field)
  558. -- low flags: 00
  559. -- high flags: 0000
  560. -- rect: left=351 top=237 right=279 bottom=420
  561. -- title width / last selected line: 0
  562. -- icon id / first selected line: 0 / 0
  563. -- text alignment: 0
  564. -- font id: 3
  565. -- text size: 9
  566. -- style flags: 0
  567. -- line height: 10
  568. -- part name: 
  569.  
  570.  
  571. -- part 36 (field)
  572. -- low flags: 00
  573. -- high flags: 0000
  574. -- rect: left=419 top=237 right=279 bottom=488
  575. -- title width / last selected line: 0
  576. -- icon id / first selected line: 0 / 0
  577. -- text alignment: 0
  578. -- font id: 3
  579. -- text size: 9
  580. -- style flags: 0
  581. -- line height: 10
  582. -- part name: 
  583.  
  584.  
  585. -- part 37 (field)
  586. -- low flags: 00
  587. -- high flags: 0000
  588. -- rect: left=11 top=283 right=325 bottom=80
  589. -- title width / last selected line: 0
  590. -- icon id / first selected line: 0 / 0
  591. -- text alignment: 0
  592. -- font id: 3
  593. -- text size: 9
  594. -- style flags: 0
  595. -- line height: 10
  596. -- part name: 
  597.  
  598.  
  599. -- part 38 (field)
  600. -- low flags: 00
  601. -- high flags: 0000
  602. -- rect: left=79 top=283 right=325 bottom=148
  603. -- title width / last selected line: 0
  604. -- icon id / first selected line: 0 / 0
  605. -- text alignment: 0
  606. -- font id: 3
  607. -- text size: 9
  608. -- style flags: 0
  609. -- line height: 10
  610. -- part name: 
  611.  
  612.  
  613. -- part 39 (field)
  614. -- low flags: 00
  615. -- high flags: 0000
  616. -- rect: left=147 top=283 right=325 bottom=216
  617. -- title width / last selected line: 0
  618. -- icon id / first selected line: 0 / 0
  619. -- text alignment: 0
  620. -- font id: 3
  621. -- text size: 9
  622. -- style flags: 0
  623. -- line height: 10
  624. -- part name: 
  625.  
  626.  
  627. -- part 40 (field)
  628. -- low flags: 00
  629. -- high flags: 0000
  630. -- rect: left=215 top=283 right=325 bottom=284
  631. -- title width / last selected line: 0
  632. -- icon id / first selected line: 0 / 0
  633. -- text alignment: 0
  634. -- font id: 3
  635. -- text size: 9
  636. -- style flags: 0
  637. -- line height: 10
  638. -- part name: 
  639.  
  640.  
  641. -- part 41 (field)
  642. -- low flags: 00
  643. -- high flags: 0000
  644. -- rect: left=283 top=283 right=325 bottom=352
  645. -- title width / last selected line: 0
  646. -- icon id / first selected line: 0 / 0
  647. -- text alignment: 0
  648. -- font id: 3
  649. -- text size: 9
  650. -- style flags: 0
  651. -- line height: 10
  652. -- part name: 
  653.  
  654.  
  655. -- part 42 (field)
  656. -- low flags: 00
  657. -- high flags: 0000
  658. -- rect: left=351 top=283 right=325 bottom=420
  659. -- title width / last selected line: 0
  660. -- icon id / first selected line: 0 / 0
  661. -- text alignment: 0
  662. -- font id: 3
  663. -- text size: 9
  664. -- style flags: 0
  665. -- line height: 10
  666. -- part name: 
  667.  
  668.  
  669. -- part 43 (field)
  670. -- low flags: 00
  671. -- high flags: 0000
  672. -- rect: left=419 top=283 right=325 bottom=488
  673. -- title width / last selected line: 0
  674. -- icon id / first selected line: 0 / 0
  675. -- text alignment: 0
  676. -- font id: 3
  677. -- text size: 9
  678. -- style flags: 0
  679. -- line height: 10
  680. -- part name: 
  681.  
  682.  
  683. -- part 44 (button)
  684. -- low flags: 00
  685. -- high flags: 0000
  686. -- rect: left=0 top=324 right=342 bottom=30
  687. -- title width / last selected line: 0
  688. -- icon id / first selected line: 20689 / 20689
  689. -- text alignment: 1
  690. -- font id: 0
  691. -- text size: 12
  692. -- style flags: 0
  693. -- line height: 16
  694. -- part name: go to home
  695. ----- HyperTalk script -----
  696. on mouseUp
  697.   go Home
  698. end mouseUp
  699.  
  700.  
  701.  
  702. -- part 49 (field)
  703. -- low flags: 00
  704. -- high flags: 0000
  705. -- rect: left=10 top=43 right=62 bottom=66
  706. -- title width / last selected line: 0
  707. -- icon id / first selected line: 0 / 0
  708. -- text alignment: 0
  709. -- font id: 3
  710. -- text size: 14
  711. -- style flags: 256
  712. -- line height: 18
  713. -- part name: Year
  714.  
  715.  
  716. -- part 53 (field)
  717. -- low flags: 80
  718. -- high flags: 0000
  719. -- rect: left=18 top=107 right=316 bottom=474
  720. -- title width / last selected line: 0
  721. -- icon id / first selected line: 0 / 0
  722. -- text alignment: 0
  723. -- font id: 3
  724. -- text size: 12
  725. -- style flags: 0
  726. -- line height: 16
  727. -- part name: backfield
  728.  
  729.  
  730. -- part 55 (button)
  731. -- low flags: 00
  732. -- high flags: 0000
  733. -- rect: left=138 top=0 right=15 bottom=219
  734. -- title width / last selected line: 0
  735. -- icon id / first selected line: 0 / 0
  736. -- text alignment: 1
  737. -- font id: 0
  738. -- text size: 12
  739. -- style flags: 0
  740. -- line height: 16
  741. -- part name: Schedule Off
  742. ----- HyperTalk script -----
  743. On mouseup
  744.   global shiftloopcount, storage, index, SalvoNum
  745.   put line 3 of field year into SalvoNum
  746.   Ask "How Many Shifts of type 'A' per Day(1-4)" with "1"
  747.   if it > 4 or it < 1 then
  748.     exitroutine
  749.     exit mouseUp
  750.   else
  751.     put it into TypeANum
  752.     put it & " " into ShiftLoopCount
  753.   end if
  754.   Ask "How Many Shifts of Type 'B' per Day (1-4)" with "1"
  755.   if it > 4 or it < 1 then
  756.     exitroutine
  757.     exit mouseUp
  758.   else
  759.     put it into TypeBNum
  760.     put it & " " after shiftLoopCount
  761.   end if
  762.  
  763.   Ask "How Many Shifts of Type 'C' per Day (1-4)" with "1"
  764.   if it > 4 or it < 1 then
  765.     exitroutine
  766.     exit mouseUp
  767.   else
  768.     put it into TypeCNum
  769.     put it & " " after shiftLoopCount
  770.   end if
  771.  
  772.   Ask "How Many Shifts of Type 'D' per Day (1-4)" with "1"
  773.   if it > 4 or it < 1 then
  774.     exitroutine
  775.     exit mouseUp
  776.   else
  777.     put it into TypeDNum
  778.     put it & " " after shiftLoopCount
  779.   end if
  780.  
  781.   Hide Message
  782.   set cursor to 4
  783.   set lockscreen to true
  784.   --  Answer "Schedule people who WANT certain shifts? " with "Yes" or "No"
  785.  
  786.   --  if it contains "Yes" then
  787.   --    put "Getting Requests On First"
  788.   --    send mouseUp to bkgnd button "Schedule On"
  789.   --  end if
  790.  
  791.   if (the length of line 5 of field 15 < 1) then -- pick some field in the middle
  792.     SetUpCalendar
  793.     LabelDays -- if the days haven't been labelled, do it now
  794.   end if
  795.  
  796.   -- now get requests off for this month
  797.   set cursor to 4
  798.   put "" into field 38 -- clear it out first
  799.   put " I'm getting peoples requests for days off"
  800.  
  801.   put id of last card of bkgnd "Requests Off" into lastid -- for later checking
  802.   put "False" into LastCardTest -- set THE Boolean to false
  803.   put 0 into cardnum
  804.   repeat until (LastCardTest="True")
  805.     push card--push calendar card on to stack
  806.     closebackground -- take care of the menus etc...
  807.     put cardnum + 1 into cardnum -- increment this for each loop
  808.     go to card cardnum of bkgnd "requests off"
  809.     get id of card
  810.     if it = lastid then put "True" into LastCardTest--if so... Stop
  811.     GetData
  812.     closebackground
  813.     pop card
  814.     put storage into line cardnum of field backfield
  815.   end repeat
  816.   if (number of lines of field 38 = 1) then
  817.     answer "Only one person? - don't waste your time"
  818.     exit mouseUp
  819.   end if
  820.   BeginToSchedule
  821.  
  822.  
  823. end mouseUp
  824.  
  825. on BeginToSchedule
  826.   global employeenum, Name, index, shift, shiftloopcount, employee
  827.   global firstofmonth, lastofmonth, shifnum, subindex, DaysInaRowLimit
  828.   global limitpointer, SalvoNum
  829.   set cursor to 4
  830.   put "A B C D" into shifts
  831.   put word 2 of line 2 of field year into shifnum
  832.  
  833.   put word 1 of line 2 of field "Year" into it
  834.   put it - 1 into DaysInaRowLimit
  835.  
  836.   put the number of lines of field 38 into employeenum
  837.   SetUpCalendar -- find first and last of month
  838.   set lockscreen to false -- let's watch it work
  839.   repeat with index = firstofmonth to lastofmonth -- day by day
  840.     put word 1 of line 1 of field index after line 6 of field index -- save date we'll put it back later
  841.     put "" into word 1 of line 1 of field index--strip leading blanks
  842.     put "" before word 1 of line 1 of field index
  843.  
  844.     repeat with subindex = 1 to Shifnum -- sched all 4 shifts day by day
  845.       --   *********
  846.       put word subindex of shiftloopcount into shiftloop -- how people pert shift
  847.       put word subindex of shifts into shift -- how many shifts
  848.       repeat with subsubindex = 1 to shiftloop
  849.         if number of words of line subindex of field index < (shiftloop) then -- if not full up... proceed
  850.           GetAWorker
  851.           PutName
  852.           -- remember to count down the number of days they're available
  853.           if (Name contains "**") then next repeat -- but not if it's 'no name'
  854.           CountDown
  855.  
  856.           if SalvoNum > 1 then
  857.             Salvo
  858.           end if
  859.  
  860.  
  861.         else -- if already done ... skip this part
  862.           wait 1 -- later may use this area to keep a running total
  863.         end if
  864.       end repeat
  865.     end repeat
  866.     put last word of line 6 of field index before line 1 of field index
  867.     put "" into line 6 of field index
  868.   end repeat
  869. end BeginToschedule
  870.  
  871. On GetAWorker
  872.   Global employeenum, Name, Date, Answer, employee, index
  873.   put "False" into Cycled
  874.   put "False" into Looped
  875.   put "False" into Date -- set the Boolean
  876.   put random (employeenum) into seed -- start looking in a random spot
  877.   put seed into employee
  878.   Repeat until (Cycled = "True")
  879.  
  880.     put First word of line employee of field 38 into Name
  881.  
  882.     shiftLimittest-- first test of potential to work
  883.  
  884.     if Answer = "Yes" then AvailabilityTest--check for day off requested
  885.  
  886.     if answer = "Yes" then NightMorningTest--did they work last shift of yesterday
  887.  
  888.     if answer = "Yes" then  DaysInaRowTest --within our limits for days in a row?
  889.  
  890.  
  891.     if answer = "No" then -- if any test says, NO...they can't be put on
  892.       put "**" into Name -- is left like this if no one available
  893.     else
  894.       put "Filled" into Date
  895.       exit GetaWorker -- got a name - no need to stick around
  896.     end if
  897.  
  898.  
  899.     if (employee = employeenum) then
  900.       put 1 into employee
  901.       put "true" into looped
  902.     else
  903.       put (employee + 1) into employee
  904.     end if
  905.  
  906.     if employee = seed AND looped = "true" then
  907.       put "True" into Cycled
  908.     end if
  909.  
  910.     -- if we've gone through everyone once, then quit...(a full cycle)
  911.   end repeat
  912. end GetAWorker
  913.  
  914. On AvailabilityTest
  915.   -- Just determines if a person is 'available'
  916.   global employee, Name, Date, Answer, index, Shift,Shifnum
  917.   if field index contains Name then -- are they already scheduled for today
  918.     put "No" into answer -- if so...
  919.   else
  920.     if line employee of field 38 contains (" " & first word of line 6 of field index & shift) -- remember we've hidden the date here
  921.     then
  922.     put "No" into answer
  923.   else
  924.     put "Yes" into answer -- yes he is available
  925.   end if
  926. end if
  927.  
  928. end AvailabilityTest
  929.  
  930. on NightMorningTest -- Does not allow someone to work the night before
  931.   -- and the morning after (e.g. graveyard on the 3rd, AM on the 4th!!)
  932.   global shifnum, Name, index, subindex, answer
  933.   if subindex = 1 then -- we only need to do this test on the first shift
  934.     if line shifnum of field (index - 1) contains Name
  935.     then put "No" into answer -- tell the prog this person's unavailable
  936.   end if
  937. end NightMorningTest
  938.  
  939. On DaysInaRowTest
  940.   global DaysInaRowLimit, index, subindex, Name, firstofmonth,answer
  941.   global shifnum
  942.   put "" into LimitReached -- intitialize
  943.   put index into here
  944.   if (index - daysInaRowLimit) > firstofmonth then
  945.     put (index - daysInaRowLimit - 1) into there
  946.     -- otherwise, its the first days of month, skip it
  947.     Repeat with rowindex = (here - 1) down to there
  948.       if field rowindex contains Name then
  949.         put "No" into Answer--set default to 'not available'...keep looking
  950.       else -- however, if anywhere along the 'days in a row' we're looking
  951.         put "Yes" into Answer --we don't find the person, then they're
  952.         exit repeat --available, and we don't need to look further
  953.  
  954.       end if
  955.     end repeat
  956.   end if
  957. end DaysInaRowTest
  958.  
  959. on GetData
  960.   Global Storage
  961.   put first char of first word of field "Name" & first char of second word of field "Name" && field "data" into storage
  962.   put " " & field Shiftlimit1┬¼  -- weekday limits
  963.   & " " & field Shiftlimit2 & " " ┬¼ -- weekend limits
  964.   after word 1 of storage
  965.  
  966.   -- storage should look like this
  967.   -- Abbrev.Name limitA limitB limitC limitD limitA limitB limitC LIMITD ....
  968.  
  969. end GetData
  970.  
  971. on ShiftLimitTest
  972.   global employee, name, Date, Answer, index, shift, subindex, shiftnum
  973.   global limitpointer
  974.   if first char of line 5 of field index = "S" -- if its Sat or Sun
  975.   then
  976.   put (5 + subindex) into limitpointer
  977. else
  978.   put (1 + subindex) into limitpointer
  979. end if
  980.  
  981. if (word (limitpointer) of line employee of field 38 <= 0) then put "No" into answer
  982. else
  983.   put "Yes" into answer
  984. end if
  985. end ShiftLimitTest
  986.  
  987. on CountDown
  988.   global limitpointer, employee
  989.   put word (limitpointer) of line employee of field 38 into holder
  990.   put (holder - 1) into holder
  991.   put holder into word (limitpointer) of line employee of field 38
  992. end CountDown
  993.  
  994. On ExitRoutine
  995.   answer "You exceeded the limits - Start Over"
  996. end ExitRoutine
  997.  
  998. On Salvo
  999.   global employeenum, Name, index, shift, shiftloopcount, employee
  1000.   global firstofmonth, lastofmonth, shifnum, subindex, DaysInaRowLimit
  1001.   global limitpointer, SalvoNum, Answer
  1002.   put index into holder-- save the original index
  1003.   repeat with index = (index + 1) to (index + salvonum)
  1004.     if index > lastofmonth then
  1005.       put holder into index
  1006.       exit salvo
  1007.     end if
  1008.     put word 1 of line 1 of field index into line 6 of field index
  1009.     put "" into word 1 of field index
  1010.     availabilityTest
  1011.     shiftLimitTest -- do these two tests, if answer is Yes keep going
  1012.  
  1013.     if Answer = "Yes" then
  1014.  
  1015.       DaysInARowTest
  1016.  
  1017.       if Answer = "Yes" then
  1018.         PutName
  1019.         CountDown
  1020.         put last word of line 6 of field index before line 1 of field index
  1021.         put "" into line 6 of field index
  1022.       else
  1023.         put last word of line 6 of field index before line 1 of field index
  1024.         put "" into line 6 of field index
  1025.         put holder into index
  1026.         exit salvo
  1027.       end if
  1028.     else
  1029.       put last word of line 6 of field index before line 1 of field index
  1030.       put "" into line 6 of field index
  1031.       put holder into index
  1032.       exit Salvo
  1033.     end if
  1034.   end repeat
  1035.   put holder into index -- put the original index back
  1036. end Salvo
  1037.  
  1038. On PutName
  1039.   global Name, subindex, index
  1040.   Put " " & Name after line subindex of field index
  1041. end PutName
  1042.  
  1043.  
  1044.  
  1045.  
  1046. -- part 56 (button)
  1047. -- low flags: 00
  1048. -- high flags: 0000
  1049. -- rect: left=0 top=0 right=16 bottom=40
  1050. -- title width / last selected line: 0
  1051. -- icon id / first selected line: 0 / 0
  1052. -- text alignment: 1
  1053. -- font id: 0
  1054. -- text size: 12
  1055. -- style flags: 0
  1056. -- line height: 16
  1057. -- part name: Requests OFF
  1058. ----- HyperTalk script -----
  1059. on mouseUp
  1060.   push card
  1061.   closebackground
  1062.   go to Background "Requests Off"
  1063. end mouseUp
  1064.  
  1065.  
  1066.  
  1067.  
  1068. -- part 57 (button)
  1069. -- low flags: 00
  1070. -- high flags: 0000
  1071. -- rect: left=306 top=0 right=12 bottom=388
  1072. -- title width / last selected line: 0
  1073. -- icon id / first selected line: 0 / 0
  1074. -- text alignment: 1
  1075. -- font id: 0
  1076. -- text size: 12
  1077. -- style flags: 0
  1078. -- line height: 16
  1079. -- part name: ERASE Sched
  1080. ----- HyperTalk script -----
  1081. on mouseUp
  1082.   answer "Are You Sure?!" with "Yes" or "No"
  1083.   if it is "yes" then
  1084.     set cursor to 4
  1085.     repeat with index = 2 to 36
  1086.       set style of field index to transparent
  1087.       put word 1 of field index into wordstor
  1088.       put wordstor into field index
  1089.     end repeat
  1090.   else
  1091.   end if
  1092. end mouseUp
  1093.  
  1094.  
  1095.  
  1096. -- part 58 (button)
  1097. -- low flags: 00
  1098. -- high flags: 0000
  1099. -- rect: left=446 top=7 right=19 bottom=512
  1100. -- title width / last selected line: 0
  1101. -- icon id / first selected line: 0 / 0
  1102. -- text alignment: 1
  1103. -- font id: 0
  1104. -- text size: 12
  1105. -- style flags: 0
  1106. -- line height: 16
  1107. -- part name: HELP
  1108. ----- HyperTalk script -----
  1109. on mouseUp
  1110.   push card
  1111.   go to first card of stack "Scheduler Help"
  1112. end mouseUp
  1113.  
  1114.  
  1115.  
  1116.  
  1117. -- part 60 (button)
  1118. -- low flags: 00
  1119. -- high flags: 0000
  1120. -- rect: left=78 top=0 right=15 bottom=138
  1121. -- title width / last selected line: 0
  1122. -- icon id / first selected line: 0 / 0
  1123. -- text alignment: 1
  1124. -- font id: 0
  1125. -- text size: 12
  1126. -- style flags: 0
  1127. -- line height: 16
  1128. -- part name: Requests ON
  1129. ----- HyperTalk script -----
  1130. on mouseUp
  1131.   push card
  1132.   closebackground
  1133.   go to bkgnd "Requests On"
  1134. end mouseUp
  1135.  
  1136.  
  1137.  
  1138.  
  1139. -- part 61 (button)
  1140. -- low flags: 00
  1141. -- high flags: 0000
  1142. -- rect: left=219 top=0 right=12 bottom=304
  1143. -- title width / last selected line: 0
  1144. -- icon id / first selected line: 0 / 0
  1145. -- text alignment: 1
  1146. -- font id: 0
  1147. -- text size: 12
  1148. -- style flags: 0
  1149. -- line height: 16
  1150. -- part name: Schedule on
  1151. ----- HyperTalk script -----
  1152. on mouseUp
  1153.   global storage
  1154.   global firstofmonth
  1155.   global lastofmonth, ShiftLoopCount,storage, index
  1156.   set cursor to 4 -- change cursor to the watch icon
  1157.  
  1158.   Ask "How Many Shifts of type 'A' per Day" with "3"
  1159.   put it into TypeANum
  1160.   put it & " " into ShiftLoopCount
  1161.   Ask "How Many Shifts of Type 'B' per Day" with "1"
  1162.   put it into TypeBNum
  1163.   put it & " " after shiftLoopCount
  1164.   Ask "How Many Shifts of Type 'C' per Day" with "4"
  1165.   put it into TypeCNum
  1166.   put it & " " after shiftLoopCount
  1167.   Ask "How Many Shifts of Type 'D' per Day" with "2"
  1168.   put it into TypeDNum
  1169.   put it & " " after shiftLoopCount
  1170.  
  1171.   set lockscreen to true
  1172.   hide menubar
  1173.   hide message
  1174.   -- don't wast time updating the screen
  1175.  
  1176.   set visible of background field "backfield" to false
  1177.   put "" into field backfield -- clear this field
  1178.  
  1179.   -- I'm going to import data to this
  1180.   -- field (38) so I don't have to keep
  1181.   -- going back and forth to stacks while figuring
  1182.  
  1183.   put id of last card of bkgnd "Requests On" into lastid -- for later checking
  1184.  
  1185.   put "False" into LastCardTest -- first set the Boolean to false
  1186.   put 0 into cardnum -- initialize for the first card
  1187.   repeat until (LastCardTest = "True")--continue until the last card
  1188.     push card--push calendar card on to stack
  1189.     closebackground -- take care of the menus etc...
  1190.     put cardnum + 1 into cardnum -- increment this for each loop
  1191.     Put "Looking at Card " & Cardnum & " Now"
  1192.     go to card cardnum of bkgnd "requests on"
  1193.     get id of card
  1194.     if it = lastid then put "True" into LastCardTest--if so... Stop
  1195.     put field "data" into storage
  1196.     closebackground
  1197.     pop card
  1198.     put storage into line cardnum of field backfield
  1199.   end repeat
  1200.   put "Setting up the Calendar"
  1201.   SetUpCalendar-- find field for first & last of month & label the days
  1202.   Hide message
  1203.   if length of line 5 of field 15 < 2 then -- if it's not been labeled
  1204.     LabelDays-- put Mon, Tues,... the short date, on line five @each field
  1205.   end if
  1206.   Set lockscreen to False
  1207.   PlaceinSchedule
  1208. end mouseup
  1209.  
  1210. on PlaceinSchedule
  1211.   set cursor to 4
  1212.   global firstofmonth, lastofmonth, shiftLoopCount,maxpeople, answer,shift
  1213.   global index
  1214.   put word 2 of line 2 of field year into shiftnum
  1215.   put "A B C D" into Shifts
  1216.   put the number of lines in field 38 into employeenum
  1217.   repeat with shift = 1 to shiftnum
  1218.     put word shift of shifts into testshift
  1219.     put word shift of shiftloopcount into maxpeople
  1220.     repeat with employee = 1 to employeenum
  1221.       if line employee of field 38 contains testshift then
  1222.         repeat with index = firstofmonth to lastofmonth
  1223.           if line employee of field 38 contains " " & word 1 of field index & testshift then
  1224.             MaxPeopleTest
  1225.             set cursor to 4 -- reset it
  1226.             if answer = "Yes" then
  1227.               put " " &  word 1 of line employee of field 38 after line shift of field index
  1228.             end if
  1229.           end if
  1230.  
  1231.         end repeat
  1232.       end if
  1233.     end repeat
  1234.   end repeat
  1235. end PlaceinSchedule
  1236.  
  1237. On MaxPeopleTest
  1238.   global shift, maxpeople, index, Answer
  1239.   put the number of words in line shift of field index into currentnum
  1240.   if shift = 1 then
  1241.     put currentnum - 1 into currentnum -- don't count the date
  1242.   end if
  1243.   set style of field index to shadow
  1244.   set style of field index to transparent -- some feedback indicating were working
  1245.   if currentNum = maxpeople then
  1246.     put "No" into Answer
  1247.   else
  1248.     put "Yes" into Answer
  1249.   end if
  1250. end MaxPeopleTest
  1251.  
  1252.  
  1253.  
  1254. -- part 62 (button)
  1255. -- low flags: 00
  1256. -- high flags: 0000
  1257. -- rect: left=41 top=2 right=16 bottom=76
  1258. -- title width / last selected line: 0
  1259. -- icon id / first selected line: 0 / 0
  1260. -- text alignment: 1
  1261. -- font id: 0
  1262. -- text size: 12
  1263. -- style flags: 0
  1264. -- line height: 16
  1265. -- part name: talley
  1266. ----- HyperTalk script -----
  1267. on mouseUp
  1268.   global themonth
  1269.   get name of this card
  1270.   put it into themonth
  1271.   push card
  1272.   visual barn door open
  1273.   go to background "Talley"
  1274. end mouseUp
  1275.  
  1276.  
  1277.  
  1278.  
  1279. -- part 65 (button)
  1280. -- low flags: 00
  1281. -- high flags: 0000
  1282. -- rect: left=393 top=0 right=12 bottom=512
  1283. -- title width / last selected line: 0
  1284. -- icon id / first selected line: 0 / 0
  1285. -- text alignment: 1
  1286. -- font id: 0
  1287. -- text size: 12
  1288. -- style flags: 0
  1289. -- line height: 16
  1290. -- part name: Show Current Month
  1291. ----- HyperTalk script -----
  1292. on mouseUp
  1293.   get the seconds
  1294.   convert it to long date
  1295.   put word 2 of it into month
  1296.   put word 4 of it into year
  1297.   put month&year into thismonth
  1298.   visual effect checkerboard
  1299.   go to card thismonth of stack "scheduler"
  1300.  
  1301.  
  1302. end mouseUp
  1303.  
  1304.  
  1305.  
  1306. -- part 67 (button)
  1307. -- low flags: 00
  1308. -- high flags: 8002
  1309. -- rect: left=0 top=2 right=20 bottom=512
  1310. -- title width / last selected line: 0
  1311. -- icon id / first selected line: 0 / 0
  1312. -- text alignment: 1
  1313. -- font id: 0
  1314. -- text size: 12
  1315. -- style flags: 0
  1316. -- line height: 16
  1317. -- part name: Show Menus
  1318. ----- HyperTalk script -----
  1319. on mouseUp
  1320.   show menubar
  1321.   hide message
  1322. end mouseUp
  1323.  
  1324.  
  1325.  
  1326. -- part 68 (button)
  1327. -- low flags: 00
  1328. -- high flags: 0000
  1329. -- rect: left=397 top=42 right=71 bottom=433
  1330. -- title width / last selected line: 0
  1331. -- icon id / first selected line: 22308 / 22308
  1332. -- text alignment: 1
  1333. -- font id: 0
  1334. -- text size: 12
  1335. -- style flags: 0
  1336. -- line height: 16
  1337. -- part name: Next Card
  1338. ----- HyperTalk script -----
  1339. on mouseUp
  1340.   get id of card
  1341.   put id of last card of background "SCHEDULER" into lastcard
  1342.   if it = lastcard then
  1343.     go to first card of background "SCHEDULER"
  1344.   else
  1345.     visual effect wipe right
  1346.     go to next card of bkgnd "SCHEDULER"
  1347.   end if
  1348. end mouseUp
  1349.  
  1350.  
  1351.  
  1352. -- part 69 (button)
  1353. -- low flags: 00
  1354. -- high flags: 0000
  1355. -- rect: left=72 top=42 right=72 bottom=107
  1356. -- title width / last selected line: 0
  1357. -- icon id / first selected line: 19381 / 19381
  1358. -- text alignment: 1
  1359. -- font id: 0
  1360. -- text size: 12
  1361. -- style flags: 0
  1362. -- line height: 16
  1363. -- part name: Prior Card
  1364. ----- HyperTalk script -----
  1365. on mouseUp
  1366.   get id of card
  1367.   put id of first card of background "SCHEDULER" into firstcard
  1368.   if it = firstcard then
  1369.     visual effect wipe left
  1370.     go to last card of background "SCHEDULER"
  1371.   else
  1372.  
  1373.     visual effect wipe left
  1374.     go to previous card of bkgnd "SCHEDULER"
  1375.   end if
  1376. end mouseUp
  1377.  
  1378.  
  1379.  
  1380. -- part 71 (button)
  1381. -- low flags: 00
  1382. -- high flags: 8000
  1383. -- rect: left=437 top=34 right=80 bottom=496
  1384. -- title width / last selected line: 0
  1385. -- icon id / first selected line: 25002 / 25002
  1386. -- text alignment: 1
  1387. -- font id: 0
  1388. -- text size: 12
  1389. -- style flags: 0
  1390. -- line height: 16
  1391. -- part name: Help Me!
  1392. ----- HyperTalk script -----
  1393. on mouseUp
  1394.   visual effect dissolve fast
  1395.   go to bkgnd "Quick Help"
  1396. end mouseUp
  1397.  
  1398.