Sha256: 3efa10d86625074e8a6a705a34eb3be5d2e45e4b940f11f164b60854d42dbe92

Contents?: true

Size: 2 KB

Versions: 6

Compression:

Stored size: 2 KB

Contents

module Centaman
  #:nodoc:
  class Service::CreateCustomer < Centaman::Service
    include Centaman::JsonWrapper
    attr_accessor :first_name, :last_name, :email, :phone, :address, :attendees

    def after_init(args)
      @first_name = args.fetch(:first_name, nil)
      @last_name = args.fetch(:last_name, nil)
      @email = args.fetch(:email, nil)
      @phone = args.fetch(:phone, nil)
      @address = args.fetch(:address, nil) || {}
      @attendees = args.fetch(:attendees, nil) || []
    end

    def endpoint
      '/ticket_services/TimedTicket'
    end

    def object_class
      Centaman::Object::Customer
    end

    def build_address
      {
        'Street1' => address[:street_address] || '',
        'Street2' => address[:street_address_2] || '',
        'City' => address[:city] || '',
        'State' => address[:state] || '',
        'Postalcode' => address[:zip] || '',
        'Country' => address[:country] || '',
        'HomePhone' => phone || '',
        'WorkPhone' => '',
        'MobilePhone' => ''
      }
    end

    def build_booking_attendees
      attendees.map do |attendee|
        udfs = attendee.try(:attendee_udfs)
        attendee_email = udfs && udfs.detect { |u| u.try(:is_email) && u.try(:value).present? }.try(:value)
        {
          'FirstName': attendee.first_name,
          'LastName': attendee.last_name,
          'Email': attendee.email.present? ? attendee.email : (attendee_email || random_email(attendee))
        }
      end
    end

    def random_email(attendee)
      # force creation of new member by setting new email
      [attendee.first_name.try(:squish), attendee.last_name.try(:squish), SecureRandom.hex(2)]
        .reject { |obj| obj.blank? }
        .join('.') + '@example.com'
        .squish
    end

    def options_hash
      {
        'FirstName' => first_name || '',
        'LastName' => last_name || '',
        'Email' => email,
        'Address' => build_address,
        'BookingAttendee': build_booking_attendees
      }.compact.to_json
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
centaman-7.0.5 lib/centaman/service/create_customer.rb
centaman-7.0.4 lib/centaman/service/create_customer.rb
centaman-7.0.3 lib/centaman/service/create_customer.rb
centaman-7.0.2 lib/centaman/service/create_customer.rb
centaman-7.0.1 lib/centaman/service/create_customer.rb
centaman-7.0.0 lib/centaman/service/create_customer.rb