harpiya_api 4.3.0.alpha

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 (249) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE +26 -0
  5. data/Rakefile +29 -0
  6. data/app/assets/javascripts/harpiya/api/main.js +36 -0
  7. data/app/assets/javascripts/harpiya/api/storefront/cart.js +49 -0
  8. data/app/controllers/concerns/harpiya/api/v2/storefront/order_concern.rb +52 -0
  9. data/app/controllers/harpiya/api/base_controller.rb +171 -0
  10. data/app/controllers/harpiya/api/errors_controller.rb +9 -0
  11. data/app/controllers/harpiya/api/v1/addresses_controller.rb +46 -0
  12. data/app/controllers/harpiya/api/v1/checkouts_controller.rb +106 -0
  13. data/app/controllers/harpiya/api/v1/classifications_controller.rb +20 -0
  14. data/app/controllers/harpiya/api/v1/countries_controller.rb +22 -0
  15. data/app/controllers/harpiya/api/v1/credit_cards_controller.rb +26 -0
  16. data/app/controllers/harpiya/api/v1/customer_returns_controller.rb +25 -0
  17. data/app/controllers/harpiya/api/v1/images_controller.rb +58 -0
  18. data/app/controllers/harpiya/api/v1/inventory_units_controller.rb +54 -0
  19. data/app/controllers/harpiya/api/v1/line_items_controller.rb +70 -0
  20. data/app/controllers/harpiya/api/v1/option_types_controller.rb +60 -0
  21. data/app/controllers/harpiya/api/v1/option_values_controller.rb +62 -0
  22. data/app/controllers/harpiya/api/v1/orders_controller.rb +156 -0
  23. data/app/controllers/harpiya/api/v1/payments_controller.rb +82 -0
  24. data/app/controllers/harpiya/api/v1/product_properties_controller.rb +73 -0
  25. data/app/controllers/harpiya/api/v1/products_controller.rb +131 -0
  26. data/app/controllers/harpiya/api/v1/promotions_controller.rb +30 -0
  27. data/app/controllers/harpiya/api/v1/properties_controller.rb +70 -0
  28. data/app/controllers/harpiya/api/v1/reimbursements_controller.rb +25 -0
  29. data/app/controllers/harpiya/api/v1/return_authorizations_controller.rb +70 -0
  30. data/app/controllers/harpiya/api/v1/shipments_controller.rb +196 -0
  31. data/app/controllers/harpiya/api/v1/states_controller.rb +36 -0
  32. data/app/controllers/harpiya/api/v1/stock_items_controller.rb +82 -0
  33. data/app/controllers/harpiya/api/v1/stock_locations_controller.rb +53 -0
  34. data/app/controllers/harpiya/api/v1/stock_movements_controller.rb +45 -0
  35. data/app/controllers/harpiya/api/v1/stores_controller.rb +56 -0
  36. data/app/controllers/harpiya/api/v1/taxonomies_controller.rb +67 -0
  37. data/app/controllers/harpiya/api/v1/taxons_controller.rb +100 -0
  38. data/app/controllers/harpiya/api/v1/users_controller.rb +97 -0
  39. data/app/controllers/harpiya/api/v1/variants_controller.rb +81 -0
  40. data/app/controllers/harpiya/api/v1/zones_controller.rb +55 -0
  41. data/app/controllers/harpiya/api/v2/base_controller.rb +167 -0
  42. data/app/controllers/harpiya/api/v2/platform/addresses_controller.rb +19 -0
  43. data/app/controllers/harpiya/api/v2/platform/countries_controller.rb +19 -0
  44. data/app/controllers/harpiya/api/v2/platform/menu_items_controller.rb +35 -0
  45. data/app/controllers/harpiya/api/v2/platform/menus_controller.rb +19 -0
  46. data/app/controllers/harpiya/api/v2/platform/option_types_controller.rb +15 -0
  47. data/app/controllers/harpiya/api/v2/platform/option_values_controller.rb +19 -0
  48. data/app/controllers/harpiya/api/v2/platform/products_controller.rb +27 -0
  49. data/app/controllers/harpiya/api/v2/platform/resource_controller.rb +102 -0
  50. data/app/controllers/harpiya/api/v2/platform/taxons_controller.rb +27 -0
  51. data/app/controllers/harpiya/api/v2/platform/users_controller.rb +23 -0
  52. data/app/controllers/harpiya/api/v2/resource_controller.rb +59 -0
  53. data/app/controllers/harpiya/api/v2/storefront/account/addresses_controller.rb +75 -0
  54. data/app/controllers/harpiya/api/v2/storefront/account/credit_cards_controller.rb +39 -0
  55. data/app/controllers/harpiya/api/v2/storefront/account/orders_controller.rb +46 -0
  56. data/app/controllers/harpiya/api/v2/storefront/account_controller.rb +52 -0
  57. data/app/controllers/harpiya/api/v2/storefront/cart_controller.rb +195 -0
  58. data/app/controllers/harpiya/api/v2/storefront/checkout_controller.rb +136 -0
  59. data/app/controllers/harpiya/api/v2/storefront/countries_controller.rb +50 -0
  60. data/app/controllers/harpiya/api/v2/storefront/menus_controller.rb +42 -0
  61. data/app/controllers/harpiya/api/v2/storefront/order_status_controller.rb +34 -0
  62. data/app/controllers/harpiya/api/v2/storefront/products_controller.rb +55 -0
  63. data/app/controllers/harpiya/api/v2/storefront/stores_controller.rb +23 -0
  64. data/app/controllers/harpiya/api/v2/storefront/taxons_controller.rb +47 -0
  65. data/app/helpers/harpiya/api/api_helpers.rb +190 -0
  66. data/app/helpers/harpiya/api/v2/collection_options_helpers.rb +46 -0
  67. data/app/helpers/harpiya/api/v2/display_money_helper.rb +43 -0
  68. data/app/models/concerns/harpiya/user_api_authentication.rb +19 -0
  69. data/app/models/concerns/harpiya/user_api_methods.rb +7 -0
  70. data/app/models/harpiya/api_configuration.rb +8 -0
  71. data/app/models/harpiya/api_dependencies.rb +98 -0
  72. data/app/serializers/concerns/harpiya/api/v2/resource_serializer_concern.rb +16 -0
  73. data/app/serializers/harpiya/api/v2/base_serializer.rb +32 -0
  74. data/app/serializers/harpiya/api/v2/platform/address_serializer.rb +15 -0
  75. data/app/serializers/harpiya/api/v2/platform/base_serializer.rb +10 -0
  76. data/app/serializers/harpiya/api/v2/platform/country_serializer.rb +13 -0
  77. data/app/serializers/harpiya/api/v2/platform/image_serializer.rb +11 -0
  78. data/app/serializers/harpiya/api/v2/platform/menu_item_serializer.rb +22 -0
  79. data/app/serializers/harpiya/api/v2/platform/menu_serializer.rb +14 -0
  80. data/app/serializers/harpiya/api/v2/platform/option_type_serializer.rb +13 -0
  81. data/app/serializers/harpiya/api/v2/platform/option_value_serializer.rb +13 -0
  82. data/app/serializers/harpiya/api/v2/platform/product_property_serializer.rb +11 -0
  83. data/app/serializers/harpiya/api/v2/platform/product_serializer.rb +28 -0
  84. data/app/serializers/harpiya/api/v2/platform/state_serializer.rb +13 -0
  85. data/app/serializers/harpiya/api/v2/platform/store_serializer.rb +14 -0
  86. data/app/serializers/harpiya/api/v2/platform/taxon_image_serializer.rb +11 -0
  87. data/app/serializers/harpiya/api/v2/platform/taxon_serializer.rb +37 -0
  88. data/app/serializers/harpiya/api/v2/platform/taxonomy_serializer.rb +11 -0
  89. data/app/serializers/harpiya/api/v2/platform/user_serializer.rb +21 -0
  90. data/app/serializers/harpiya/api/v2/platform/variant_serializer.rb +15 -0
  91. data/app/serializers/harpiya/v2/storefront/address_serializer.rb +20 -0
  92. data/app/serializers/harpiya/v2/storefront/base_serializer.rb +10 -0
  93. data/app/serializers/harpiya/v2/storefront/cart_serializer.rb +36 -0
  94. data/app/serializers/harpiya/v2/storefront/country_serializer.rb +24 -0
  95. data/app/serializers/harpiya/v2/storefront/credit_card_serializer.rb +13 -0
  96. data/app/serializers/harpiya/v2/storefront/estimated_shipping_rate_serializer.rb +29 -0
  97. data/app/serializers/harpiya/v2/storefront/image_serializer.rb +11 -0
  98. data/app/serializers/harpiya/v2/storefront/line_item_serializer.rb +19 -0
  99. data/app/serializers/harpiya/v2/storefront/menu_item_serializer.rb +38 -0
  100. data/app/serializers/harpiya/v2/storefront/menu_serializer.rb +14 -0
  101. data/app/serializers/harpiya/v2/storefront/option_type_serializer.rb +13 -0
  102. data/app/serializers/harpiya/v2/storefront/option_value_serializer.rb +13 -0
  103. data/app/serializers/harpiya/v2/storefront/payment_method_serializer.rb +11 -0
  104. data/app/serializers/harpiya/v2/storefront/payment_serializer.rb +15 -0
  105. data/app/serializers/harpiya/v2/storefront/product_property_serializer.rb +19 -0
  106. data/app/serializers/harpiya/v2/storefront/product_serializer.rb +67 -0
  107. data/app/serializers/harpiya/v2/storefront/promotion_serializer.rb +12 -0
  108. data/app/serializers/harpiya/v2/storefront/shipment_serializer.rb +20 -0
  109. data/app/serializers/harpiya/v2/storefront/shipping_rate_serializer.rb +16 -0
  110. data/app/serializers/harpiya/v2/storefront/state_serializer.rb +11 -0
  111. data/app/serializers/harpiya/v2/storefront/stock_location_serializer.rb +11 -0
  112. data/app/serializers/harpiya/v2/storefront/store_credit_category_serializer.rb +11 -0
  113. data/app/serializers/harpiya/v2/storefront/store_credit_event_serializer.rb +15 -0
  114. data/app/serializers/harpiya/v2/storefront/store_credit_serializer.rb +17 -0
  115. data/app/serializers/harpiya/v2/storefront/store_credit_type_serializer.rb +11 -0
  116. data/app/serializers/harpiya/v2/storefront/store_serializer.rb +23 -0
  117. data/app/serializers/harpiya/v2/storefront/taxon_image_serializer.rb +11 -0
  118. data/app/serializers/harpiya/v2/storefront/taxon_serializer.rb +36 -0
  119. data/app/serializers/harpiya/v2/storefront/taxonomy_serializer.rb +11 -0
  120. data/app/serializers/harpiya/v2/storefront/user_serializer.rb +31 -0
  121. data/app/serializers/harpiya/v2/storefront/variant_serializer.rb +49 -0
  122. data/app/services/harpiya/api/error_handler.rb +40 -0
  123. data/app/views/harpiya/api/errors/gateway_error.rabl +2 -0
  124. data/app/views/harpiya/api/errors/invalid_api_key.rabl +2 -0
  125. data/app/views/harpiya/api/errors/invalid_resource.rabl +3 -0
  126. data/app/views/harpiya/api/errors/must_specify_api_key.rabl +2 -0
  127. data/app/views/harpiya/api/errors/not_found.rabl +2 -0
  128. data/app/views/harpiya/api/errors/unauthorized.rabl +2 -0
  129. data/app/views/harpiya/api/v1/addresses/show.rabl +10 -0
  130. data/app/views/harpiya/api/v1/adjustments/show.rabl +4 -0
  131. data/app/views/harpiya/api/v1/countries/index.rabl +7 -0
  132. data/app/views/harpiya/api/v1/countries/show.rabl +5 -0
  133. data/app/views/harpiya/api/v1/credit_cards/index.rabl +7 -0
  134. data/app/views/harpiya/api/v1/credit_cards/show.rabl +3 -0
  135. data/app/views/harpiya/api/v1/customer_returns/index.rabl +7 -0
  136. data/app/views/harpiya/api/v1/images/index.rabl +4 -0
  137. data/app/views/harpiya/api/v1/images/new.rabl +3 -0
  138. data/app/views/harpiya/api/v1/images/show.rabl +6 -0
  139. data/app/views/harpiya/api/v1/inventory_units/show.rabl +2 -0
  140. data/app/views/harpiya/api/v1/line_items/new.rabl +3 -0
  141. data/app/views/harpiya/api/v1/line_items/show.rabl +14 -0
  142. data/app/views/harpiya/api/v1/option_types/index.rabl +3 -0
  143. data/app/views/harpiya/api/v1/option_types/new.rabl +3 -0
  144. data/app/views/harpiya/api/v1/option_types/show.rabl +5 -0
  145. data/app/views/harpiya/api/v1/option_values/index.rabl +3 -0
  146. data/app/views/harpiya/api/v1/option_values/new.rabl +3 -0
  147. data/app/views/harpiya/api/v1/option_values/show.rabl +2 -0
  148. data/app/views/harpiya/api/v1/orders/address.rabl +0 -0
  149. data/app/views/harpiya/api/v1/orders/canceled.rabl +0 -0
  150. data/app/views/harpiya/api/v1/orders/cart.rabl +0 -0
  151. data/app/views/harpiya/api/v1/orders/complete.rabl +0 -0
  152. data/app/views/harpiya/api/v1/orders/could_not_apply_coupon.rabl +2 -0
  153. data/app/views/harpiya/api/v1/orders/could_not_transition.rabl +3 -0
  154. data/app/views/harpiya/api/v1/orders/index.rabl +7 -0
  155. data/app/views/harpiya/api/v1/orders/insufficient_quantity.rabl +2 -0
  156. data/app/views/harpiya/api/v1/orders/invalid_shipping_method.rabl +2 -0
  157. data/app/views/harpiya/api/v1/orders/mine.rabl +9 -0
  158. data/app/views/harpiya/api/v1/orders/order.rabl +10 -0
  159. data/app/views/harpiya/api/v1/orders/payment.rabl +3 -0
  160. data/app/views/harpiya/api/v1/orders/show.rabl +51 -0
  161. data/app/views/harpiya/api/v1/payments/credit_over_limit.rabl +2 -0
  162. data/app/views/harpiya/api/v1/payments/index.rabl +7 -0
  163. data/app/views/harpiya/api/v1/payments/new.rabl +5 -0
  164. data/app/views/harpiya/api/v1/payments/show.rabl +2 -0
  165. data/app/views/harpiya/api/v1/payments/update_forbidden.rabl +2 -0
  166. data/app/views/harpiya/api/v1/product_properties/index.rabl +7 -0
  167. data/app/views/harpiya/api/v1/product_properties/new.rabl +2 -0
  168. data/app/views/harpiya/api/v1/product_properties/show.rabl +2 -0
  169. data/app/views/harpiya/api/v1/products/index.rabl +9 -0
  170. data/app/views/harpiya/api/v1/products/new.rabl +3 -0
  171. data/app/views/harpiya/api/v1/products/product.rabl +1 -0
  172. data/app/views/harpiya/api/v1/products/show.rabl +36 -0
  173. data/app/views/harpiya/api/v1/promotions/handler.rabl +5 -0
  174. data/app/views/harpiya/api/v1/promotions/show.rabl +2 -0
  175. data/app/views/harpiya/api/v1/properties/index.rabl +7 -0
  176. data/app/views/harpiya/api/v1/properties/new.rabl +2 -0
  177. data/app/views/harpiya/api/v1/properties/show.rabl +2 -0
  178. data/app/views/harpiya/api/v1/reimbursements/index.rabl +7 -0
  179. data/app/views/harpiya/api/v1/return_authorizations/index.rabl +7 -0
  180. data/app/views/harpiya/api/v1/return_authorizations/new.rabl +3 -0
  181. data/app/views/harpiya/api/v1/return_authorizations/show.rabl +2 -0
  182. data/app/views/harpiya/api/v1/shared/stock_location_required.rabl +2 -0
  183. data/app/views/harpiya/api/v1/shipments/big.rabl +48 -0
  184. data/app/views/harpiya/api/v1/shipments/cannot_ready_shipment.rabl +2 -0
  185. data/app/views/harpiya/api/v1/shipments/mine.rabl +9 -0
  186. data/app/views/harpiya/api/v1/shipments/show.rabl +32 -0
  187. data/app/views/harpiya/api/v1/shipments/small.rabl +37 -0
  188. data/app/views/harpiya/api/v1/shipping_rates/show.rabl +2 -0
  189. data/app/views/harpiya/api/v1/states/index.rabl +12 -0
  190. data/app/views/harpiya/api/v1/states/show.rabl +2 -0
  191. data/app/views/harpiya/api/v1/stock_items/index.rabl +7 -0
  192. data/app/views/harpiya/api/v1/stock_items/show.rabl +5 -0
  193. data/app/views/harpiya/api/v1/stock_locations/index.rabl +7 -0
  194. data/app/views/harpiya/api/v1/stock_locations/show.rabl +8 -0
  195. data/app/views/harpiya/api/v1/stock_movements/index.rabl +7 -0
  196. data/app/views/harpiya/api/v1/stock_movements/show.rabl +5 -0
  197. data/app/views/harpiya/api/v1/stores/index.rabl +4 -0
  198. data/app/views/harpiya/api/v1/stores/show.rabl +2 -0
  199. data/app/views/harpiya/api/v1/tags/index.rabl +9 -0
  200. data/app/views/harpiya/api/v1/taxonomies/index.rabl +7 -0
  201. data/app/views/harpiya/api/v1/taxonomies/jstree.rabl +7 -0
  202. data/app/views/harpiya/api/v1/taxonomies/nested.rabl +11 -0
  203. data/app/views/harpiya/api/v1/taxonomies/new.rabl +3 -0
  204. data/app/views/harpiya/api/v1/taxonomies/show.rabl +15 -0
  205. data/app/views/harpiya/api/v1/taxons/index.rabl +10 -0
  206. data/app/views/harpiya/api/v1/taxons/jstree.rabl +7 -0
  207. data/app/views/harpiya/api/v1/taxons/new.rabl +3 -0
  208. data/app/views/harpiya/api/v1/taxons/show.rabl +6 -0
  209. data/app/views/harpiya/api/v1/taxons/taxons.rabl +5 -0
  210. data/app/views/harpiya/api/v1/users/index.rabl +7 -0
  211. data/app/views/harpiya/api/v1/users/new.rabl +3 -0
  212. data/app/views/harpiya/api/v1/users/show.rabl +11 -0
  213. data/app/views/harpiya/api/v1/variants/big.rabl +14 -0
  214. data/app/views/harpiya/api/v1/variants/index.rabl +9 -0
  215. data/app/views/harpiya/api/v1/variants/new.rabl +2 -0
  216. data/app/views/harpiya/api/v1/variants/show.rabl +3 -0
  217. data/app/views/harpiya/api/v1/variants/small.rabl +18 -0
  218. data/app/views/harpiya/api/v1/zones/index.rabl +7 -0
  219. data/app/views/harpiya/api/v1/zones/show.rabl +6 -0
  220. data/config/initializers/doorkeeper.rb +48 -0
  221. data/config/initializers/json_api_mime_types.rb +8 -0
  222. data/config/initializers/rabl.rb +9 -0
  223. data/config/initializers/user_class_extensions.rb +7 -0
  224. data/config/locales/en.yml +36 -0
  225. data/config/routes.rb +295 -0
  226. data/db/migrate/20100107141738_add_api_key_to_harpiya_users.rb +7 -0
  227. data/db/migrate/20120411123334_resize_api_key_field.rb +7 -0
  228. data/db/migrate/20120530054546_rename_api_key_to_harpiya_api_key.rb +7 -0
  229. data/db/migrate/20131017162334_add_index_to_user_harpiya_api_key.rb +7 -0
  230. data/db/migrate/20180320110726_create_doorkeeper_tables.rb +69 -0
  231. data/docs/oauth/index.yml +140 -0
  232. data/docs/v2/platform/index.yaml +599 -0
  233. data/docs/v2/storefront/index.yaml +5585 -0
  234. data/harpiya_api.gemspec +36 -0
  235. data/lib/harpiya/api.rb +11 -0
  236. data/lib/harpiya/api/controller_setup.rb +19 -0
  237. data/lib/harpiya/api/engine.rb +30 -0
  238. data/lib/harpiya/api/responders.rb +11 -0
  239. data/lib/harpiya/api/responders/rabl_template.rb +28 -0
  240. data/lib/harpiya/api/testing_support/caching.rb +10 -0
  241. data/lib/harpiya/api/testing_support/helpers.rb +44 -0
  242. data/lib/harpiya/api/testing_support/setup.rb +16 -0
  243. data/lib/harpiya/api/testing_support/v2/base.rb +13 -0
  244. data/lib/harpiya/api/testing_support/v2/current_order.rb +79 -0
  245. data/lib/harpiya/api/testing_support/v2/platform_contexts.rb +213 -0
  246. data/lib/harpiya_api.rb +4 -0
  247. data/script/rails +9 -0
  248. data/spec/fixtures/thinking-cat.jpg +0 -0
  249. metadata +418 -0
@@ -0,0 +1,30 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class PromotionsController < Harpiya::Api::BaseController
5
+ before_action :requires_admin
6
+ before_action :load_promotion
7
+
8
+ def show
9
+ if @promotion
10
+ respond_with(@promotion, default_template: :show)
11
+ else
12
+ raise ActiveRecord::RecordNotFound
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def requires_admin
19
+ return if @current_user_roles.include?('admin')
20
+
21
+ unauthorized and return
22
+ end
23
+
24
+ def load_promotion
25
+ @promotion = Harpiya::Promotion.find_by(id: params[:id]) || Harpiya::Promotion.with_coupon_code(params[:id])
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,70 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class PropertiesController < Harpiya::Api::BaseController
5
+ before_action :find_property, only: [:show, :update, :destroy]
6
+
7
+ def index
8
+ @properties = Harpiya::Property.accessible_by(current_ability)
9
+
10
+ @properties = if params[:ids]
11
+ @properties.where(id: params[:ids].split(',').flatten)
12
+ else
13
+ @properties.ransack(params[:q]).result
14
+ end
15
+
16
+ @properties = @properties.page(params[:page]).per(params[:per_page])
17
+ respond_with(@properties)
18
+ end
19
+
20
+ def show
21
+ respond_with(@property)
22
+ end
23
+
24
+ def new; end
25
+
26
+ def create
27
+ authorize! :create, Property
28
+ @property = Harpiya::Property.new(property_params)
29
+ if @property.save
30
+ respond_with(@property, status: 201, default_template: :show)
31
+ else
32
+ invalid_resource!(@property)
33
+ end
34
+ end
35
+
36
+ def update
37
+ if @property
38
+ authorize! :update, @property
39
+ @property.update(property_params)
40
+ respond_with(@property, status: 200, default_template: :show)
41
+ else
42
+ invalid_resource!(@property)
43
+ end
44
+ end
45
+
46
+ def destroy
47
+ if @property
48
+ authorize! :destroy, @property
49
+ @property.destroy
50
+ respond_with(@property, status: 204)
51
+ else
52
+ invalid_resource!(@property)
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def find_property
59
+ @property = Harpiya::Property.accessible_by(current_ability, :show).find(params[:id])
60
+ rescue ActiveRecord::RecordNotFound
61
+ @property = Harpiya::Property.accessible_by(current_ability, :show).find_by!(name: params[:id])
62
+ end
63
+
64
+ def property_params
65
+ params.require(:property).permit(permitted_property_attributes)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,25 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class ReimbursementsController < Harpiya::Api::BaseController
5
+ def index
6
+ collection(Harpiya::Reimbursement)
7
+ respond_with(@collection)
8
+ end
9
+
10
+ private
11
+
12
+ def collection(resource)
13
+ return @collection if @collection.present?
14
+
15
+ params[:q] ||= {}
16
+
17
+ @collection = resource.all
18
+ # @search needs to be defined as this is passed to search_form_for
19
+ @search = @collection.ransack(params[:q])
20
+ @collection = @search.result.order(created_at: :desc).page(params[:page]).per(params[:per_page])
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,70 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class ReturnAuthorizationsController < Harpiya::Api::BaseController
5
+ def create
6
+ authorize! :create, ReturnAuthorization
7
+ @return_authorization = order.return_authorizations.build(return_authorization_params)
8
+ if @return_authorization.save
9
+ respond_with(@return_authorization, status: 201, default_template: :show)
10
+ else
11
+ invalid_resource!(@return_authorization)
12
+ end
13
+ end
14
+
15
+ def destroy
16
+ @return_authorization = order.return_authorizations.accessible_by(current_ability, :destroy).find(params[:id])
17
+ @return_authorization.destroy
18
+ respond_with(@return_authorization, status: 204)
19
+ end
20
+
21
+ def index
22
+ authorize! :admin, ReturnAuthorization
23
+ @return_authorizations = order.return_authorizations.accessible_by(current_ability).
24
+ ransack(params[:q]).result.
25
+ page(params[:page]).per(params[:per_page])
26
+ respond_with(@return_authorizations)
27
+ end
28
+
29
+ def new
30
+ authorize! :admin, ReturnAuthorization
31
+ end
32
+
33
+ def show
34
+ authorize! :admin, ReturnAuthorization
35
+ @return_authorization = order.return_authorizations.accessible_by(current_ability, :show).find(params[:id])
36
+ respond_with(@return_authorization)
37
+ end
38
+
39
+ def update
40
+ @return_authorization = order.return_authorizations.accessible_by(current_ability, :update).find(params[:id])
41
+ if @return_authorization.update(return_authorization_params)
42
+ respond_with(@return_authorization, default_template: :show)
43
+ else
44
+ invalid_resource!(@return_authorization)
45
+ end
46
+ end
47
+
48
+ def cancel
49
+ @return_authorization = order.return_authorizations.accessible_by(current_ability, :update).find(params[:id])
50
+ if @return_authorization.cancel
51
+ respond_with @return_authorization, default_template: :show
52
+ else
53
+ invalid_resource!(@return_authorization)
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def order
60
+ @order ||= Harpiya::Order.find_by!(number: order_id)
61
+ authorize! :show, @order
62
+ end
63
+
64
+ def return_authorization_params
65
+ params.require(:return_authorization).permit(permitted_return_authorization_attributes)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,196 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class ShipmentsController < Harpiya::Api::BaseController
5
+ before_action :find_and_update_shipment, only: [:ship, :ready, :add, :remove]
6
+ before_action :load_transfer_params, only: [:transfer_to_location, :transfer_to_shipment]
7
+
8
+ def mine
9
+ if current_api_user.persisted?
10
+ @shipments = Harpiya::Shipment.
11
+ reverse_chronological.
12
+ joins(:order).
13
+ where(harpiya_orders: { user_id: current_api_user.id }).
14
+ includes(mine_includes).
15
+ ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
16
+ else
17
+ render 'harpiya/api/errors/unauthorized', status: :unauthorized
18
+ end
19
+ end
20
+
21
+ def create
22
+ @order = Harpiya::Order.find_by!(number: params.fetch(:shipment).fetch(:order_id))
23
+ authorize! :show, @order
24
+ authorize! :create, Shipment
25
+ quantity = params[:quantity].to_i
26
+ @shipment = @order.shipments.create(stock_location_id: params.fetch(:stock_location_id))
27
+
28
+ @line_item = Harpiya::Dependencies.cart_add_item_service.constantize.call(order: @order,
29
+ variant: variant,
30
+ quantity: quantity,
31
+ options: { shipment: @shipment }).value
32
+
33
+ respond_with(@shipment.reload, default_template: :show)
34
+ end
35
+
36
+ def update
37
+ @shipment = Harpiya::Shipment.accessible_by(current_ability, :update).readonly(false).find_by!(number: params[:id])
38
+ @shipment.update_attributes_and_order(shipment_params)
39
+
40
+ respond_with(@shipment.reload, default_template: :show)
41
+ end
42
+
43
+ def ready
44
+ unless @shipment.ready?
45
+ if @shipment.can_ready?
46
+ @shipment.ready!
47
+ else
48
+ render 'harpiya/api/v1/shipments/cannot_ready_shipment', status: 422 and return
49
+ end
50
+ end
51
+ respond_with(@shipment, default_template: :show)
52
+ end
53
+
54
+ def ship
55
+ @shipment.ship! unless @shipment.shipped?
56
+ respond_with(@shipment, default_template: :show)
57
+ end
58
+
59
+ def add
60
+ quantity = params[:quantity].to_i
61
+
62
+ Harpiya::Dependencies.cart_add_item_service.constantize.call(order: @shipment.order,
63
+ variant: variant,
64
+ quantity: quantity,
65
+ options: { shipment: @shipment })
66
+
67
+ respond_with(@shipment, default_template: :show)
68
+ end
69
+
70
+ def remove
71
+ quantity = if params.key?(:quantity)
72
+ params[:quantity].to_i
73
+ else
74
+ @shipment.inventory_units_for(variant).sum(:quantity)
75
+ end
76
+
77
+ Harpiya::Dependencies.cart_remove_item_service.constantize.call(order: @shipment.order,
78
+ variant: variant,
79
+ quantity: quantity,
80
+ options: { shipment: @shipment })
81
+
82
+ if @shipment.inventory_units.any?
83
+ @shipment.reload
84
+ else
85
+ @shipment.destroy!
86
+ end
87
+
88
+ respond_with(@shipment, default_template: :show)
89
+ end
90
+
91
+ def transfer_to_location
92
+ @stock_location = Harpiya::StockLocation.find(params[:stock_location_id])
93
+
94
+ unless @quantity > 0
95
+ unprocessable_entity("#{Harpiya.t(:shipment_transfer_errors_occurred, scope: 'api')} \n #{Harpiya.t(:negative_quantity, scope: 'api')}")
96
+ return
97
+ end
98
+
99
+ transfer = @original_shipment.transfer_to_location(@variant, @quantity, @stock_location)
100
+ if transfer.valid?
101
+ transfer.run!
102
+ render json: { message: Harpiya.t(:shipment_transfer_success) }, status: 201
103
+ else
104
+ render json: { message: transfer.errors.full_messages.to_sentence }, status: 422
105
+ end
106
+ end
107
+
108
+ def transfer_to_shipment
109
+ @target_shipment = Harpiya::Shipment.find_by!(number: params[:target_shipment_number])
110
+
111
+ error =
112
+ if @quantity < 0 && @target_shipment == @original_shipment
113
+ "#{Harpiya.t(:negative_quantity, scope: 'api')}, \n#{Harpiya.t('wrong_shipment_target', scope: 'api')}"
114
+ elsif @target_shipment == @original_shipment
115
+ Harpiya.t(:wrong_shipment_target, scope: 'api')
116
+ elsif @quantity < 0
117
+ Harpiya.t(:negative_quantity, scope: 'api')
118
+ end
119
+
120
+ if error
121
+ unprocessable_entity("#{Harpiya.t(:shipment_transfer_errors_occurred, scope: 'api')} \n#{error}")
122
+ else
123
+ transfer = @original_shipment.transfer_to_shipment(@variant, @quantity, @target_shipment)
124
+ if transfer.valid?
125
+ transfer.run!
126
+ render json: { message: Harpiya.t(:shipment_transfer_success) }, status: 201
127
+ else
128
+ render json: { message: transfer.errors.full_messages }, status: 422
129
+ end
130
+ end
131
+ end
132
+
133
+ private
134
+
135
+ def load_transfer_params
136
+ @original_shipment = Harpiya::Shipment.find_by!(number: params[:original_shipment_number])
137
+ @variant = Harpiya::Variant.find(params[:variant_id])
138
+ @quantity = params[:quantity].to_i
139
+ authorize! :show, @original_shipment
140
+ authorize! :create, Shipment
141
+ end
142
+
143
+ def find_and_update_shipment
144
+ @shipment = Harpiya::Shipment.accessible_by(current_ability, :update).readonly(false).find_by!(number: params[:id])
145
+ @shipment.update(shipment_params)
146
+ @shipment.reload
147
+ end
148
+
149
+ def shipment_params
150
+ if params[:shipment] && !params[:shipment].empty?
151
+ params.require(:shipment).permit(permitted_shipment_attributes)
152
+ else
153
+ {}
154
+ end
155
+ end
156
+
157
+ def variant
158
+ @variant ||= Harpiya::Variant.unscoped.find(params.fetch(:variant_id))
159
+ end
160
+
161
+ def mine_includes
162
+ {
163
+ order: {
164
+ bill_address: {
165
+ state: {},
166
+ country: {}
167
+ },
168
+ ship_address: {
169
+ state: {},
170
+ country: {}
171
+ },
172
+ adjustments: {},
173
+ payments: {
174
+ order: {},
175
+ payment_method: {}
176
+ }
177
+ },
178
+ inventory_units: {
179
+ line_item: {
180
+ product: {},
181
+ variant: {}
182
+ },
183
+ variant: {
184
+ product: {},
185
+ default_price: {},
186
+ option_values: {
187
+ option_type: {}
188
+ }
189
+ }
190
+ }
191
+ }
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,36 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class StatesController < Harpiya::Api::BaseController
5
+ skip_before_action :authenticate_user
6
+
7
+ def index
8
+ @states = scope.ransack(params[:q]).result.includes(:country)
9
+
10
+ if params[:page] || params[:per_page]
11
+ @states = @states.page(params[:page]).per(params[:per_page])
12
+ end
13
+
14
+ state = @states.last
15
+ respond_with(@states) if stale?(state)
16
+ end
17
+
18
+ def show
19
+ @state = scope.find(params[:id])
20
+ respond_with(@state)
21
+ end
22
+
23
+ private
24
+
25
+ def scope
26
+ if params[:country_id]
27
+ @country = Country.accessible_by(current_ability, :show).find(params[:country_id])
28
+ @country.states.accessible_by(current_ability).order('name ASC')
29
+ else
30
+ State.accessible_by(current_ability).order('name ASC')
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,82 @@
1
+ module Harpiya
2
+ module Api
3
+ module V1
4
+ class StockItemsController < Harpiya::Api::BaseController
5
+ before_action :stock_location, except: [:update, :destroy]
6
+
7
+ def index
8
+ @stock_items = scope.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
9
+ respond_with(@stock_items)
10
+ end
11
+
12
+ def show
13
+ @stock_item = scope.find(params[:id])
14
+ respond_with(@stock_item)
15
+ end
16
+
17
+ def create
18
+ authorize! :create, StockItem
19
+
20
+ count_on_hand = 0
21
+ if params[:stock_item].key?(:count_on_hand)
22
+ count_on_hand = params[:stock_item][:count_on_hand].to_i
23
+ end
24
+
25
+ @stock_item = scope.new(stock_item_params)
26
+ if @stock_item.save
27
+ @stock_item.adjust_count_on_hand(count_on_hand)
28
+ respond_with(@stock_item, status: 201, default_template: :show)
29
+ else
30
+ invalid_resource!(@stock_item)
31
+ end
32
+ end
33
+
34
+ def update
35
+ @stock_item = StockItem.accessible_by(current_ability, :update).find(params[:id])
36
+
37
+ if params[:stock_item].key?(:backorderable)
38
+ @stock_item.backorderable = params[:stock_item][:backorderable]
39
+ @stock_item.save
40
+ end
41
+
42
+ count_on_hand = 0
43
+ if params[:stock_item].key?(:count_on_hand)
44
+ count_on_hand = params[:stock_item][:count_on_hand].to_i
45
+ params[:stock_item].delete(:count_on_hand)
46
+ end
47
+
48
+ updated = params[:stock_item][:force] ? @stock_item.set_count_on_hand(count_on_hand)
49
+ : @stock_item.adjust_count_on_hand(count_on_hand)
50
+
51
+ if updated
52
+ respond_with(@stock_item, status: 200, default_template: :show)
53
+ else
54
+ invalid_resource!(@stock_item)
55
+ end
56
+ end
57
+
58
+ def destroy
59
+ @stock_item = StockItem.accessible_by(current_ability, :destroy).find(params[:id])
60
+ @stock_item.destroy
61
+ respond_with(@stock_item, status: 204)
62
+ end
63
+
64
+ private
65
+
66
+ def stock_location
67
+ render 'harpiya/api/v1/shared/stock_location_required', status: 422 and return unless params[:stock_location_id]
68
+ @stock_location ||= StockLocation.accessible_by(current_ability, :show).find(params[:stock_location_id])
69
+ end
70
+
71
+ def scope
72
+ includes = { variant: [{ option_values: :option_type }, :product] }
73
+ @stock_location.stock_items.accessible_by(current_ability, :show).includes(includes)
74
+ end
75
+
76
+ def stock_item_params
77
+ params.require(:stock_item).permit(permitted_stock_item_attributes)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end