bbmb 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. data/History.txt +5 -0
  2. data/LICENSE.txt +339 -0
  3. data/Manifest.txt +91 -0
  4. data/README.txt +25 -0
  5. data/Rakefile +28 -0
  6. data/bin/admin +71 -0
  7. data/bin/bbmbd +61 -0
  8. data/lib/bbmb.rb +9 -0
  9. data/lib/bbmb/config.rb +106 -0
  10. data/lib/bbmb/html/state/change_password.rb +50 -0
  11. data/lib/bbmb/html/state/current_order.rb +81 -0
  12. data/lib/bbmb/html/state/customer.rb +109 -0
  13. data/lib/bbmb/html/state/customers.rb +52 -0
  14. data/lib/bbmb/html/state/favorites.rb +19 -0
  15. data/lib/bbmb/html/state/favorites_result.rb +21 -0
  16. data/lib/bbmb/html/state/global.rb +62 -0
  17. data/lib/bbmb/html/state/history.rb +95 -0
  18. data/lib/bbmb/html/state/info.rb +23 -0
  19. data/lib/bbmb/html/state/json.rb +16 -0
  20. data/lib/bbmb/html/state/login.rb +76 -0
  21. data/lib/bbmb/html/state/order.rb +21 -0
  22. data/lib/bbmb/html/state/orders.rb +19 -0
  23. data/lib/bbmb/html/state/result.rb +64 -0
  24. data/lib/bbmb/html/state/show_pass.rb +16 -0
  25. data/lib/bbmb/html/state/viral/admin.rb +41 -0
  26. data/lib/bbmb/html/state/viral/customer.rb +143 -0
  27. data/lib/bbmb/html/util/known_user.rb +51 -0
  28. data/lib/bbmb/html/util/multilingual.rb +18 -0
  29. data/lib/bbmb/html/util/session.rb +52 -0
  30. data/lib/bbmb/html/util/validator.rb +55 -0
  31. data/lib/bbmb/html/view/backorder.rb +24 -0
  32. data/lib/bbmb/html/view/change_password.rb +42 -0
  33. data/lib/bbmb/html/view/copyleft.rb +41 -0
  34. data/lib/bbmb/html/view/current_order.rb +482 -0
  35. data/lib/bbmb/html/view/customer.rb +152 -0
  36. data/lib/bbmb/html/view/customers.rb +145 -0
  37. data/lib/bbmb/html/view/favorites.rb +162 -0
  38. data/lib/bbmb/html/view/favorites_result.rb +26 -0
  39. data/lib/bbmb/html/view/foot.rb +21 -0
  40. data/lib/bbmb/html/view/head.rb +32 -0
  41. data/lib/bbmb/html/view/history.rb +60 -0
  42. data/lib/bbmb/html/view/info.rb +33 -0
  43. data/lib/bbmb/html/view/json.rb +20 -0
  44. data/lib/bbmb/html/view/list_prices.rb +51 -0
  45. data/lib/bbmb/html/view/login.rb +46 -0
  46. data/lib/bbmb/html/view/multilingual.rb +17 -0
  47. data/lib/bbmb/html/view/navigation.rb +30 -0
  48. data/lib/bbmb/html/view/order.rb +123 -0
  49. data/lib/bbmb/html/view/orders.rb +50 -0
  50. data/lib/bbmb/html/view/result.rb +107 -0
  51. data/lib/bbmb/html/view/search.rb +28 -0
  52. data/lib/bbmb/html/view/show_pass.rb +60 -0
  53. data/lib/bbmb/html/view/template.rb +61 -0
  54. data/lib/bbmb/model/customer.rb +96 -0
  55. data/lib/bbmb/model/order.rb +255 -0
  56. data/lib/bbmb/model/product.rb +99 -0
  57. data/lib/bbmb/model/promotion.rb +52 -0
  58. data/lib/bbmb/model/quota.rb +27 -0
  59. data/lib/bbmb/model/subject.rb +46 -0
  60. data/lib/bbmb/persistence/none.rb +6 -0
  61. data/lib/bbmb/persistence/odba.rb +42 -0
  62. data/lib/bbmb/persistence/odba/model/customer.rb +47 -0
  63. data/lib/bbmb/persistence/odba/model/order.rb +50 -0
  64. data/lib/bbmb/persistence/odba/model/product.rb +26 -0
  65. data/lib/bbmb/persistence/odba/model/quota.rb +12 -0
  66. data/lib/bbmb/util/invoicer.rb +126 -0
  67. data/lib/bbmb/util/mail.rb +140 -0
  68. data/lib/bbmb/util/multilingual.rb +57 -0
  69. data/lib/bbmb/util/numbers.rb +67 -0
  70. data/lib/bbmb/util/password_generator.rb +44 -0
  71. data/lib/bbmb/util/polling_manager.rb +135 -0
  72. data/lib/bbmb/util/server.rb +159 -0
  73. data/lib/bbmb/util/target_dir.rb +36 -0
  74. data/lib/bbmb/util/transfer_dat.rb +34 -0
  75. data/lib/bbmb/util/updater.rb +27 -0
  76. data/test/data/ydim.yml +2 -0
  77. data/test/model/test_customer.rb +75 -0
  78. data/test/model/test_order.rb +426 -0
  79. data/test/model/test_product.rb +238 -0
  80. data/test/model/test_promotion.rb +40 -0
  81. data/test/stub/persistence.rb +57 -0
  82. data/test/suite.rb +12 -0
  83. data/test/test_bbmb.rb +18 -0
  84. data/test/util/test_invoicer.rb +189 -0
  85. data/test/util/test_mail.rb +359 -0
  86. data/test/util/test_money.rb +71 -0
  87. data/test/util/test_password_generator.rb +27 -0
  88. data/test/util/test_polling_manager.rb +312 -0
  89. data/test/util/test_server.rb +189 -0
  90. data/test/util/test_target_dir.rb +82 -0
  91. data/test/util/test_transfer_dat.rb +45 -0
  92. metadata +190 -0
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::View::CopyLeft -- bbmb.ch -- 15.09.2006 -- hwyss@ywesee.com
3
+
4
+ require 'htmlgrid/divcomposite'
5
+ require 'htmlgrid/link'
6
+
7
+ module BBMB
8
+ module Html
9
+ module View
10
+ class CopyLeft < HtmlGrid::DivComposite
11
+ def CopyLeft.external_link(key, url)
12
+ define_method(key) { |model|
13
+ link = HtmlGrid::Link.new(key, model, @session, self)
14
+ link.href = url
15
+ link
16
+ }
17
+ end
18
+ COMPONENTS = {
19
+ [0,0] => :lgpl,
20
+ [1,0] => ', ',
21
+ [2,0] => :current_year,
22
+ [3,0] => ' ',
23
+ [4,0] => :ywesee,
24
+ [5,0] => ' ',
25
+ [6,0] => :bbmb_version,
26
+ }
27
+ external_link :lgpl, 'http://www.gnu.org/copyleft/lesser.html'
28
+ external_link :ywesee, 'http://www.ywesee.com'
29
+ external_link :version, BBMB.config.scm_link
30
+ def current_year(model)
31
+ Time.now.year.to_s
32
+ end
33
+ def bbmb_version(model)
34
+ link = version(model)
35
+ link.set_attribute('title', VERSION)
36
+ link
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,482 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::View::CurrentOrder -- bbmb.ch -- 20.09.2006 -- hwyss@ywesee.com
3
+
4
+ require 'bbmb/html/view/backorder'
5
+ require 'bbmb/html/view/list_prices'
6
+ require 'bbmb/html/view/order'
7
+ require 'bbmb/html/view/search'
8
+ require 'bbmb/html/view/template'
9
+ require 'htmlgrid/divform'
10
+ require 'htmlgrid/dojotoolkit'
11
+ require 'htmlgrid/errormessage'
12
+ require 'htmlgrid/inputcheckbox'
13
+ require 'htmlgrid/inputfile'
14
+ require 'htmlgrid/inputradio'
15
+ require 'htmlgrid/inputtext'
16
+ require 'htmlgrid/javascript'
17
+ require 'htmlgrid/span'
18
+ require 'htmlgrid/spancomposite'
19
+ require 'htmlgrid/textarea'
20
+
21
+ module BBMB
22
+ module Html
23
+ module View
24
+ module ActiveX
25
+ def other_html_headers(context)
26
+ html = ''
27
+ if(@session.client_activex? && !@lookandfeel.disabled?(:barcode_reader))
28
+ cab = 'BbmbBarcodeReader.CAB#version=1,3,0,0'
29
+ cid = "CLSID:1311F1ED-198B-11D6-8FF9-000103484A9A"
30
+ if(@session.client_nt5?)
31
+ cab = 'BbmbBarcodeReader2.CAB#version=2,1,0,0'
32
+ end
33
+ props = {
34
+ "id" => "BCReader",
35
+ "classid" => cid,
36
+ "codebase"=> @lookandfeel.resource_global(:activex, cab),
37
+ }
38
+ html << context.object(props)
39
+ end
40
+ html << super
41
+ end
42
+ end
43
+ module UnavailableMethods
44
+ def unavailables(model)
45
+ unavailable = model.unavailable
46
+ unless unavailable.empty?
47
+ Unavailables.new(unavailable, @session, self)
48
+ end
49
+ end
50
+ end
51
+ class BarcodeReader < HtmlGrid::SpanComposite
52
+ include HtmlGrid::FormMethods
53
+ COMPONENTS = {
54
+ [0,0] => :barcode_usb,
55
+ [1,0] => :barcode_reader,
56
+ [2,0] => :barcode_comport,
57
+ }
58
+ EVENT = 'scan'
59
+ FORM_ID = 'bcread'
60
+ FORM_NAME = 'bcread'
61
+ def barcode_usb(model)
62
+ if(!@session.client_nt5?)
63
+ link = HtmlGrid::Link.new(:barcode_usb, model, @session, self)
64
+ link.href = "http://www.ionetworks.com/support/epdrivers.jsp#E95"
65
+ link.target = "_blank"
66
+ link
67
+ end
68
+ end
69
+ def barcode_reader(model)
70
+ button = HtmlGrid::Button.new(:barcode_button, model, @session, self)
71
+ args = [
72
+ @lookandfeel.lookup(:barcode_none),
73
+ @lookandfeel.lookup(:barcode_empty),
74
+ ]
75
+ com = 'this.form.barcode_comport'
76
+ argstr = args.join("', '")
77
+ button.set_attribute('onclick', "bc_read(#{com}, '#{argstr}')")
78
+ button
79
+ end
80
+ def barcode_comport(model)
81
+ input = HtmlGrid::Input.new(:barcode_comport, model, @session, self)
82
+ input.set_attribute('type', 'hidden')
83
+ val = @session.get_cookie_input(:comport)
84
+ if(!/[0-9]+/.match(val))
85
+ val = "-1"
86
+ end
87
+ input.value = val
88
+ input
89
+ end
90
+ end
91
+ class ClearOrder < HtmlGrid::SpanComposite
92
+ include HtmlGrid::FormMethods
93
+ FORM_ID = 'clear'
94
+ EVENT = :clear_order
95
+ COMPONENTS = {
96
+ [0,0] => :clear,
97
+ }
98
+ def clear(model)
99
+ button = HtmlGrid::Button.new(event, model, @session, self)
100
+ condition = "if(confirm('#{@lookandfeel.lookup(event.to_s << "_confirm")}'))"
101
+ condition << "this.form.submit();"
102
+ button.set_attribute('onclick', condition)
103
+ button
104
+ end
105
+ end
106
+ class CurrentAdditionalInformation < HtmlGrid::Composite
107
+ COMPONENTS = {
108
+ [0,0] => :reference,
109
+ [0,2] => :comment,
110
+ }
111
+ LABELS = true
112
+ VERTICAL = true
113
+ def comment(model)
114
+ input = HtmlGrid::Textarea.new(:comment, model, @session, self)
115
+ input.set_attribute('onKeyUp',
116
+ 'if(this.value.length > 60) this.value=this.value.substring(0,60);')
117
+ input.value = model.comment
118
+ input.label = true
119
+ url = @lookandfeel._event_url(:ajax)
120
+ input.set_attribute('onchange', "update_order('#{url}', this.form)")
121
+ input.set_attribute('id', :comment)
122
+ input
123
+ end
124
+ def reference(model)
125
+ _input_value(:reference, model)
126
+ end
127
+ def _input_value(key, model)
128
+ input = HtmlGrid::InputText.new(key, model, @session, self)
129
+ url = @lookandfeel._event_url(:ajax)
130
+ input.set_attribute('onchange', "update_order('#{url}', this.form)")
131
+ input.set_attribute('id', key)
132
+ input
133
+ end
134
+ end
135
+ class CurrentPriorities < HtmlGrid::Composite
136
+ COMPONENTS = {
137
+ [0,0] => :priority,
138
+ [0,1,0] => :priority_0,
139
+ [0,1,1] => 'priority_0',
140
+ [0,2,0] => :priority_1,
141
+ [0,2,1] => 'priority_1',
142
+ [1,2] => 'priority_explain_1',
143
+ [0,3,0] => :priority_13,
144
+ [0,3,1] => 'priority_13',
145
+ [1,3] => 'priority_explain_13',
146
+ [0,4,0] => :priority_16,
147
+ [0,4,1] => 'priority_16',
148
+ [1,4] => 'priority_explain_16',
149
+ [0,5,0] => :priority_21,
150
+ [0,5,1] => 'priority_21',
151
+ [1,5] => 'priority_explain_21',
152
+ [0,6,0] => :priority_40,
153
+ [0,6,1] => 'priority_40',
154
+ [1,6] => 'priority_explain_40',
155
+ [0,7,0] => :priority_41,
156
+ [0,7,1] => 'priority_41',
157
+ [1,7] => 'priority_explain_41',
158
+ }
159
+ SYMBOL_MAP = {
160
+ :priority => HtmlGrid::LabelText,
161
+ }
162
+ def priority_input(model, num)
163
+ radio = HtmlGrid::InputRadio.new(:priority,
164
+ model, @session, self)
165
+ num = num.to_i
166
+ radio.value = num
167
+ radio.label = false
168
+ test = model.priority || @session.user_input(:priority)
169
+ if(test == num)
170
+ radio.set_attribute('checked', true)
171
+ end
172
+ url = @lookandfeel._event_url(:ajax)
173
+ script = "update_order('#{url}', this.form)"
174
+ radio.set_attribute('onclick', script)
175
+ radio
176
+ end
177
+ def priority_0(model)
178
+ priority_input(model, '')
179
+ end
180
+ def priority_1(model)
181
+ priority_input(model, 1)
182
+ end
183
+ def priority_13(model)
184
+ priority_input(model, 13)
185
+ end
186
+ def priority_16(model)
187
+ priority_input(model, 16)
188
+ end
189
+ def priority_21(model)
190
+ priority_input(model, 21)
191
+ end
192
+ def priority_40(model)
193
+ priority_input(model, 40)
194
+ end
195
+ def priority_41(model)
196
+ priority_input(model, 41)
197
+ end
198
+ end
199
+ class CurrentToggleable < HtmlGrid::Composite
200
+ COMPONENTS = {
201
+ [0,0] => CurrentAdditionalInformation,
202
+ [1,0] => CurrentPriorities,
203
+ }
204
+ end
205
+ class TransferDat < HtmlGrid::SpanComposite
206
+ include HtmlGrid::FormMethods
207
+ COMPONENTS = {
208
+ [0,0] => :file_chooser,
209
+ [1,0] => :submit,
210
+ }
211
+ EVENT = :transfer
212
+ FORM_ID = 'transfer-dat'
213
+ FORM_NAME = 'transfer_dat'
214
+ SYMBOL_MAP = {
215
+ :file_chooser => HtmlGrid::InputFile,
216
+ }
217
+ TAG_METHOD = :multipart_form
218
+ def initialize(event, *args)
219
+ @event = event
220
+ super(*args)
221
+ end
222
+ def event
223
+ @event || super
224
+ end
225
+ end
226
+ class CurrentPositions < HtmlGrid::List
227
+ include Backorder
228
+ include ListPrices
229
+ include PositionMethods
230
+ CSS_CLASS = 'list'
231
+ if BBMB.config.enable_price_levels
232
+ COMPONENTS = {
233
+ [0,0] => :delete_position,
234
+ [1,0] => :quantity,
235
+ [2,0] => :description,
236
+ [3,0] => :backorder,
237
+ [4,0] => :price_base,
238
+ [5,0] => :price_levels,
239
+ [6,0] => :price2,
240
+ [7,0] => :price3,
241
+ [5,1] => :price4,
242
+ [6,1] => :price5,
243
+ [7,1] => :price6,
244
+ [8,0] => :total,
245
+ }
246
+ CSS_MAP = {
247
+ [0,0] => 'delete',
248
+ [1,0] => 'tiny right',
249
+ [2,0] => 'description',
250
+ [4,0,4,2] => 'right',
251
+ [8,0] => 'total',
252
+ }
253
+ CSS_HEAD_MAP = {
254
+ [1,0] => 'right',
255
+ [4,0] => 'right',
256
+ [5,0] => 'right',
257
+ [8,0] => 'right',
258
+ }
259
+ else
260
+ COMPONENTS = {
261
+ [0,0] => :delete_position,
262
+ [1,0] => :quantity,
263
+ [2,0] => :description,
264
+ [3,0] => :backorder,
265
+ [4,0] => :price_base,
266
+ [5,0] => :total,
267
+ }
268
+ CSS_MAP = {
269
+ [0,0] => 'delete',
270
+ [1,0] => 'tiny right',
271
+ [2,0] => 'description',
272
+ [4,0] => 'right',
273
+ [5,0] => 'total',
274
+ }
275
+ CSS_HEAD_MAP = {
276
+ [1,0] => 'right',
277
+ [4,0] => 'right',
278
+ [5,0] => 'right',
279
+ }
280
+ end
281
+ SORT_DEFAULT = :description
282
+ def delete_position(model)
283
+ super(model, :order_product)
284
+ end
285
+ def description(model)
286
+ position_modifier(model, :description, :search)
287
+ end
288
+ end
289
+ class TermsOfService < HtmlGrid::Composite
290
+ COMPONENTS = {
291
+ [0,0] => :accept_terms,
292
+ [1,0] => "terms_of_service",
293
+ }
294
+ SYMBOL_MAP = {
295
+ :accept_terms => HtmlGrid::InputCheckbox,
296
+ }
297
+ def accept_terms(model)
298
+ model = @session.state._customer
299
+ check = HtmlGrid::InputCheckbox.new(:accept_terms, model, @session, self)
300
+ check.attributes['checked'] = !model.terms_last_accepted.nil?
301
+ check
302
+ end
303
+ end
304
+ class OrderConfirmation < HtmlGrid::Composite
305
+ COMPONENTS = {
306
+ [0,0] => :order_confirmation,
307
+ [1,0] => "order_confirmation_text",
308
+ }
309
+ SYMBOL_MAP = {
310
+ :order_confirmation => HtmlGrid::InputCheckbox,
311
+ }
312
+ end
313
+ class CurrentOrderForm < HtmlGrid::DivForm
314
+ include HtmlGrid::ErrorMessage
315
+ COMPONENTS = {
316
+ [0,0] => :toggle,
317
+ [0,1] => CurrentToggleable,
318
+ [0,2] => :order_total,
319
+ [1,2] => :total,
320
+ }
321
+ CSS_ID_MAP = { 1 => 'info', 2 => 'order-total' }
322
+ EVENT = :commit
323
+ FORM_ID = 'additional_info'
324
+ SORT_DEFAULT = :description
325
+ SYMBOL_MAP = {
326
+ :order_total => HtmlGrid::LabelText,
327
+ }
328
+ def init
329
+ submit = 3
330
+ if @lookandfeel.enabled?(:terms_of_service, false)
331
+ components.update [0,submit] => :toggle_terms,
332
+ [0,submit + 1] => TermsOfService
333
+ css_id_map.update submit + 1 => 'terms-of-service'
334
+ submit += 2
335
+ end
336
+ if BBMB.config.mail_confirm_reply_to && !@model.empty?
337
+ components.store [0,submit], :order_confirmation
338
+ css_id_map.update submit => 'order-confirmation'
339
+ submit += 1
340
+ end
341
+ components.store [0,submit], :submit
342
+ super
343
+ error_message
344
+ end
345
+ def order_confirmation(model)
346
+ OrderConfirmation.new(@session.state._customer, @session, self)
347
+ end
348
+ def toggle(model)
349
+ ms_open = "&nbsp;+&nbsp;#{@lookandfeel.lookup(:additional_info)}"
350
+ ms_close = "&nbsp;&minus;&nbsp;#{@lookandfeel.lookup(:additional_info)}"
351
+ attrs = {
352
+ 'css_class' => 'toggler',
353
+ 'message_open' => ms_open,
354
+ 'message_close' => ms_close,
355
+ 'status' => toggle_status(model),
356
+ 'togglee' => 'info',
357
+ }
358
+ dojo_tag('contenttoggler', attrs)
359
+ end
360
+ def toggle_status(model)
361
+ model.additional_info.empty? ? 'closed' : 'open'
362
+ end
363
+ def toggle_terms(model)
364
+ ms_open = "&nbsp;+&nbsp;#{@lookandfeel.lookup(:terms)}"
365
+ ms_close = "&nbsp;&minus;&nbsp;#{@lookandfeel.lookup(:terms)}"
366
+ attrs = {
367
+ 'css_class' => 'toggler',
368
+ 'message_open' => ms_open,
369
+ 'message_close' => ms_close,
370
+ 'status' => toggle_terms_status,
371
+ 'togglee' => 'terms-of-service',
372
+ }
373
+ dojo_tag('contenttoggler', attrs)
374
+ end
375
+ def toggle_terms_status
376
+ @session.state._customer.terms_last_accepted ? 'closed' : 'open'
377
+ end
378
+ def total(model)
379
+ span = HtmlGrid::Span.new(model, @session, self)
380
+ span.css_id = 'total'
381
+ span.value = model.total
382
+ span
383
+ end
384
+ def submit(model)
385
+ super unless(model.empty?)
386
+ end
387
+ end
388
+ class Unavailables < HtmlGrid::List
389
+ BACKGROUND_ROW = 'bg'
390
+ BACKGROUND_SUFFIX = ''
391
+ CSS_CLASS = 'list'
392
+ COMPONENTS = {
393
+ [0,0] => :delete_position,
394
+ [1,0] => :quantity,
395
+ [2,0] => :description,
396
+ }
397
+ CSS_MAP = {
398
+ [0,0] => 'delete',
399
+ [1,0] => 'tiny right',
400
+ [2,0] => 'description',
401
+ [3,0] => 'right',
402
+ }
403
+ SORT_DEFAULT = nil
404
+ OMIT_HEADER = true
405
+ def delete_position(model)
406
+ link = HtmlGrid::Link.new(:delete, model, @session, self)
407
+ url = @lookandfeel.base_url
408
+ id = @list_index
409
+ event = 'delete_unavailable'
410
+ link.href = "javascript:delete_position('#{url}', '#{event}', '#{id}');"
411
+ link
412
+ end
413
+ def description(model)
414
+ span = HtmlGrid::Span.new(model, @session, self)
415
+ parts = [model.description].compact
416
+ [:ean13, :pcode].each { |key|
417
+ if(value = model.send(key))
418
+ parts.push(sprintf("%s: %s", @lookandfeel.lookup(key), value))
419
+ end
420
+ }
421
+ span.value = @lookandfeel.lookup(:unavailable, parts.join(', '))
422
+ span
423
+ end
424
+ end
425
+ class CurrentOrderComposite < HtmlGrid::DivComposite
426
+ include UnavailableMethods
427
+ COMPONENTS = {
428
+ [0,0] => Search,
429
+ [1,0] => :position_count,
430
+ [2,0] => :barcode_reader,
431
+ [3,0] => :order_transfer,
432
+ [4,0] => :clear_order,
433
+ [0,1] => CurrentPositions,
434
+ [0,2] => :unavailables,
435
+ }
436
+ CSS_ID_MAP = [ 'toolbar' ]
437
+ def init
438
+ if(!@model.empty? || @lookandfeel.enabled?(:additional_info_first))
439
+ components.store([1,2], CurrentOrderForm)
440
+ end
441
+ super
442
+ end
443
+ def barcode_reader(model)
444
+ if(@session.client_activex? && !@lookandfeel.disabled?(:barcode_reader))
445
+ BarcodeReader.new(model, @session, self)
446
+ end
447
+ end
448
+ def clear_order(model)
449
+ unless(model.empty?)
450
+ ClearOrder.new(model, @session, self)
451
+ end
452
+ end
453
+ def order_transfer(model)
454
+ unless(@lookandfeel.disabled?(:transfer_dat))
455
+ TransferDat.new(:order_transfer, model, @session, self)
456
+ end
457
+ end
458
+ def position_count(model)
459
+ span = HtmlGrid::Span.new(model, @session, self)
460
+ span.value = @lookandfeel.lookup(:positions, model.size)
461
+ span.css_class = 'guide'
462
+ span
463
+ end
464
+ end
465
+ class CurrentOrder < Template
466
+ include HtmlGrid::DojoToolkit::DojoTemplate
467
+ include ActiveX
468
+ CONTENT = CurrentOrderComposite
469
+ DOJO_DEBUG = BBMB.config.debug
470
+ DOJO_PREFIX = {
471
+ 'ywesee' => '../javascript',
472
+ }
473
+ DOJO_REQUIRE = [ 'dojo.widget.*', 'ywesee.widget.*',
474
+ 'ywesee.widget.ContentToggler' ] #, 'dojo.widget.Tooltip' ]
475
+ JAVASCRIPTS = [
476
+ "bcreader",
477
+ "order",
478
+ ]
479
+ end
480
+ end
481
+ end
482
+ end