Class: Spree::Orders::Create
- Inherits:
-
Object
- Object
- Spree::Orders::Create
- Includes:
- ServiceModule::Base
- Defined in:
- app/services/spree/orders/create.rb
Overview
Admin-side order creation. One-shot: customer, items, addresses, currency, market, locale, notes, metadata, and a coupon code in a single call. Invalid coupons are non-fatal — the order is created and ‘result.value` carries `discount_application_errors`.
Standalone from Spree::Carts::Create (storefront). Admin-created orders are first-class Spree::Order records (status: ‘draft’) in 5.x and remain so in 6.0 — Spree::Cart in 6.0 is storefront-only.
Instance Attribute Summary collapse
-
#discount_application_errors ⇒ Object
readonly
Returns the value of attribute discount_application_errors.
Instance Method Summary collapse
Methods included from ServiceModule::Base
Instance Attribute Details
#discount_application_errors ⇒ Object (readonly)
Returns the value of attribute discount_application_errors.
14 15 16 |
# File 'app/services/spree/orders/create.rb', line 14 def discount_application_errors @discount_application_errors end |
Instance Method Details
#call(store:, user: nil, params: {}) ⇒ Spree::ServiceModule::Result
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'app/services/spree/orders/create.rb', line 20 def call(store:, user: nil, params: {}) @store = store @user = user @params = params.to_h.deep_symbolize_keys @discount_application_errors = [] return failure(:store_is_required) if store.nil? order = nil ApplicationRecord.transaction do order = build_order assign_addresses(order) order. = @params[:tags] if @params[:tags] order.save! add_items(order) if @params[:items].present? build_shipments(order) apply_coupon(order) if @params[:coupon_code].present? order.update_with_updater! end success(order.reload) rescue ActiveRecord::RecordInvalid => e failure(e.record, e.record.errors..to_sentence) end |