2014-03-28 1 views
0

고객이 지정된 요일에 배달 될 제품을 주문할 수있는 Spree 기반 프로그램이 있습니다. 올바른 제품으로 여러 주문을 생성하기 위해 주문 생성 로직을 재정의하려고 시도하고 있습니다. 나는 Spree source에서 그대로 꽤 많은 코드를 뽑아프로그래밍 방식으로 생성 된 Spree 주문 항목이 관리 인터페이스에 표시되지 않음

class OrderController < ApplicationController 
    include Spree::Core::ControllerHelpers::Auth 
    include Spree::Core::ControllerHelpers::Order 
    include Spree::Core::ControllerHelpers::Common 

    ⋮ 

    def process_order 
    params[:order].each do |index, order| 
     products = [] 
     order[:product_id].each do |index, id| 
     products << Spree::Product.find(id) if id and not id.empty? 
     end 
     if products.any? 
     populator = Spree::OrderPopulator.new current_order(create_order_if_necessary: true), current_currency 
     current_order.update_attribute :delivery_date, Date.parse(order[:date]) 
     products.each do |product| 
      variant = Spree::Variant.find_by product_id: product.id 
      populator.populate({ products: { product_id: product.id, variant_id: variant.id }, quantity: 1 }) 
     end 
     end 
    end 
    redirect_to main_path 
    end 
end 

: 같은

양식 게시물을 처리하는 방법을 보인다. 주문이 만들어지고 order.products 메서드가 작동합니다. 그러나 관리 인터페이스에서 주문을 볼 때 가격은 있지만 제품은 없습니다. 관리 인터페이스를 통해 제품을 추가하면 프로그래밍 방식으로 추가 된 제품 수를 포함한 제품 수가 표시됩니다.

관리자 인터페이스를 통해 주문을 완료하면 모든 제품이 완료된 주문으로 표시됩니다.

답변

0

나는 이것을 당신이 주문 관점에서 접근해야한다고 생각하지 않는다. 하지만 사물의 선적 측면에서 오히려. 사용자는 shippping 매개 변수와 상관없이 하나의 주문 만 보유합니다. 각 주문에는 지불금이 있으며, 주문 상태를 완료하기 위해 고안된 계산서가 있습니다.

여러 주문을 만드는 것은 두통이 될 것입니다. 그 이유는 지불 및 배송과 나머지도 분리해야하기 때문입니다. 선적 논리를 살펴보고 선적을 분할하고 한 주문에 대해 수정하는 방법을 제안합니다. 이렇게하면 사용자는 한 번 지불하고 단 하나의 주문과 영수증 만 가지게되고 백엔드를 주문과 함께 어지럽히고 오르막 전투에 맞서서 의도하지 않은 명령을받습니다. 여기에서 운송에 대한 소개를 찾을 수 있습니다. http://guides.spreecommerce.com/developer/shipments.html

특히 분할 배송에 대한 섹션이 있지만 나머지는 좋은 읽을 거리입니다.