solidus_core 1.1.4 → 1.2.0.beta1

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 (296) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/logo/solidus_logo.png +0 -0
  3. data/app/helpers/spree/base_helper.rb +2 -3
  4. data/app/models/concerns/spree/adjustment_source.rb +1 -1
  5. data/app/models/concerns/spree/default_price.rb +3 -1
  6. data/app/models/concerns/spree/named_type.rb +1 -1
  7. data/app/models/concerns/spree/user_methods.rb +10 -0
  8. data/app/models/spree/adjustment.rb +1 -1
  9. data/app/models/spree/adjustment_reason.rb +2 -4
  10. data/app/models/spree/app_configuration.rb +36 -0
  11. data/app/models/spree/base.rb +10 -1
  12. data/app/models/spree/calculator/tiered_percent.rb +2 -1
  13. data/app/models/spree/classification.rb +1 -1
  14. data/app/models/spree/country.rb +3 -3
  15. data/app/models/spree/credit_card.rb +2 -2
  16. data/app/models/spree/customer_return.rb +3 -4
  17. data/app/models/spree/inventory_unit.rb +13 -24
  18. data/app/models/spree/item_adjustments.rb +5 -5
  19. data/app/models/spree/line_item.rb +6 -15
  20. data/app/models/spree/log_entry.rb +1 -1
  21. data/app/models/spree/option_type.rb +4 -2
  22. data/app/models/spree/option_type_prototype.rb +6 -0
  23. data/app/models/spree/option_value.rb +1 -1
  24. data/app/models/spree/order.rb +18 -63
  25. data/app/models/spree/order/checkout.rb +4 -2
  26. data/app/models/spree/order_cancellations.rb +52 -1
  27. data/app/models/spree/order_contents.rb +1 -1
  28. data/app/models/spree/order_merger.rb +143 -0
  29. data/app/models/spree/order_shipping.rb +3 -3
  30. data/app/models/spree/order_update_attributes.rb +42 -0
  31. data/app/models/spree/order_updater.rb +1 -1
  32. data/app/models/spree/payment.rb +16 -10
  33. data/app/models/spree/payment_create.rb +68 -0
  34. data/app/models/spree/payment_method.rb +0 -1
  35. data/app/models/spree/preference.rb +1 -1
  36. data/app/models/spree/price.rb +1 -8
  37. data/app/models/spree/product.rb +9 -44
  38. data/app/models/spree/product/scopes.rb +9 -7
  39. data/app/models/spree/promotion/rules/nth_order.rb +1 -1
  40. data/app/models/spree/promotion/rules/taxon.rb +2 -1
  41. data/app/models/spree/promotion_chooser.rb +1 -0
  42. data/app/models/spree/promotion_code.rb +1 -1
  43. data/app/models/spree/promotion_rule_taxon.rb +6 -0
  44. data/app/models/spree/property.rb +2 -1
  45. data/app/models/spree/property_prototype.rb +6 -0
  46. data/app/models/spree/prototype.rb +6 -2
  47. data/app/models/spree/reimbursement.rb +10 -0
  48. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  49. data/app/models/spree/return_reason.rb +1 -7
  50. data/app/models/spree/role_user.rb +3 -5
  51. data/app/models/spree/shipment.rb +6 -11
  52. data/app/models/spree/shipping_method.rb +1 -7
  53. data/app/models/spree/shipping_rate.rb +3 -14
  54. data/app/models/spree/stock/coordinator.rb +48 -4
  55. data/app/models/spree/stock/estimator.rb +3 -6
  56. data/app/models/spree/stock/packer.rb +18 -2
  57. data/app/models/spree/stock/shipping_rate_selector.rb +16 -0
  58. data/app/models/spree/stock/shipping_rate_sorter.rb +16 -0
  59. data/app/models/spree/stock_item.rb +19 -15
  60. data/app/models/spree/stock_location.rb +2 -12
  61. data/app/models/spree/stock_transfer.rb +3 -3
  62. data/app/models/spree/store_credit.rb +2 -2
  63. data/app/models/spree/tax_category.rb +3 -2
  64. data/app/models/spree/tax_rate.rb +7 -14
  65. data/app/models/spree/taxon.rb +4 -1
  66. data/app/models/spree/taxonomy.rb +1 -1
  67. data/app/models/spree/transfer_item.rb +2 -2
  68. data/app/models/spree/unit_cancel.rb +2 -0
  69. data/app/models/spree/variant.rb +9 -14
  70. data/app/models/spree/zone.rb +6 -0
  71. data/app/models/spree/zone_member.rb +1 -4
  72. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -0
  73. data/config/locales/en.yml +7 -5
  74. data/db/default/spree/countries.rb +1 -1
  75. data/db/default/spree/zones.rb +5 -11
  76. data/db/migrate/20130213191427_create_default_stock.rb +1 -1
  77. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +1 -1
  78. data/db/migrate/20140309033438_create_store_from_preferences.rb +5 -2
  79. data/db/migrate/20141009204607_add_store_id_to_orders.rb +6 -2
  80. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
  81. data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
  82. data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +2 -2
  83. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +10 -0
  84. data/db/migrate/20151117063249_convert_habtm_to_hmt_for_properties_prototypes.rb +17 -0
  85. data/db/migrate/20151124062500_convert_habtm_to_hmt_for_option_type_prototypes.rb +17 -0
  86. data/db/migrate/20151126063028_convert_habtm_to_hmt_for_taxons_promotion_rules.rb +15 -0
  87. data/db/migrate/20151219020209_add_stock_item_unique_index.rb +9 -0
  88. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  89. data/lib/generators/spree/dummy/templates/rails/database.yml +1 -1
  90. data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -1
  91. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +3 -0
  92. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +3 -0
  93. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +3 -0
  94. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +3 -0
  95. data/lib/spree/core/controller_helpers/common.rb +1 -1
  96. data/lib/spree/core/controller_helpers/order.rb +1 -1
  97. data/lib/spree/core/controller_helpers/payment_parameters.rb +104 -5
  98. data/lib/spree/core/engine.rb +3 -2
  99. data/lib/spree/core/stock_configuration.rb +11 -0
  100. data/lib/spree/core/unreturned_item_charger.rb +4 -4
  101. data/lib/spree/core/version.rb +9 -1
  102. data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +15 -24
  103. data/lib/spree/permitted_attributes.rb +3 -1
  104. data/lib/spree/testing_support/capybara_ext.rb +14 -40
  105. data/lib/spree/testing_support/factories.rb +0 -15
  106. data/lib/spree/testing_support/factories/address_factory.rb +3 -0
  107. data/lib/spree/testing_support/factories/adjustment_factory.rb +9 -1
  108. data/lib/spree/testing_support/factories/carton_factory.rb +4 -1
  109. data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -0
  110. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -0
  111. data/lib/spree/testing_support/factories/line_item_factory.rb +3 -0
  112. data/lib/spree/testing_support/factories/option_type_factory.rb +6 -0
  113. data/lib/spree/testing_support/factories/{options_factory.rb → option_value_factory.rb} +0 -5
  114. data/lib/spree/testing_support/factories/order_factory.rb +13 -3
  115. data/lib/spree/testing_support/factories/order_promotion_factory.rb +3 -0
  116. data/lib/spree/testing_support/factories/payment_factory.rb +13 -5
  117. data/lib/spree/testing_support/factories/price_factory.rb +2 -0
  118. data/lib/spree/testing_support/factories/product_factory.rb +7 -1
  119. data/lib/spree/testing_support/factories/product_option_type_factory.rb +3 -0
  120. data/lib/spree/testing_support/factories/product_property_factory.rb +3 -0
  121. data/lib/spree/testing_support/factories/promotion_code_factory.rb +3 -0
  122. data/lib/spree/testing_support/factories/promotion_factory.rb +3 -0
  123. data/lib/spree/testing_support/factories/prototype_factory.rb +2 -0
  124. data/lib/spree/testing_support/factories/refund_factory.rb +10 -5
  125. data/lib/spree/testing_support/factories/refund_reason_factory.rb +5 -0
  126. data/lib/spree/testing_support/factories/reimbursement_factory.rb +2 -0
  127. data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -4
  128. data/lib/spree/testing_support/factories/return_item_factory.rb +4 -0
  129. data/lib/spree/testing_support/factories/return_reason_factory.rb +5 -0
  130. data/lib/spree/testing_support/factories/shipment_factory.rb +6 -1
  131. data/lib/spree/testing_support/factories/shipping_method_factory.rb +22 -10
  132. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +9 -0
  133. data/lib/spree/testing_support/factories/state_factory.rb +2 -0
  134. data/lib/spree/testing_support/factories/stock_item_factory.rb +4 -1
  135. data/lib/spree/testing_support/factories/stock_location_factory.rb +8 -0
  136. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -0
  137. data/lib/spree/testing_support/factories/{stock_factory.rb → stock_package_factory.rb} +5 -10
  138. data/lib/spree/testing_support/factories/stock_packer_factory.rb +13 -0
  139. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +2 -2
  140. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +4 -1
  141. data/lib/spree/testing_support/factories/store_credit_factory.rb +10 -6
  142. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -0
  143. data/lib/spree/testing_support/factories/tax_rate_factory.rb +4 -0
  144. data/lib/spree/testing_support/factories/taxon_factory.rb +2 -0
  145. data/lib/spree/testing_support/factories/user_factory.rb +6 -2
  146. data/lib/spree/testing_support/factories/variant_factory.rb +5 -0
  147. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +3 -0
  148. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +4 -0
  149. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +3 -0
  150. data/lib/spree/testing_support/factories/zone_factory.rb +6 -0
  151. data/lib/spree/testing_support/sequences.rb +9 -0
  152. data/lib/tasks/exchanges.rake +4 -3
  153. data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +2 -2
  154. data/solidus_core.gemspec +4 -5
  155. data/spec/helpers/base_helper_spec.rb +6 -6
  156. data/spec/helpers/order_helper_spec.rb +1 -1
  157. data/spec/helpers/products_helper_spec.rb +2 -2
  158. data/spec/helpers/taxons_helper_spec.rb +1 -1
  159. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +107 -7
  160. data/spec/lib/spree/core/importer/order_spec.rb +1 -1
  161. data/spec/lib/spree/core/stock_configuration_spec.rb +16 -0
  162. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +24 -0
  163. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +18 -0
  164. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +12 -0
  165. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +42 -0
  166. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +12 -0
  167. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +12 -0
  168. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +12 -0
  169. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +28 -0
  170. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +12 -0
  171. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +12 -0
  172. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +12 -0
  173. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +12 -0
  174. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +12 -0
  175. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +49 -0
  176. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +12 -0
  177. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +24 -0
  178. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +30 -0
  179. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +12 -0
  180. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +30 -0
  181. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +12 -0
  182. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +12 -0
  183. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +12 -0
  184. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +12 -0
  185. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +30 -0
  186. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +12 -0
  187. data/spec/lib/spree/core/testing_support/factories/prototype_factory_spec.rb +12 -0
  188. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +12 -0
  189. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +12 -0
  190. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +12 -0
  191. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +12 -0
  192. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +12 -0
  193. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +18 -0
  194. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +12 -0
  195. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +18 -0
  196. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +12 -0
  197. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +12 -0
  198. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +28 -0
  199. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +12 -0
  200. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +12 -0
  201. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +12 -0
  202. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +24 -0
  203. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +12 -0
  204. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +26 -0
  205. data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +16 -0
  206. data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +12 -0
  207. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +12 -0
  208. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +42 -0
  209. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +12 -0
  210. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +18 -0
  211. data/spec/lib/spree/core/testing_support/factories/store_credit_update_reason_factory_spec.rb +12 -0
  212. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +12 -0
  213. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +12 -0
  214. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +12 -0
  215. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +12 -0
  216. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +12 -0
  217. data/spec/lib/spree/core/testing_support/factories/tracker_factory_spec.rb +12 -0
  218. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +22 -0
  219. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +36 -0
  220. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +12 -0
  221. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +12 -0
  222. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +12 -0
  223. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +18 -0
  224. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +1 -1
  225. data/spec/lib/spree/core/version_spec.rb +17 -0
  226. data/spec/lib/spree/money_spec.rb +1 -1
  227. data/spec/mailers/carton_mailer_spec.rb +1 -1
  228. data/spec/mailers/order_mailer_spec.rb +1 -1
  229. data/spec/mailers/reimbursement_mailer_spec.rb +1 -3
  230. data/spec/mailers/test_mailer_spec.rb +1 -3
  231. data/spec/models/spree/address_spec.rb +4 -4
  232. data/spec/models/spree/adjustment_reason_spec.rb +1 -3
  233. data/spec/models/spree/app_configuration_spec.rb +4 -0
  234. data/spec/models/spree/calculator/price_sack_spec.rb +3 -3
  235. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +3 -3
  236. data/spec/models/spree/calculator/tiered_percent_spec.rb +86 -10
  237. data/spec/models/spree/carton_spec.rb +3 -1
  238. data/spec/models/spree/classification_spec.rb +3 -3
  239. data/spec/models/spree/credit_card_spec.rb +16 -16
  240. data/spec/models/spree/customer_return_spec.rb +1 -1
  241. data/spec/models/spree/gateway/bogus_simple.rb +1 -1
  242. data/spec/models/spree/inventory_unit_spec.rb +3 -3
  243. data/spec/models/spree/item_adjustments_spec.rb +1 -1
  244. data/spec/models/spree/line_item_spec.rb +2 -2
  245. data/spec/models/spree/option_type_spec.rb +2 -2
  246. data/spec/models/spree/option_value_spec.rb +2 -2
  247. data/spec/models/spree/order/callbacks_spec.rb +1 -1
  248. data/spec/models/spree/order/checkout_spec.rb +16 -11
  249. data/spec/models/spree/order/payment_spec.rb +24 -22
  250. data/spec/models/spree/order/state_machine_spec.rb +1 -1
  251. data/spec/models/spree/order/validations_spec.rb +1 -1
  252. data/spec/models/spree/order_cancellations_spec.rb +63 -0
  253. data/spec/models/spree/order_contents_spec.rb +1 -1
  254. data/spec/models/spree/order_merger_spec.rb +133 -0
  255. data/spec/models/spree/order_spec.rb +39 -159
  256. data/spec/models/spree/order_update_attributes_spec.rb +82 -0
  257. data/spec/models/spree/order_updater_spec.rb +6 -4
  258. data/spec/models/spree/payment_create_spec.rb +131 -0
  259. data/spec/models/spree/payment_spec.rb +130 -48
  260. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +91 -33
  261. data/spec/models/spree/product_filter_spec.rb +3 -3
  262. data/spec/models/spree/product_spec.rb +80 -26
  263. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +1 -1
  264. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +2 -2
  265. data/spec/models/spree/promotion/rules/nth_order_spec.rb +1 -1
  266. data/spec/models/spree/promotion/rules/user_spec.rb +2 -2
  267. data/spec/models/spree/promotion_handler/coupon_spec.rb +2 -2
  268. data/spec/models/spree/promotion_spec.rb +18 -18
  269. data/spec/models/spree/reimbursement_spec.rb +22 -0
  270. data/spec/models/spree/return_item_spec.rb +2 -2
  271. data/spec/models/spree/shipment_spec.rb +28 -12
  272. data/spec/models/spree/shipping_method_spec.rb +2 -2
  273. data/spec/models/spree/shipping_rate_spec.rb +3 -3
  274. data/spec/models/spree/stock/coordinator_spec.rb +5 -0
  275. data/spec/models/spree/stock/estimator_spec.rb +35 -1
  276. data/spec/models/spree/stock/package_spec.rb +1 -1
  277. data/spec/models/spree/stock/packer_spec.rb +2 -3
  278. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +16 -0
  279. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +16 -0
  280. data/spec/models/spree/stock_item_spec.rb +5 -7
  281. data/spec/models/spree/stock_location_spec.rb +5 -9
  282. data/spec/models/spree/stock_transfer_spec.rb +33 -13
  283. data/spec/models/spree/store_credit_event_spec.rb +1 -1
  284. data/spec/models/spree/store_credit_spec.rb +1 -1
  285. data/spec/models/spree/tax_rate_spec.rb +381 -120
  286. data/spec/models/spree/taxon_spec.rb +3 -3
  287. data/spec/models/spree/transfer_item_spec.rb +4 -4
  288. data/spec/models/spree/unit_cancel_spec.rb +1 -1
  289. data/spec/models/spree/variant_spec.rb +3 -3
  290. data/spec/models/spree/zone_spec.rb +35 -1
  291. data/spec/support/concerns/working_factories.rb +9 -0
  292. data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
  293. data/vendor/assets/javascripts/jquery.payment.js +231 -80
  294. metadata +103 -27
  295. data/app/models/spree/order/currency_updater.rb +0 -40
  296. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
@@ -77,7 +77,7 @@ module Spree
77
77
  item = stock_item_or_create(variant)
78
78
  item.update_columns(
79
79
  count_on_hand: item.count_on_hand + quantity,
80
- updated_at: Time.now
80
+ updated_at: Time.current
81
81
  )
82
82
  end
83
83
 
@@ -95,17 +95,7 @@ module Spree
95
95
 
96
96
  def fill_status(variant, quantity)
97
97
  if item = stock_item(variant)
98
-
99
- if item.count_on_hand >= quantity
100
- on_hand = quantity
101
- backordered = 0
102
- else
103
- on_hand = item.count_on_hand
104
- on_hand = 0 if on_hand < 0
105
- backordered = item.backorderable? ? (quantity - on_hand) : 0
106
- end
107
-
108
- [on_hand, backordered]
98
+ item.fill_status(quantity)
109
99
  else
110
100
  [0, 0]
111
101
  end
@@ -46,7 +46,7 @@ module Spree
46
46
  finalized? && shipped? && !closed?
47
47
  end
48
48
 
49
- def ship(tracking_number: nil, shipped_at: nil)
49
+ def ship(tracking_number: self.tracking_number, shipped_at: nil)
50
50
  update_attributes!(tracking_number: tracking_number, shipped_at: shipped_at)
51
51
  end
52
52
 
@@ -70,7 +70,7 @@ module Spree
70
70
 
71
71
  def finalize(finalized_by)
72
72
  if finalizable?
73
- self.update_attributes({ finalized_at: Time.now, finalized_by: finalized_by })
73
+ self.update_attributes({ finalized_at: Time.current, finalized_by: finalized_by })
74
74
  else
75
75
  errors.add(:base, Spree.t(:stock_transfer_cannot_be_finalized))
76
76
  false
@@ -91,7 +91,7 @@ module Spree
91
91
 
92
92
  def close(closed_by)
93
93
  if receivable?
94
- self.update_attributes({ closed_at: Time.now, closed_by: closed_by })
94
+ self.update_attributes({ closed_at: Time.current, closed_by: closed_by })
95
95
  else
96
96
  errors.add(:base, Spree.t(:stock_transfer_must_be_receivable))
97
97
  false
@@ -162,7 +162,7 @@ class Spree::StoreCredit < Spree::Base
162
162
  end
163
163
 
164
164
  def generate_authorization_code
165
- "#{self.id}-SC-#{Time.now.utc.strftime("%Y%m%d%H%M%S%6N")}"
165
+ "#{self.id}-SC-#{Time.current.utc.strftime("%Y%m%d%H%M%S%6N")}"
166
166
  end
167
167
 
168
168
  def editable?
@@ -192,7 +192,7 @@ class Spree::StoreCredit < Spree::Base
192
192
  self.action = INVALIDATE_ACTION
193
193
  self.update_reason = reason
194
194
  self.action_originator = user_performing_invalidation
195
- self.invalidated_at = Time.now
195
+ self.invalidated_at = Time.current
196
196
  save
197
197
  else
198
198
  errors.add(:invalidated_at, Spree.t("store_credit.errors.cannot_invalidate_uncaptured_authorization"))
@@ -1,7 +1,8 @@
1
1
  module Spree
2
2
  class TaxCategory < Spree::Base
3
3
  acts_as_paranoid
4
- validates :name, presence: true, uniqueness: { scope: :deleted_at, allow_blank: true }
4
+ validates :name, presence: true
5
+ validates_uniqueness_of :name, unless: :deleted_at
5
6
 
6
7
  has_many :tax_rates, dependent: :destroy, inverse_of: :tax_category
7
8
  after_save :ensure_one_default
@@ -12,7 +13,7 @@ module Spree
12
13
 
13
14
  def ensure_one_default
14
15
  if is_default
15
- Spree::TaxCategory.where(is_default: true).where.not(id: self.id).update_all(is_default: false, updated_at: Time.now)
16
+ Spree::TaxCategory.where(is_default: true).where.not(id: self.id).update_all(is_default: false, updated_at: Time.current)
16
17
  end
17
18
  end
18
19
  end
@@ -50,7 +50,7 @@ module Spree
50
50
  # When you ship to France, you'll see a Spanish refund AND a French tax.
51
51
  # This little bit of code at the end stops the Spanish refund from appearing.
52
52
  #
53
- # For further discussion, see #4397 and #4327.
53
+ # For further discussion, see https://github.com/spree/spree/issues/4397 and https://github.com/spree/spree/issues/4327.
54
54
 
55
55
  remaining_rates = rates.dup
56
56
  rates.each do |rate|
@@ -145,12 +145,10 @@ module Spree
145
145
  #
146
146
  # Those rates should never come into play at all and only the French rates should apply.
147
147
  def potentially_applicable?(order_tax_zone)
148
- # If the rate's zone matches the order's tax zone, then it's applicable.
149
- self.zone == order_tax_zone ||
150
148
  # If the rate's zone *contains* the order's tax zone, then it's applicable.
151
149
  self.zone.contains?(order_tax_zone) ||
152
- # 1) The rate's zone is the default zone, then it's always applicable.
153
- (self.included_in_price? && self.zone.default_tax)
150
+ # The rate is a VAT and its zone contains the default zone, then it's applicable.
151
+ (self.included_in_price? && self.zone.contains?(Spree::Zone.default_tax))
154
152
  end
155
153
 
156
154
  # Creates necessary tax adjustments for the order.
@@ -175,21 +173,16 @@ module Spree
175
173
 
176
174
  # This method is used by Adjustment#update to recalculate the cost.
177
175
  def compute_amount(item)
178
- if included_in_price
179
- if default_zone_or_zone_match?(item.order.tax_zone)
180
- calculator.compute(item)
181
- else
182
- # In this case, it's a refund.
183
- calculator.compute(item) * - 1
184
- end
176
+ if included_in_price && !default_zone_or_zone_match?(item.order.tax_zone)
177
+ # In this case, it's a refund.
178
+ calculator.compute(item) * - 1
185
179
  else
186
180
  calculator.compute(item)
187
181
  end
188
182
  end
189
183
 
190
184
  def default_zone_or_zone_match?(order_tax_zone)
191
- default_tax = Zone.default_tax
192
- (default_tax && default_tax.contains?(order_tax_zone)) || order_tax_zone == self.zone
185
+ Zone.default_tax.try!(:contains?, order_tax_zone) || self.zone.contains?(order_tax_zone)
193
186
  end
194
187
 
195
188
  private
@@ -9,6 +9,9 @@ module Spree
9
9
  has_many :prototype_taxons, dependent: :destroy
10
10
  has_many :prototypes, through: :prototype_taxons
11
11
 
12
+ has_many :promotion_rule_taxons
13
+ has_many :promotion_rules, through: :promotion_rule_taxons
14
+
12
15
  before_create :set_permalink
13
16
 
14
17
  validates :name, presence: true
@@ -96,7 +99,7 @@ module Spree
96
99
 
97
100
  def touch_ancestors_and_taxonomy
98
101
  # Touches all ancestors at once to avoid recursive taxonomy touch, and reduce queries.
99
- self.class.where(id: ancestors.pluck(:id)).update_all(updated_at: Time.now)
102
+ self.class.where(id: ancestors.pluck(:id)).update_all(updated_at: Time.current)
100
103
  # Have taxonomy touch happen in #touch_ancestors_and_taxonomy rather than association option in order for imports to override.
101
104
  taxonomy.try!(:touch)
102
105
  end
@@ -16,7 +16,7 @@ module Spree
16
16
  if root
17
17
  root.update_columns(
18
18
  name: name,
19
- updated_at: Time.now,
19
+ updated_at: Time.current,
20
20
  )
21
21
  else
22
22
  self.root = Taxon.create!(taxonomy_id: id, name: name)
@@ -5,8 +5,8 @@ module Spree
5
5
  belongs_to :variant
6
6
 
7
7
  validate :stock_availability, if: :check_stock?
8
- validates_presence_of :stock_transfer, :variant
9
- validates_uniqueness_of :variant_id, scope: :stock_transfer_id
8
+ validates :stock_transfer, :variant, presence: true
9
+ validates :variant_id, uniqueness: { scope: :stock_transfer_id }, allow_blank: true
10
10
  validates :expected_quantity, numericality: { greater_than: 0 }
11
11
  validates :received_quantity, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: :expected_quantity }
12
12
 
@@ -3,6 +3,8 @@
3
3
  # This class should encapsulate logic related to canceling inventory after order complete
4
4
  class Spree::UnitCancel < Spree::Base
5
5
  SHORT_SHIP = 'Short Ship'
6
+ DEFAULT_REASON = 'Cancel'
7
+
6
8
  belongs_to :inventory_unit
7
9
  has_one :adjustment, as: :source, dependent: :destroy
8
10
 
@@ -18,7 +18,7 @@ module Spree
18
18
 
19
19
  include Spree::DefaultPrice
20
20
 
21
- belongs_to :product, touch: true, class_name: 'Spree::Product', inverse_of: :variants
21
+ belongs_to :product, -> { with_deleted }, touch: true, class_name: 'Spree::Product', inverse_of: :variants
22
22
  belongs_to :tax_category, class_name: 'Spree::TaxCategory'
23
23
 
24
24
  delegate :name, :description, :slug, :available_on, :shipping_category_id,
@@ -49,7 +49,7 @@ module Spree
49
49
 
50
50
  validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
51
51
  validates :price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
52
- validates_uniqueness_of :sku, allow_blank: true, conditions: -> { where(deleted_at: nil) }
52
+ validates_uniqueness_of :sku, allow_blank: true, unless: :deleted_at
53
53
 
54
54
  after_create :create_stock_items
55
55
  after_create :set_position
@@ -158,14 +158,6 @@ module Spree
158
158
  !!deleted_at
159
159
  end
160
160
 
161
- # Override ActiveRecord finder to function even if the product has been
162
- # deleted.
163
- #
164
- # @return [Spree::Product]
165
- def product
166
- Spree::Product.unscoped { super }
167
- end
168
-
169
161
  # Assign given options hash to option values.
170
162
  #
171
163
  # @param options [Array] array of hashes with a name and value.
@@ -346,9 +338,12 @@ module Spree
346
338
  # Ensures a new variant takes the product master price when price is not supplied
347
339
  def check_price
348
340
  if price.nil? && Spree::Config[:require_master_price]
349
- raise 'No master variant found to infer price' unless (product && product.master)
350
- raise 'Must supply price for variant or master.price for product.' if self == product.master
351
- self.price = product.master.price
341
+ if is_master?
342
+ errors.add :price, 'Must supply price for variant or master.price for product.'
343
+ else
344
+ raise 'No master variant found to infer price' unless (product && product.master)
345
+ self.price = product.master.price
346
+ end
352
347
  end
353
348
  if currency.nil?
354
349
  self.currency = Spree::Config[:currency]
@@ -356,7 +351,7 @@ module Spree
356
351
  end
357
352
 
358
353
  def set_cost_currency
359
- self.cost_currency = Spree::Config[:currency] if cost_currency.nil? || cost_currency.empty?
354
+ self.cost_currency = Spree::Config[:currency] if cost_currency.blank?
360
355
  end
361
356
 
362
357
  def create_stock_items
@@ -3,6 +3,11 @@ module Spree
3
3
  has_many :zone_members, dependent: :destroy, class_name: "Spree::ZoneMember", inverse_of: :zone
4
4
  has_many :tax_rates, dependent: :destroy, inverse_of: :zone
5
5
 
6
+ with_options through: :zone_members, source: :zoneable do
7
+ has_many :countries, source_type: "Spree::Country"
8
+ has_many :states, source_type: "Spree::State"
9
+ end
10
+
6
11
  has_many :shipping_method_zones
7
12
  has_many :shipping_methods, through: :shipping_method_zones
8
13
 
@@ -106,6 +111,7 @@ module Spree
106
111
  # Indicates whether the specified zone falls entirely within the zone performing
107
112
  # the check.
108
113
  def contains?(target)
114
+ return true if self == target
109
115
  return false if kind == 'state' && target.kind == 'country'
110
116
  return false if zone_members.empty? || target.zone_members.empty?
111
117
 
@@ -3,9 +3,6 @@ module Spree
3
3
  belongs_to :zone, class_name: 'Spree::Zone', counter_cache: true, inverse_of: :zone_members
4
4
  belongs_to :zoneable, polymorphic: true
5
5
 
6
- def name
7
- return nil if zoneable.nil?
8
- zoneable.name
9
- end
6
+ delegate :name, to: :zoneable, allow_nil: true
10
7
  end
11
8
  end
File without changes
@@ -419,6 +419,7 @@ en:
419
419
  add_state: Add State
420
420
  add_stock: Add Stock
421
421
  add_stock_management: Add Stock Management
422
+ add_taxon: Add taxon
422
423
  add_to_cart: Add To Cart
423
424
  add_to_stock_location: Add to location
424
425
  add_variant: Add Variant
@@ -502,8 +503,8 @@ en:
502
503
  agree_to_privacy_policy: Agree to Privacy Policy
503
504
  agree_to_terms_of_service: Agree to Terms of Service
504
505
  all: All
505
- all_adjustments_closed: All adjustments successfully closed!
506
- all_adjustments_opened: All adjustments successfully opened!
506
+ all_adjustments_finalized: All adjustments successfully finalized!
507
+ all_adjustments_unfinalized: All adjustments successfully unfinalized!
507
508
  all_departments: All departments
508
509
  all_items_have_been_returned: All items have been returned
509
510
  already_signed_up_for_analytics: You have already signed up for Spree Analytics
@@ -554,6 +555,7 @@ en:
554
555
  back_to_reports_list: Back To Reports List
555
556
  back_to_refund_reason_list: Back To Refund Reason List
556
557
  back_to_reimbursement_type_list: Back To Reimbursement Type List
558
+ back_to_return_authorizations_list: Back To Return Authorizations List
557
559
  back_to_rma_reason_list: Back To RMA Reason List
558
560
  back_to_shipping_categories: Back To Shipping Categories
559
561
  back_to_shipping_categories_list: Back To Shipping Categories List
@@ -623,7 +625,6 @@ en:
623
625
  clear_cache_warning: Clearing cache will temporarily reduce the performance of your store.
624
626
  clone: Clone
625
627
  close: Close
626
- close_all_adjustments: Close All Adjustments
627
628
  close_stock_transfer:
628
629
  will_cause: Closing a stock transfer will cause the following
629
630
  no_longer_edit: You will no longer be able to edit the stock transfer in any way
@@ -814,6 +815,7 @@ en:
814
815
  fill_in_customer_info: Please fill in customer info
815
816
  filter_results: Filter Results
816
817
  finalize: Finalize
818
+ finalize_all_adjustments: Finalize All Adjustments
817
819
  finalize_stock_transfer:
818
820
  will_cause: Finalizing a stock transfer will cause the following
819
821
  no_longer_change_items: You will no longer be able to add or edit any transfer items
@@ -884,7 +886,6 @@ en:
884
886
  intercept_email_address: Intercept Email Address
885
887
  intercept_email_instructions: Override email recipient and replace with this address.
886
888
  internal_name: Internal Name
887
- invalid_credit_card: Invalid credit card.
888
889
  invalid_exchange_variant: Invalid exchange variant.
889
890
  invalid_payment_provider: Invalid payment provider.
890
891
  invalid_promotion_action: Invalid promotion action.
@@ -942,6 +943,7 @@ en:
942
943
  make_refund: Make refund
943
944
  make_sure_the_above_reimbursement_amount_is_correct: Make sure the above reimbursement amount is correct
944
945
  manage_promotion_categories: Manage Promotion Categories
946
+ manage_stock: Manage Stock
945
947
  manual_intervention_required: Manual intervention required
946
948
  manage_variants: Manage Variants
947
949
  master_price: Master Price
@@ -1043,7 +1045,6 @@ en:
1043
1045
  number_of_codes: ! '%{count} codes'
1044
1046
  on_hand: On Hand
1045
1047
  open: Open
1046
- open_all_adjustments: Open All Adjustments
1047
1048
  option_type: Option Type
1048
1049
  option_type_placeholder: Choose an option type
1049
1050
  option_types: Option Types
@@ -1549,6 +1550,7 @@ en:
1549
1550
  unable_to_connect_to_gateway: Unable to connect to gateway.
1550
1551
  unable_to_create_reimbursements: Unable to create reimbursements because there are items pending manual intervention.
1551
1552
  unable_to_create_stock_transfer: Unable to create the stock transfer
1553
+ unfinalize_all_adjustments: Unfinalize All Adjustments
1552
1554
  under_price: Under %{price}
1553
1555
  unlock: Unlock
1554
1556
  unrecognized_card_type: Unrecognized card type
@@ -16,4 +16,4 @@ ActiveRecord::Base.transaction do
16
16
  Spree::Country.create!(countries)
17
17
  end
18
18
 
19
- Spree::Config[:default_country_id] = Spree::Country.find_by(name: "United States").id
19
+ Spree::Config[:default_country_id] ||= Spree::Country.find_by(iso: "US").id
@@ -1,17 +1,11 @@
1
1
  eu_vat = Spree::Zone.find_or_create_by!(name: "EU_VAT", description: "Countries that make up the EU VAT zone.")
2
2
  north_america = Spree::Zone.find_or_create_by!(name: "North America", description: "USA + Canada")
3
3
 
4
- ["Poland", "Finland", "Portugal", "Romania", "Germany", "France",
5
- "Slovakia", "Hungary", "Slovenia", "Ireland", "Austria", "Spain",
6
- "Italy", "Belgium", "Sweden", "Latvia", "Bulgaria", "United Kingdom",
7
- "Lithuania", "Cyprus", "Luxembourg", "Malta", "Denmark", "Netherlands",
8
- "Estonia", "Croatia", "Czech Republic", "Greece"].
9
- each do |name|
10
- eu_vat.zone_members.create!(zoneable: Spree::Country.find_by!(name: name))
4
+ %w(PL FI PT RO DE FR SK HU SI IE AT ES IT BE SE LV BG GB LT CY LU MT DK NL EE).
5
+ each do |symbol|
6
+ eu_vat.zone_members.create!(zoneable: Spree::Country.find_by!(iso: symbol))
11
7
  end
12
8
 
13
- ["United States", "Canada"].each do |name|
14
- north_america.zone_members.create!(zoneable: Spree::Country.find_by!(name: name))
9
+ %w(US CA).each do |symbol|
10
+ north_america.zone_members.create!(zoneable: Spree::Country.find_by!(iso: symbol))
15
11
  end
16
-
17
-
@@ -13,7 +13,7 @@ class CreateDefaultStock < ActiveRecord::Migration
13
13
  Spree::Variant.find_each do |variant|
14
14
  stock_item = Spree::StockItem.unscoped.build(stock_location: location, variant: variant)
15
15
  stock_item.send(:count_on_hand=, variant.count_on_hand)
16
- # Avoid running default_scope defined by acts_as_paranoid, related to #3805,
16
+ # Avoid running default_scope defined by acts_as_paranoid, related to https://github.com/spree/spree/issues/3805,
17
17
  # validations would run a query with a delete_at column that might not be present yet
18
18
  stock_item.save! validate: false
19
19
  end
@@ -14,7 +14,7 @@ class AddAddressFieldsToStockLocation < ActiveRecord::Migration
14
14
 
15
15
  usa = Spree::Country.where(:iso => 'US').first
16
16
  # In case USA isn't found.
17
- # See #3115
17
+ # See https://github.com/spree/spree/issues/3115
18
18
  country = usa || Spree::Country.first
19
19
  Spree::Country.reset_column_information
20
20
  Spree::StockLocation.update_all(:country_id => country)
@@ -1,14 +1,17 @@
1
1
  class CreateStoreFromPreferences < ActiveRecord::Migration
2
+ class Store < ActiveRecord::Base
3
+ self.table_name = 'spree_stores'
4
+ end
2
5
  def change
3
6
  preference_store = Spree::Preferences::Store.instance
4
- if store = Spree::Store.where(default: true).first
7
+ if store = Store.where(default: true).first
5
8
  store.meta_description = preference_store.get('spree/app_configuration/default_meta_description') {}
6
9
  store.meta_keywords = preference_store.get('spree/app_configuration/default_meta_keywords') {}
7
10
  store.seo_title = preference_store.get('spree/app_configuration/default_seo_title') {}
8
11
  store.save!
9
12
  else
10
13
  # we set defaults for the things we now require
11
- Spree::Store.new do |s|
14
+ Store.new do |s|
12
15
  s.name = preference_store.get 'spree/app_configuration/site_name' do
13
16
  'Sample Store'
14
17
  end
@@ -1,8 +1,12 @@
1
1
  class AddStoreIdToOrders < ActiveRecord::Migration
2
+ class Store < ActiveRecord::Base
3
+ self.table_name = 'spree_stores'
4
+ end
2
5
  def change
3
6
  add_column :spree_orders, :store_id, :integer
4
- if Spree::Store.default.persisted?
5
- Spree::Order.where(store_id: nil).update_all(store_id: Spree::Store.default.id)
7
+ default_store = Store.where(default: true).first
8
+ if default_store
9
+ Spree::Order.where(store_id: nil).update_all(store_id: default_store.id)
6
10
  end
7
11
  end
8
12
  end