00001 def new global shared var prog-started as log. 00002 def new global shared var u-name as char. 00003 00004 def shared var screen-title as char. 00005 00006 def shared var total-floor-no as int init 4. 00007 def shared var room-types as char extent 5. 00008 00009 def shared var res-state as char extent 4. 00010 def shared var res-state-ch as char extent 4. 00011 00012 def shared var res-state-placed as int init 1. 00013 def shared var res-state-canceled as int init 2. 00014 def shared var res-state-checked-in as int init 3. 00015 def shared var res-state-checked-out as int init 4. 00016 00017 prog-started = true. 00018 def var h-time as char. 00019 00020 form u-name view-as text 00021 screen-title view-as text 00022 h-time view-as text 00023 with frame f-main-header size 80 by 1 no-box no-underline no-labels at row 1 col 1. 00024 00025 00026 screen-title = "Guest Info Management". 00027 00028 def var selection as char init ?. 00029 00030 def buffer b-guest for guest. 00031 00032 def var g-id like guest.guest-id. 00033 def var g-f-n like guest.first-name. 00034 def var g-l-n like guest.last-name. 00035 def var g-dob like guest.date-of-birth. 00036 def var g-id-type like guest.id-type no-undo. 00037 def var g-id-# like guest.id-number no-undo. 00038 def var g-phone-# like guest.phone-number. 00039 def var g-street-1 like guest.street-1. 00040 def var g-street-2 like guest.street-2. 00041 def var g-city like guest.city. 00042 def var g-state like guest.state. 00043 def var g-zip like guest.zip. 00044 def var g-country like guest.country. 00045 00046 form g-id g-id-type view-as combo-box list-item-pairs "Passport","1","State ID","2","Driver's License","3","Unknown","4" format ">>>>>>>>>>>>>>>999" g-id-# format "x(15)" skip (2) 00047 g-f-n skip g-l-n skip 00048 g-dob g-phone-# skip(2) 00049 g-street-1 at row 9 col 15 colon-aligned 00050 g-street-2 at row 10 col 15 colon-aligned 00051 g-city at row 11 col 15 colon-aligned 00052 g-state at row 12 col 15 colon-aligned 00053 g-zip at row 13 col 15 colon-aligned 00054 g-country at row 14 col 15 colon-aligned 00055 with frame f-guest side-labels size 78 by 20 at row 2 col 1. 00056 00057 view frame f-guest. 00058 00059 procedure refresh. 00060 if not avail(guest) then do: 00061 clear frame f-guest all no-pause. 00062 return. 00063 end. 00064 00065 g-id = guest.guest-id. 00066 g-f-n = guest.first-name. 00067 g-l-n = guest.last-name. 00068 g-dob = guest.date-of-birth. 00069 g-id-type = guest.id-type. 00070 g-id-# = guest.id-number. 00071 g-phone-# = guest.phone-number. 00072 g-street-1 = guest.street-1. 00073 g-street-2 = guest.street-2. 00074 g-city = guest.city. 00075 g-state = guest.state. 00076 g-zip = guest.zip. 00077 g-country = guest.country. 00078 00079 display g-id g-f-n g-l-n g-dob g-id-type g-id-# g-phone-# 00080 g-street-1 g-street-2 g-city g-state g-zip g-country 00081 with frame f-guest. 00082 end. 00083 00084 define query q-guest for guest scrolling. 00085 open query q-guest for each guest use-index idx-g-id. 00086 get first q-guest. 00087 00088 run refresh. 00089 00090 PROC: 00091 repeat: 00092 if u-name = ? or u-name = "" then do: 00093 message "You are not logged in - access denied" view-as alert-box. 00094 quit. 00095 end. 00096 00097 h-time = string(now, "99/99/99 HH:MM:SS"). 00098 h-time = substring(h-time, 10). 00099 00100 do with frame f-main-header: 00101 u-name:column = 1. 00102 screen-title:column = u-name:column + length(u-name) + (frame f-main-header:width-chars - length(u-name) - length(screen-title) - length(h-time)) / 2. 00103 h-time:column = frame f-main-header:width-chars - length(h-time). 00104 screen-title:format = "x(" + string(length(screen-title)) + ")". 00105 end. 00106 00107 display u-name screen-title h-time with frame f-main-header. 00108 00109 00110 case selection: 00111 when "P" then do: 00112 get prev q-guest. 00113 if not avail guest then do: 00114 get first q-guest. 00115 end. 00116 00117 run refresh. 00118 end. 00119 when "N" then do: 00120 get next q-guest. 00121 if not avail guest then do: 00122 get last q-guest. 00123 end. 00124 00125 run refresh. 00126 end. 00127 when "F" then do: 00128 get first q-guest. 00129 00130 run refresh. 00131 end. 00132 when "L" then do: 00133 get last q-guest. 00134 00135 run refresh. 00136 end. 00137 when "I" then do: 00138 /* find by name, date of birth */ 00139 def button btn-ok label "Find". 00140 def button btn-cancel label "Cancel". 00141 00142 form g-f-n skip 00143 g-l-n skip 00144 g-dob skip 00145 btn-ok 00146 btn-cancel 00147 with frame f-guest-search side-labels overlay at row 2 col 1 title "Find Guest" 00148 cancel-button btn-cancel default-button btn-ok. 00149 00150 on "choose" of btn-cancel in frame f-guest-search do: 00151 apply "f4" to frame f-guest-search. 00152 end. 00153 on "choose" of btn-ok in frame f-guest-search do: 00154 apply "go" to frame f-guest-search. 00155 end. 00156 00157 G-SEARCH: 00158 repeat on endkey undo, leave: 00159 g-f-n = "". 00160 g-l-n = "". 00161 g-dob = ?. 00162 00163 update g-f-n g-l-n g-dob btn-ok btn-cancel with frame f-guest-search. 00164 00165 if g-f-n = "" and g-l-n = "" and g-dob = ? 00166 then do: 00167 message "Enter at least one search criteria!". 00168 next g-search. 00169 end. 00170 00171 find first b-guest 00172 where (if g-f-n = ? or g-f-n = "" then true else b-guest.first-name matches g-f-n + "*") and 00173 (if g-l-n = ? or g-l-n = "" then true else b-guest.last-name matches g-l-n + "*") and 00174 (if g-dob = ? then true else b-guest.date-of-birth = g-dob) use-index idx-g-id no-lock no-error. 00175 00176 if avail b-guest then do: 00177 reposition q-guest to rowid rowid(b-guest). 00178 get next q-guest. 00179 run refresh. 00180 end. 00181 else do: 00182 message "No matching record found.". 00183 next g-search. 00184 end. 00185 00186 leave. 00187 end. 00188 00189 hide frame f-guest-search no-pause. 00190 end. 00191 when "D" then do: 00192 if avail guest then do transaction: 00193 find b-guest where b-guest.guest-id = guest.guest-id exclusive-lock. 00194 delete b-guest. 00195 00196 get prev q-guest. 00197 end. 00198 00199 run refresh. 00200 end. 00201 when "A" then do: 00202 ADD-GUEST: 00203 do transaction on error undo, leave 00204 on endkey undo, leave: 00205 CREATE-GUEST: 00206 repeat: 00207 do on error undo, retry: 00208 find last b-guest use-index idx-g-id no-lock no-error. 00209 g-id = (if avail b-guest then b-guest.guest-id + 1 else 1). 00210 release b-guest. 00211 00212 create b-guest. 00213 assign b-guest.guest-id = g-id. 00214 leave CREATE-GUEST. 00215 end. 00216 end. 00217 00218 clear frame f-guest all. 00219 display g-id 00220 with frame f-guest. 00221 00222 g-f-n = "". 00223 g-l-n = "". 00224 g-dob = ?. 00225 g-id-type = ?. 00226 g-id-# = "". 00227 g-phone-# = "". 00228 g-street-1 = "". 00229 g-street-2 = "". 00230 g-city = "". 00231 g-state = "". 00232 g-zip = "". 00233 g-country = "". 00234 00235 U-GUEST: 00236 repeat on error undo add-guest, leave add-guest 00237 on endkey undo add-guest, leave add-guest: 00238 00239 display g-f-n g-l-n g-dob g-phone-# with frame f-guest. 00240 update g-id-type g-id-# with frame f-guest. 00241 00242 U-GUEST-1: 00243 repeat on endkey undo u-guest, retry u-guest: 00244 00245 display g-street-1 g-street-2 g-city g-state g-zip g-country with frame f-guest. 00246 update g-f-n g-l-n g-dob g-phone-# with frame f-guest. 00247 00248 U-GUEST-2: 00249 repeat on endkey undo u-guest-2, leave u-guest-2: 00250 update g-street-1 g-street-2 g-city g-state g-zip g-country with frame f-guest. 00251 00252 b-guest.id-type = g-id-type. 00253 b-guest.id-number = g-id-#. 00254 00255 b-guest.first-name = g-f-n. 00256 b-guest.last-name = g-l-n. 00257 b-guest.date-of-birth = g-dob. 00258 b-guest.phone-number = g-phone-#. 00259 00260 b-guest.street-1 = g-street-1. 00261 b-guest.street-2 = g-street-2. 00262 b-guest.city = g-city. 00263 b-guest.state = g-state. 00264 b-guest.zip = g-zip. 00265 b-guest.country = g-country. 00266 00267 leave u-guest. 00268 end. 00269 end. 00270 end. 00271 end. 00272 00273 find guest where guest.guest-id = g-id no-lock no-error. 00274 reposition q-guest to rowid rowid(guest). 00275 get next q-guest. 00276 run refresh. 00277 end. 00278 when "U" then do: 00279 if avail guest then 00280 U-GUEST: 00281 repeat transaction on error undo, leave 00282 on endkey undo, leave: 00283 00284 find b-guest where b-guest.guest-id = guest.guest-id exclusive-lock. 00285 g-id-type = b-guest.id-type. 00286 if g-id-type = ? then g-id-type = 1. 00287 00288 display g-f-n g-l-n g-dob g-phone-# with frame f-guest. 00289 update g-id-type g-id-# with frame f-guest. 00290 00291 U-GUEST-1: 00292 repeat on endkey undo u-guest, retry u-guest: 00293 00294 display g-street-1 g-street-2 g-city g-state g-zip g-country with frame f-guest. 00295 update g-f-n g-l-n g-dob g-phone-# with frame f-guest. 00296 00297 U-GUEST-2: 00298 repeat on endkey undo u-guest-2, leave u-guest-2: 00299 update g-street-1 g-street-2 g-city g-state g-zip g-country with frame f-guest. 00300 00301 b-guest.id-type = g-id-type. 00302 b-guest.id-number = g-id-#. 00303 00304 b-guest.first-name = g-f-n. 00305 b-guest.last-name = g-l-n. 00306 b-guest.date-of-birth = g-dob. 00307 b-guest.phone-number = g-phone-#. 00308 00309 b-guest.street-1 = g-street-1. 00310 b-guest.street-2 = g-street-2. 00311 b-guest.city = g-city. 00312 b-guest.state = g-state. 00313 b-guest.zip = g-zip. 00314 b-guest.country = g-country. 00315 00316 leave u-guest. 00317 end. 00318 end. 00319 end. 00320 00321 run refresh. 00322 end. 00323 when "R" then do: 00324 publish "pop-program". 00325 leave PROC. 00326 end. 00327 otherwise do: 00328 if selection <> ? then do: 00329 message "Invalid selection - try again". 00330 selection = ?. 00331 pause. 00332 next. 00333 end. 00334 end. 00335 end. 00336 00337 selection = "R". /* assume we are returning; otherwise the user entered something valid */ 00338 00339 CHOICE: 00340 repeat on endkey undo CHOICE, leave CHOICE: 00341 hide message no-pause. 00342 message "(P)rev (N)ext (F)irst (L)ast". 00343 message "F(i)nd (A)dd (U)pdate (D)elete (R)eturn" update selection format "x(1)" auto-return. 00344 00345 selection = caps(selection). 00346 leave. 00347 end. 00348 00349 end. 00350