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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d48fc36ed07eb4d1292f6856c7a5694c9a1dab93
4
- data.tar.gz: 510ec88e40c91d544bde97f3d8d638bafba94330
3
+ metadata.gz: c2bc8ba284224681a3b72648e4e52f1766c3102e
4
+ data.tar.gz: d221bcddeb76942316bd8d5e5a141a00de073d94
5
5
  SHA512:
6
- metadata.gz: 7bee6beff82b5af562010d99c05537388c7e1fecd2f5dc9ea873459fde8ddef14ae14ee392694517a807a88f6938df96b85dcdfcc480e5a35ed6ea397b396139
7
- data.tar.gz: 92847436f2c53d716ead22e6c3dd9bb2ffd5934e6617182c156562d2d2fb7201d8f8e98c128b3be7682ff6fe30ab17ea333d3da65b3f0d8f3a2927253fb0e13d
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
- order = Unidom::Order::Order.valid_at.alive.first
22
- order.items.valid_at.alive
23
- order.adjustments.valid_at.alive
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
  ```
@@ -10,4 +10,4 @@
10
10
  // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
11
  // about supported directives.
12
12
  //
13
- //= require_tree .
13
+ //= require_self
@@ -10,6 +10,5 @@
10
10
  * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
11
  * file per style scope.
12
12
  *
13
- *= require_tree .
14
13
  *= require_self
15
14
  */
@@ -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', as: :order
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 :adjusted_by, ->(adjusted) { where adjusted: adjusted }
13
+ scope :adjusted_is, ->(adjusted) { where adjusted: adjusted }
12
14
 
13
- include Unidom::Common::Concerns::ModelExtension
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
- include Unidom::Common::Concerns::ModelExtension
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 "order/application", media: "all" %>
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
 
@@ -1,5 +1,5 @@
1
1
  module Unidom
2
2
  module Order
3
- VERSION = '0.2'.freeze
3
+ VERSION = '0.3'.freeze
4
4
  end
5
5
  end
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.2'
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-02-25 00:00:00.000000000 Z
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.2'
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.2'
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.5.1
75
+ rubygems_version: 2.6.4
76
76
  signing_key:
77
77
  specification_version: 4
78
78
  summary: Unidom Order Domain Model Engine 订单领域模型引擎