bbmb 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/LICENSE.txt +339 -0
- data/Manifest.txt +91 -0
- data/README.txt +25 -0
- data/Rakefile +28 -0
- data/bin/admin +71 -0
- data/bin/bbmbd +61 -0
- data/lib/bbmb.rb +9 -0
- data/lib/bbmb/config.rb +106 -0
- data/lib/bbmb/html/state/change_password.rb +50 -0
- data/lib/bbmb/html/state/current_order.rb +81 -0
- data/lib/bbmb/html/state/customer.rb +109 -0
- data/lib/bbmb/html/state/customers.rb +52 -0
- data/lib/bbmb/html/state/favorites.rb +19 -0
- data/lib/bbmb/html/state/favorites_result.rb +21 -0
- data/lib/bbmb/html/state/global.rb +62 -0
- data/lib/bbmb/html/state/history.rb +95 -0
- data/lib/bbmb/html/state/info.rb +23 -0
- data/lib/bbmb/html/state/json.rb +16 -0
- data/lib/bbmb/html/state/login.rb +76 -0
- data/lib/bbmb/html/state/order.rb +21 -0
- data/lib/bbmb/html/state/orders.rb +19 -0
- data/lib/bbmb/html/state/result.rb +64 -0
- data/lib/bbmb/html/state/show_pass.rb +16 -0
- data/lib/bbmb/html/state/viral/admin.rb +41 -0
- data/lib/bbmb/html/state/viral/customer.rb +143 -0
- data/lib/bbmb/html/util/known_user.rb +51 -0
- data/lib/bbmb/html/util/multilingual.rb +18 -0
- data/lib/bbmb/html/util/session.rb +52 -0
- data/lib/bbmb/html/util/validator.rb +55 -0
- data/lib/bbmb/html/view/backorder.rb +24 -0
- data/lib/bbmb/html/view/change_password.rb +42 -0
- data/lib/bbmb/html/view/copyleft.rb +41 -0
- data/lib/bbmb/html/view/current_order.rb +482 -0
- data/lib/bbmb/html/view/customer.rb +152 -0
- data/lib/bbmb/html/view/customers.rb +145 -0
- data/lib/bbmb/html/view/favorites.rb +162 -0
- data/lib/bbmb/html/view/favorites_result.rb +26 -0
- data/lib/bbmb/html/view/foot.rb +21 -0
- data/lib/bbmb/html/view/head.rb +32 -0
- data/lib/bbmb/html/view/history.rb +60 -0
- data/lib/bbmb/html/view/info.rb +33 -0
- data/lib/bbmb/html/view/json.rb +20 -0
- data/lib/bbmb/html/view/list_prices.rb +51 -0
- data/lib/bbmb/html/view/login.rb +46 -0
- data/lib/bbmb/html/view/multilingual.rb +17 -0
- data/lib/bbmb/html/view/navigation.rb +30 -0
- data/lib/bbmb/html/view/order.rb +123 -0
- data/lib/bbmb/html/view/orders.rb +50 -0
- data/lib/bbmb/html/view/result.rb +107 -0
- data/lib/bbmb/html/view/search.rb +28 -0
- data/lib/bbmb/html/view/show_pass.rb +60 -0
- data/lib/bbmb/html/view/template.rb +61 -0
- data/lib/bbmb/model/customer.rb +96 -0
- data/lib/bbmb/model/order.rb +255 -0
- data/lib/bbmb/model/product.rb +99 -0
- data/lib/bbmb/model/promotion.rb +52 -0
- data/lib/bbmb/model/quota.rb +27 -0
- data/lib/bbmb/model/subject.rb +46 -0
- data/lib/bbmb/persistence/none.rb +6 -0
- data/lib/bbmb/persistence/odba.rb +42 -0
- data/lib/bbmb/persistence/odba/model/customer.rb +47 -0
- data/lib/bbmb/persistence/odba/model/order.rb +50 -0
- data/lib/bbmb/persistence/odba/model/product.rb +26 -0
- data/lib/bbmb/persistence/odba/model/quota.rb +12 -0
- data/lib/bbmb/util/invoicer.rb +126 -0
- data/lib/bbmb/util/mail.rb +140 -0
- data/lib/bbmb/util/multilingual.rb +57 -0
- data/lib/bbmb/util/numbers.rb +67 -0
- data/lib/bbmb/util/password_generator.rb +44 -0
- data/lib/bbmb/util/polling_manager.rb +135 -0
- data/lib/bbmb/util/server.rb +159 -0
- data/lib/bbmb/util/target_dir.rb +36 -0
- data/lib/bbmb/util/transfer_dat.rb +34 -0
- data/lib/bbmb/util/updater.rb +27 -0
- data/test/data/ydim.yml +2 -0
- data/test/model/test_customer.rb +75 -0
- data/test/model/test_order.rb +426 -0
- data/test/model/test_product.rb +238 -0
- data/test/model/test_promotion.rb +40 -0
- data/test/stub/persistence.rb +57 -0
- data/test/suite.rb +12 -0
- data/test/test_bbmb.rb +18 -0
- data/test/util/test_invoicer.rb +189 -0
- data/test/util/test_mail.rb +359 -0
- data/test/util/test_money.rb +71 -0
- data/test/util/test_password_generator.rb +27 -0
- data/test/util/test_polling_manager.rb +312 -0
- data/test/util/test_server.rb +189 -0
- data/test/util/test_target_dir.rb +82 -0
- data/test/util/test_transfer_dat.rb +45 -0
- metadata +190 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::Result -- bbmb.ch -- 21.09.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'bbmb/html/view/result'
|
5
|
+
|
6
|
+
module BBMB
|
7
|
+
module Html
|
8
|
+
module View
|
9
|
+
class FavoritesProducts < Products
|
10
|
+
EVENT = :favorite_product
|
11
|
+
FORM_NAME = 'products'
|
12
|
+
CSS_ID = 'favorites'
|
13
|
+
end
|
14
|
+
class FavoritesResultComposite < ResultComposite
|
15
|
+
COMPONENTS = {
|
16
|
+
[0,0] => Search,
|
17
|
+
[1,0] => :product_count,
|
18
|
+
[0,1] => FavoritesProducts,
|
19
|
+
}
|
20
|
+
end
|
21
|
+
class FavoritesResult < Template
|
22
|
+
CONTENT = FavoritesResultComposite
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::Foot -- bbmb.ch -- 15.09.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'bbmb/html/view/copyleft'
|
5
|
+
require 'bbmb/html/view/navigation'
|
6
|
+
require 'htmlgrid/divcomposite'
|
7
|
+
|
8
|
+
module BBMB
|
9
|
+
module Html
|
10
|
+
module View
|
11
|
+
class Foot < HtmlGrid::DivComposite
|
12
|
+
COMPONENTS = {
|
13
|
+
[0,0] => Navigation,
|
14
|
+
[0,1] => CopyLeft,
|
15
|
+
}
|
16
|
+
CSS_ID = 'head'
|
17
|
+
CSS_ID_MAP = ['navigation']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::Head -- bbmb.ch -- 15.09.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'htmlgrid/divcomposite'
|
5
|
+
require 'htmlgrid/image'
|
6
|
+
|
7
|
+
module BBMB
|
8
|
+
module Html
|
9
|
+
module View
|
10
|
+
class Head < HtmlGrid::DivComposite
|
11
|
+
COMPONENTS = {
|
12
|
+
[0,0] => :logo,
|
13
|
+
[0,2] => 'welcome',
|
14
|
+
[0,1] => :logged_in_as, # has float-right, needs to be before 'welcome'
|
15
|
+
}
|
16
|
+
CSS_ID_MAP = {2 => 'welcome', 1 => 'logged-in-as'}
|
17
|
+
def logged_in_as(model)
|
18
|
+
if(@session.logged_in?)
|
19
|
+
@lookandfeel.lookup(:logged_in_as, @session.user.name)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
def logo(model)
|
23
|
+
img = HtmlGrid::Image.new(:logo, model, @session, self)
|
24
|
+
link = HtmlGrid::Link.new(:home, model, @session, self)
|
25
|
+
link.href = @lookandfeel._event_url(:home)
|
26
|
+
link.value = img
|
27
|
+
link
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::History -- bbmb.ch -- 03.10.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'bbmb/html/view/multilingual'
|
5
|
+
require 'bbmb/html/view/template'
|
6
|
+
|
7
|
+
module BBMB
|
8
|
+
module Html
|
9
|
+
module View
|
10
|
+
class HistoryProducts < HtmlGrid::List
|
11
|
+
include Multilingual
|
12
|
+
BACKGROUND_ROW = 'bg'
|
13
|
+
BACKGROUND_SUFFIX = ''
|
14
|
+
COMPONENTS = {
|
15
|
+
[0,0] => :order_count,
|
16
|
+
[1,0] => :quantity,
|
17
|
+
[2,0] => :description,
|
18
|
+
[3,0] => :price,
|
19
|
+
[4,0] => :total,
|
20
|
+
}
|
21
|
+
CSS_CLASS = 'list'
|
22
|
+
CSS_MAP = {
|
23
|
+
[0,0,2]=> 'tiny right',
|
24
|
+
[2,0] => 'description',
|
25
|
+
[3,0] => 'right',
|
26
|
+
[4,0] => 'total',
|
27
|
+
}
|
28
|
+
CSS_HEAD_MAP = {
|
29
|
+
[0,0] => 'right',
|
30
|
+
[1,0] => 'right',
|
31
|
+
[3,0] => 'right',
|
32
|
+
[4,0] => 'right',
|
33
|
+
}
|
34
|
+
SORT_DEFAULT = :description
|
35
|
+
def price(model)
|
36
|
+
min, max = model.price_extremes
|
37
|
+
if(min == max)
|
38
|
+
min
|
39
|
+
else
|
40
|
+
@lookandfeel.lookup(:price_range, min, max)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
class HistoryComposite < HtmlGrid::DivComposite
|
45
|
+
COMPONENTS = {
|
46
|
+
[0,0] => HistoryProducts,
|
47
|
+
[0,1] => :turnover,
|
48
|
+
}
|
49
|
+
CSS_MAP = { 1 => 'right' }
|
50
|
+
CSS_ID_MAP = { 1 => 'order-total' }
|
51
|
+
def turnover(model)
|
52
|
+
@lookandfeel.lookup(:history_turnover, model.turnover)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
class History < Template
|
56
|
+
CONTENT = HistoryComposite
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::Info -- bbmb.ch -- 30.11.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'bbmb/html/view/template'
|
5
|
+
|
6
|
+
module BBMB
|
7
|
+
module Html
|
8
|
+
module View
|
9
|
+
class InfoComposite < HtmlGrid::DivComposite
|
10
|
+
COMPONENTS = {
|
11
|
+
[0,0] => ' ',
|
12
|
+
[0,1] => :message,
|
13
|
+
}
|
14
|
+
CSS_ID_MAP = ['divider']
|
15
|
+
CSS_MAP = {
|
16
|
+
1 => 'info',
|
17
|
+
}
|
18
|
+
def message(model)
|
19
|
+
@lookandfeel.lookup(model.message).gsub("\n", '<br>')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
class Info < Template
|
23
|
+
CONTENT = InfoComposite
|
24
|
+
def http_headers
|
25
|
+
headers = super
|
26
|
+
headers.store('Refresh',
|
27
|
+
"5; URL=#{@lookandfeel._event_url(@model.event)}")
|
28
|
+
headers
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::Json -- bbmb.ch -- 26.09.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'htmlgrid/component'
|
5
|
+
require 'json/objects'
|
6
|
+
|
7
|
+
module BBMB
|
8
|
+
module Html
|
9
|
+
module View
|
10
|
+
class Json < HtmlGrid::Component
|
11
|
+
HTTP_HEADERS = {
|
12
|
+
'Content-Type' => 'text/javascript; charset=UTF-8',
|
13
|
+
}
|
14
|
+
def to_html(context)
|
15
|
+
@model.to_json
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::ListPrices -- bbmb.ch -- 21.09.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
module BBMB
|
5
|
+
module Html
|
6
|
+
module View
|
7
|
+
module Vat
|
8
|
+
def vat(model)
|
9
|
+
if(vat = model.vat)
|
10
|
+
sprintf("%.1f%%", vat.to_f)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
module ListPrices
|
15
|
+
include Vat
|
16
|
+
BACKGROUND_ROW = 'bg'
|
17
|
+
BACKGROUND_SUFFIX = ''
|
18
|
+
HEAD_OFFSET_STEP = [0,1]
|
19
|
+
OFFSET_STEP = [0,2]
|
20
|
+
def pricex(model, pricex)
|
21
|
+
qval = model.qty_level(pricex)
|
22
|
+
pval = model.price_qty(qval)
|
23
|
+
if(qval.to_i > 0 && pval.to_f > 0)
|
24
|
+
@lookandfeel.lookup(:list_price, qval, pval)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
def price1(model)
|
28
|
+
pricex(model, 1)
|
29
|
+
end
|
30
|
+
def price2(model)
|
31
|
+
pricex(model, 2)
|
32
|
+
end
|
33
|
+
def price3(model)
|
34
|
+
pricex(model, 3)
|
35
|
+
end
|
36
|
+
def price4(model)
|
37
|
+
pricex(model, 4)
|
38
|
+
end
|
39
|
+
def price5(model)
|
40
|
+
pricex(model, 5)
|
41
|
+
end
|
42
|
+
def price6(model)
|
43
|
+
pricex(model, 6)
|
44
|
+
end
|
45
|
+
def price_levels(model)
|
46
|
+
price1(model)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::Login -- bbmb.ch -- 15.09.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'bbmb/html/view/template'
|
5
|
+
require 'htmlgrid/dojotoolkit'
|
6
|
+
require 'htmlgrid/errormessage'
|
7
|
+
require 'htmlgrid/form'
|
8
|
+
require 'htmlgrid/pass'
|
9
|
+
|
10
|
+
module BBMB
|
11
|
+
module Html
|
12
|
+
module View
|
13
|
+
class LoginForm < HtmlGrid::Form
|
14
|
+
COMPONENTS = {
|
15
|
+
[0,0] => :email,
|
16
|
+
[0,1] => :pass,
|
17
|
+
[1,2] => :submit,
|
18
|
+
[0,3] => :new_customer,
|
19
|
+
}
|
20
|
+
CSS_MAP = { [0,3,2] => 'new-customer' }
|
21
|
+
EVENT = :login
|
22
|
+
FORM_ID = 'login'
|
23
|
+
FORM_NAME = 'login'
|
24
|
+
LABELS = true
|
25
|
+
SYMBOL_MAP = {
|
26
|
+
:pass => HtmlGrid::Pass,
|
27
|
+
}
|
28
|
+
def new_customer(model)
|
29
|
+
link = HtmlGrid::Link.new(:new_customer, model, @session, self)
|
30
|
+
link.href = @lookandfeel.lookup(:new_customer_mail)
|
31
|
+
link.value = @lookandfeel.lookup(:new_customer_invite)
|
32
|
+
link.label = true
|
33
|
+
link
|
34
|
+
end
|
35
|
+
end
|
36
|
+
class LoginComposite < HtmlGrid::DivComposite
|
37
|
+
COMPONENTS = {
|
38
|
+
[0,0] => LoginForm,
|
39
|
+
}
|
40
|
+
end
|
41
|
+
class Login < Template
|
42
|
+
CONTENT = LoginComposite
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -- de.oddb.org -- 09.08.2007 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'bbmb/html/util/multilingual'
|
5
|
+
|
6
|
+
module BBMB
|
7
|
+
module Html
|
8
|
+
module View
|
9
|
+
module Multilingual
|
10
|
+
include Util::Multilingual
|
11
|
+
def description(model)
|
12
|
+
_(model.description)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::Navigation -- bbmb.ch -- 18.09.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
module BBMB
|
5
|
+
module Html
|
6
|
+
module View
|
7
|
+
class NavigationLink < HtmlGrid::Link
|
8
|
+
def init
|
9
|
+
unless(@session.event == @name)
|
10
|
+
self.href = @lookandfeel._event_url(@name)
|
11
|
+
end
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
class Navigation < HtmlGrid::DivComposite
|
16
|
+
COMPONENTS = {}
|
17
|
+
DEFAULT_CLASS = NavigationLink
|
18
|
+
def init
|
19
|
+
build_navigation
|
20
|
+
super
|
21
|
+
end
|
22
|
+
def build_navigation
|
23
|
+
@lookandfeel.navigation.each_with_index { |event, idx|
|
24
|
+
components.store([idx,0], event)
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Html::View::Order -- bbmb.ch -- 27.09.2006 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
require 'bbmb/html/util/multilingual'
|
5
|
+
require 'bbmb/html/view/template'
|
6
|
+
require 'htmlgrid/labeltext'
|
7
|
+
|
8
|
+
module BBMB
|
9
|
+
module Html
|
10
|
+
module View
|
11
|
+
class AdditionalInformation < HtmlGrid::Composite
|
12
|
+
COMPONENTS = {}
|
13
|
+
CSS_CLASS = 'list'
|
14
|
+
LABELS = true
|
15
|
+
VERTICAL = true
|
16
|
+
DEFAULT_CLASS = HtmlGrid::Value
|
17
|
+
SYMBOL_MAP = {
|
18
|
+
:order_total => HtmlGrid::LabelText,
|
19
|
+
}
|
20
|
+
def init
|
21
|
+
idx = 0
|
22
|
+
[:reference, :comment, :priority].each { |key|
|
23
|
+
if(@model.send(key))
|
24
|
+
components.store([0,idx], key)
|
25
|
+
css_map.store([0,idx,1,2], 'additional-info')
|
26
|
+
idx += 2
|
27
|
+
end
|
28
|
+
}
|
29
|
+
components.update([0,idx,0] => :order_total, [0,idx,1] => :total)
|
30
|
+
css_map.store([0,idx], 'order-total')
|
31
|
+
super
|
32
|
+
end
|
33
|
+
def priority(model)
|
34
|
+
item = HtmlGrid::Value.new(:priority, model, @session, self)
|
35
|
+
item.value = @lookandfeel.lookup("priority_#{model.priority}")
|
36
|
+
item
|
37
|
+
end
|
38
|
+
def total(model)
|
39
|
+
span = HtmlGrid::Span.new(model, @session, self)
|
40
|
+
span.css_id = 'total'
|
41
|
+
span.value = model.total
|
42
|
+
span
|
43
|
+
end
|
44
|
+
end
|
45
|
+
module PositionMethods
|
46
|
+
include Util::Multilingual
|
47
|
+
def delete_position(model, event)
|
48
|
+
link = HtmlGrid::Link.new(:delete, model, @session, self)
|
49
|
+
url = @lookandfeel.base_url
|
50
|
+
id = model.article_number
|
51
|
+
link.href = "javascript:delete_position('#{url}', '#{event}', '#{id}');"
|
52
|
+
link
|
53
|
+
end
|
54
|
+
def position_modifier(model, name, event)
|
55
|
+
link = HtmlGrid::Link.new(name, model, @session, self)
|
56
|
+
args = {
|
57
|
+
'query' => _(model.description).to_s[/^[^\s]+/]
|
58
|
+
}
|
59
|
+
link.href = @lookandfeel._event_url(event, args)
|
60
|
+
link.value = _(model.send(name))
|
61
|
+
link
|
62
|
+
end
|
63
|
+
end
|
64
|
+
class Positions < HtmlGrid::List
|
65
|
+
include ListPrices
|
66
|
+
CSS_CLASS = 'list'
|
67
|
+
if BBMB.config.enable_price_levels
|
68
|
+
COMPONENTS = {
|
69
|
+
[0,0] => :quantity,
|
70
|
+
[1,0] => :description,
|
71
|
+
[2,0] => :price_base,
|
72
|
+
[3,0] => :price_levels,
|
73
|
+
[4,0] => :price2,
|
74
|
+
[5,0] => :price3,
|
75
|
+
[3,1] => :price4,
|
76
|
+
[4,1] => :price5,
|
77
|
+
[5,1] => :price6,
|
78
|
+
[6,0] => :total,
|
79
|
+
}
|
80
|
+
CSS_HEAD_MAP = {
|
81
|
+
[0,0] => 'right',
|
82
|
+
[2,0] => 'right',
|
83
|
+
[3,0] => 'right',
|
84
|
+
[6,0] => 'right',
|
85
|
+
}
|
86
|
+
CSS_MAP = {
|
87
|
+
[0,0] => 'tiny right',
|
88
|
+
[1,0] => 'description',
|
89
|
+
[2,0,4,2] => 'right',
|
90
|
+
[6,0] => 'total',
|
91
|
+
}
|
92
|
+
else
|
93
|
+
COMPONENTS = {
|
94
|
+
[0,0] => :quantity,
|
95
|
+
[1,0] => :description,
|
96
|
+
[2,0] => :price_base,
|
97
|
+
[3,0] => :total,
|
98
|
+
}
|
99
|
+
CSS_HEAD_MAP = {
|
100
|
+
[0,0] => 'right',
|
101
|
+
[2,0] => 'right',
|
102
|
+
[3,0] => 'right',
|
103
|
+
}
|
104
|
+
CSS_MAP = {
|
105
|
+
[0,0] => 'tiny right',
|
106
|
+
[1,0] => 'description',
|
107
|
+
[2,0] => 'right',
|
108
|
+
[3,0] => 'total',
|
109
|
+
}
|
110
|
+
end
|
111
|
+
end
|
112
|
+
class OrderComposite < HtmlGrid::DivComposite
|
113
|
+
COMPONENTS = {
|
114
|
+
[0,0] => Positions,
|
115
|
+
[0,1] => AdditionalInformation,
|
116
|
+
}
|
117
|
+
end
|
118
|
+
class Order < Template
|
119
|
+
CONTENT = OrderComposite
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|