unidom-order 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +67 -3
- data/app/assets/javascripts/unidom/order/application.js +1 -1
- data/app/assets/stylesheets/unidom/order/application.css +0 -1
- data/app/models/unidom/order/order.rb +3 -3
- data/app/models/unidom/order/order_adjustment.rb +12 -2
- data/app/models/unidom/order/order_item.rb +15 -1
- data/app/views/layouts/unidom/order/application.html.erb +3 -2
- data/db/migrate/20020601000000_create_unidom_orders.rb +1 -1
- data/lib/unidom/order/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2bc8ba284224681a3b72648e4e52f1766c3102e
|
4
|
+
data.tar.gz: d221bcddeb76942316bd8d5e5a141a00de073d94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8055a0a0b387806e379201d9ce9239768e29c66e50a5685e8affcebd98faeb58a0dd3628151ee55bf0be5fbb741b1f9975c34bed675b0c764d5b217c754251a
|
7
|
+
data.tar.gz: eb2ca7fc49b0349a1ffe32a407b6391472da82274320bc221249408f68114223f51f1c0e59d7ffa7e22672be547f5e62219433b7018c037a69a3507ea9a85cbb
|
data/README.md
CHANGED
@@ -6,6 +6,10 @@
|
|
6
6
|
Unidom (UNIfied Domain Object Model) is a series of domain model engines. The Order domain model engine includes Order, Order Item, and Order Adjustment models.
|
7
7
|
Unidom (统一领域对象模型)是一系列的领域模型引擎。订单领域模型引擎包括订单、订单项和订单调整的模型。
|
8
8
|
|
9
|
+
## Recent Update
|
10
|
+
Check out the [Road Map](ROADMAP.md) to find out what's the next.
|
11
|
+
Check out the [Change Log](CHANGELOG.md) to find out what's new.
|
12
|
+
|
9
13
|
## Usage in Gemfile
|
10
14
|
```ruby
|
11
15
|
gem 'unidom-order'
|
@@ -15,10 +19,70 @@ gem 'unidom-order'
|
|
15
19
|
```shell
|
16
20
|
rake db:migrate
|
17
21
|
```
|
22
|
+
The migration versions start with 200206.
|
18
23
|
|
19
24
|
## Call the Model
|
20
25
|
```ruby
|
21
|
-
|
22
|
-
|
23
|
-
|
26
|
+
lady = Person.create name: 'Ann'
|
27
|
+
shop = Shop.create name: 'WalMart'
|
28
|
+
|
29
|
+
order = Unidom::Order::Order.create(placer: lady,
|
30
|
+
taker: shop,
|
31
|
+
number: 'ZBCDEFGHIJKL',
|
32
|
+
instruction: 'Please mail to me as soon as possible.',
|
33
|
+
description: 'gifts for my kids',
|
34
|
+
opened_at: Time.now)
|
35
|
+
|
36
|
+
game = Product.create name: 'World War II'
|
37
|
+
ball = Product.create name: 'Basketball'
|
38
|
+
|
39
|
+
order.items.create(ordered: game,
|
40
|
+
placer: lady,
|
41
|
+
ordinal: 1,
|
42
|
+
unit_price: 19.99,
|
43
|
+
quantity: 1,
|
44
|
+
purchase_amount: 19.99,
|
45
|
+
subtotal_amount: 23.98,
|
46
|
+
instruction: 'We need the 2nd version.',
|
47
|
+
description: 'video game',
|
48
|
+
opened_at: Time.now)
|
49
|
+
order.items.create(ordered: ball,
|
50
|
+
placer: lady,
|
51
|
+
ordinal: 2,
|
52
|
+
unit_price: 35.00,
|
53
|
+
quantity: 2,
|
54
|
+
purchase_amount: 70.00,
|
55
|
+
subtotal_amount: 70.00,
|
56
|
+
instruction: 'We need 2 balls.',
|
57
|
+
description: 'video game',
|
58
|
+
opened_at: Time.now)
|
59
|
+
|
60
|
+
order.adjustments.create(
|
61
|
+
adjustment_factor_code: 'FRGT',
|
62
|
+
calculation_code: 'AMNT',
|
63
|
+
amount: 5.00,
|
64
|
+
instruction: 'arrive in 3 days',
|
65
|
+
description: 'freight',
|
66
|
+
opened_at: Time.now)
|
67
|
+
order.items.first.create(
|
68
|
+
adjustment_factor_code: 'TAXF',
|
69
|
+
calculation_code: 'PCNT',
|
70
|
+
amount: 15.00,
|
71
|
+
instruction: 'tax rate is 15%',
|
72
|
+
description: 'tax',
|
73
|
+
opened_at: Time.now)
|
74
|
+
|
75
|
+
order.purchase_amount = order.items.sum('purchase_amount')
|
76
|
+
order.aggregate_amount = order.items.sum('subtotal_amount')+order.adjustments.sum('amount')
|
77
|
+
order.save
|
78
|
+
|
79
|
+
order = Unidom::Order::Order.where(number: 'ZBCDEFGHIJKL').first
|
80
|
+
order.items # Order Items
|
81
|
+
order.adjustments # Order Adjustments
|
82
|
+
|
83
|
+
Unidom::Order::OrderItem.order! order, product, 1080.00, 2
|
84
|
+
# Add the given product into the given order
|
85
|
+
|
86
|
+
Unidom::Order::OrderAdjustment.adjust! order, 20, 'DSCT'
|
87
|
+
# Add the given adjustment into the given order
|
24
88
|
```
|
@@ -4,6 +4,8 @@ class Unidom::Order::Order < ActiveRecord::Base
|
|
4
4
|
|
5
5
|
self.table_name = 'unidom_orders'
|
6
6
|
|
7
|
+
include Unidom::Common::Concerns::ModelExtension
|
8
|
+
|
7
9
|
validates :number, presence: true, length: { is: self.columns_hash['number'].limit }
|
8
10
|
validates :purchase_amount, presence: true, numericality: { less_than: 1000000000, greater_than: 0 }
|
9
11
|
validates :aggregate_amount, presence: true, numericality: { less_than: 1000000000, greater_than: 0 }
|
@@ -11,12 +13,10 @@ class Unidom::Order::Order < ActiveRecord::Base
|
|
11
13
|
belongs_to :placer, polymorphic: true
|
12
14
|
belongs_to :taker, polymorphic: true
|
13
15
|
|
14
|
-
has_many :items, class_name: 'Unidom::Order::OrderItem'
|
16
|
+
has_many :items, class_name: 'Unidom::Order::OrderItem'
|
15
17
|
has_many :adjustments, class_name: 'Unidom::Order::OrderAdjustment', as: :adjusted
|
16
18
|
|
17
19
|
scope :placed_by, ->(placer) { where placer: placer }
|
18
20
|
scope :taken_by, ->(taker) { where taker: taker }
|
19
21
|
|
20
|
-
include Unidom::Common::Concerns::ModelExtension
|
21
|
-
|
22
22
|
end
|
@@ -4,12 +4,22 @@ class Unidom::Order::OrderAdjustment < ActiveRecord::Base
|
|
4
4
|
|
5
5
|
self.table_name = 'unidom_order_adjustments'
|
6
6
|
|
7
|
+
include Unidom::Common::Concerns::ModelExtension
|
8
|
+
|
7
9
|
validates :amount, presence: true, numericality: { less_than: 1000000000, greater_than: -1000000000 }
|
8
10
|
|
9
11
|
belongs_to :adjusted, polymorphic: true
|
10
12
|
|
11
|
-
scope :
|
13
|
+
scope :adjusted_is, ->(adjusted) { where adjusted: adjusted }
|
12
14
|
|
13
|
-
|
15
|
+
def self.adjust!(adjusted, amount, adjustment_factor_code = 'FRGT')
|
16
|
+
adjustment = self.adjusted_is(adjusted).adjustment_factor_coded_as(adjustment_factor_code).valid_at.alive.first
|
17
|
+
if adjustment.present?
|
18
|
+
adjustment.amount = amount
|
19
|
+
adjustment.save!
|
20
|
+
else
|
21
|
+
create! adjusted: adjusted, amount: amount, adjustment_factor_code: adjustment_factor_code
|
22
|
+
end
|
23
|
+
end
|
14
24
|
|
15
25
|
end
|
@@ -4,6 +4,8 @@ class Unidom::Order::OrderItem < ActiveRecord::Base
|
|
4
4
|
|
5
5
|
self.table_name = 'unidom_order_items'
|
6
6
|
|
7
|
+
include Unidom::Common::Concerns::ModelExtension
|
8
|
+
|
7
9
|
validates :ordinal, presence: true, numericality: { only_integer: true, greater_than: 0, less_than: 1000000000 }
|
8
10
|
validates :unit_price, presence: true, numericality: { less_than: 1000000000, greater_than: 0 }
|
9
11
|
validates :quantity, presence: true, numericality: { less_than: 1000000000, greater_than: 0 }
|
@@ -20,6 +22,18 @@ class Unidom::Order::OrderItem < ActiveRecord::Base
|
|
20
22
|
scope :ordered_is, ->(ordered) { where ordered: ordered }
|
21
23
|
scope :placed_by, ->(placer) { where placer: placer }
|
22
24
|
|
23
|
-
|
25
|
+
def self.order!(order, ordered, unit_price, quantity = 1, placer = order.placer)
|
26
|
+
item = order.items.ordered_is(ordered).placed_by(placer).valid_at.alive.first
|
27
|
+
if item.present?
|
28
|
+
item.quantity += quantity
|
29
|
+
item.unit_price = unit_price
|
30
|
+
item.purchase_amount = item.unit_price*item.quantity
|
31
|
+
item.subtotal_amount = item.purchase_amount+item.adjustments.valid_at.alive.sum(:amount).to_f
|
32
|
+
item.save!
|
33
|
+
else
|
34
|
+
ordinal = 1+order.items.valid_at.alive.maximum(:ordinal).to_i
|
35
|
+
order.items.create! ordered: ordered, placer: placer, ordinal: ordinal, quantity: quantity, unit_price: unit_price, purchase_amount: unit_price*quantity, subtotal_amount: unit_price*quantity, opened_at: Time.now
|
36
|
+
end
|
37
|
+
end
|
24
38
|
|
25
39
|
end
|
@@ -2,13 +2,14 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<title>Order</title>
|
5
|
-
<%= stylesheet_link_tag
|
6
|
-
<%= javascript_include_tag "order/application" %>
|
5
|
+
<%= stylesheet_link_tag "order/application", media: "all" %>
|
7
6
|
<%= csrf_meta_tags %>
|
8
7
|
</head>
|
9
8
|
<body>
|
10
9
|
|
11
10
|
<%= yield %>
|
12
11
|
|
12
|
+
<%= javascript_include_tag 'order/application' %>
|
13
|
+
|
13
14
|
</body>
|
14
15
|
</html>
|
@@ -30,8 +30,8 @@ class CreateUnidomOrders < ActiveRecord::Migration
|
|
30
30
|
|
31
31
|
add_index :unidom_orders, :placer_id
|
32
32
|
add_index :unidom_orders, :taker_id
|
33
|
-
add_index :unidom_orders, :slug, unique: true
|
34
33
|
add_index :unidom_orders, :number, unique: true
|
34
|
+
add_index :unidom_orders, :slug, unique: true
|
35
35
|
|
36
36
|
end
|
37
37
|
|
data/lib/unidom/order/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unidom-order
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Topbit Du
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: unidom-common
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.9'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.9'
|
27
27
|
description: Unidom (UNIfied Domain Object Model) is a series of domain model engines.
|
28
28
|
The Order domain model engine includes Order, Order Item, and Order Adjustment models.
|
29
29
|
Unidom (统一领域对象模型)是一系列的领域模型引擎。订单领域模型引擎包括订单、订单项和订单调整的模型。
|
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
72
|
version: '0'
|
73
73
|
requirements: []
|
74
74
|
rubyforge_project:
|
75
|
-
rubygems_version: 2.4
|
75
|
+
rubygems_version: 2.6.4
|
76
76
|
signing_key:
|
77
77
|
specification_version: 4
|
78
78
|
summary: Unidom Order Domain Model Engine 订单领域模型引擎
|