unidom-order 0.2 → 0.3

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.
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 订单领域模型引擎