Class: Invoicing::MoveInvoice

Inherits:
BaseService
  • Object
show all
Defined in:
app/services/invoicing/move_invoice.rb

Overview

Move invoice to another customer

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Instance Method Details

#process(invoice, new_customer, new_shipping_address: nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/services/invoicing/move_invoice.rb', line 9

def process(invoice, new_customer, new_shipping_address: nil)
  Invoice.transaction do
    invoice.update(customer_id: new_customer.id, 
                              billing_customer_id: new_customer.id, 
                              billing_address: new_customer.billing_address)
    shipping_address = invoice.shipping_address
    if new_shipping_address.nil? && !shipping_address.one_time_only
      new_shipping_address = shipping_address.dup
      new_shipping_address.party_id = nil
      new_shipping_address.save!
    end
    if order = invoice.order
      order.customer_id = new_customer.id
      if new_shipping_address
        order.shipping_address_id = new_shipping_address.id
      end
      order.save!
    end
    if opportunity = order.opportunity
      opportunity.customer_id = new_customer.id
      opportunity.save!
    end
    # regenerate the invoice pdf
  end
  invoice.generate_pdf
  
  Result.new(invoice_moved: true, invoice: invoice)
end