klarna 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/.gitignore +9 -0
  2. data/.travis.yml +13 -0
  3. data/Gemfile +14 -0
  4. data/Guardfile +16 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.textile +139 -0
  7. data/Rakefile +22 -0
  8. data/TODO +30 -0
  9. data/examples/Gemfile +8 -0
  10. data/examples/config/initializer.rb +15 -0
  11. data/examples/console.rb +71 -0
  12. data/examples/public/images/klarna.png +0 -0
  13. data/examples/public/images/ruby.png +0 -0
  14. data/examples/views/_address.haml +22 -0
  15. data/examples/views/_articles.haml +21 -0
  16. data/examples/views/checkout_page_example.haml +2 -0
  17. data/examples/views/essential/add_transaction/_form.haml +32 -0
  18. data/examples/views/essential/add_transaction/result.haml +7 -0
  19. data/examples/views/essential/calculate_monthly_cost/_form.haml +16 -0
  20. data/examples/views/essential/calculate_monthly_cost/result.haml +7 -0
  21. data/examples/views/essential/get_addresses/_form.haml +9 -0
  22. data/examples/views/essential/get_addresses/result.haml +8 -0
  23. data/examples/views/index.haml +296 -0
  24. data/examples/views/layout.haml +48 -0
  25. data/examples/views/payment_terms_example.haml +102 -0
  26. data/examples/views/product_page_example.haml +2 -0
  27. data/examples/views/reservation/activate_reservation/_form.haml +54 -0
  28. data/examples/views/reservation/activate_reservation/result.haml +7 -0
  29. data/examples/views/reservation/cancel_reservation/_form.haml +8 -0
  30. data/examples/views/reservation/cancel_reservation/result.haml +7 -0
  31. data/examples/views/reservation/change_reservation/_form.haml +10 -0
  32. data/examples/views/reservation/change_reservation/result.haml +7 -0
  33. data/examples/views/reservation/reserve_amount/_form.haml +58 -0
  34. data/examples/views/reservation/reserve_amount/result.haml +7 -0
  35. data/examples/views/reservation/reserve_ocr_numbers/_form.haml +8 -0
  36. data/examples/views/reservation/reserve_ocr_numbers/result.haml +7 -0
  37. data/examples/views/reservation/split_reservation/_form.haml +14 -0
  38. data/examples/views/reservation/split_reservation/result.haml +7 -0
  39. data/examples/views/special/get_pclasses/_form.haml +8 -0
  40. data/examples/views/special/get_pclasses/result.haml +7 -0
  41. data/examples/views/special/invoice_address/_form.haml +8 -0
  42. data/examples/views/special/invoice_address/result.haml +7 -0
  43. data/examples/views/special/invoice_amount/_form.haml +8 -0
  44. data/examples/views/special/invoice_amount/result.haml +7 -0
  45. data/examples/views/special/is_invoice_paid/_form.haml +8 -0
  46. data/examples/views/special/is_invoice_paid/result.haml +7 -0
  47. data/examples/views/special/update_charge_amount/_form.haml +15 -0
  48. data/examples/views/special/update_charge_amount/result.haml +7 -0
  49. data/examples/views/special/update_goods_quantity/_form.haml +17 -0
  50. data/examples/views/special/update_goods_quantity/result.haml +7 -0
  51. data/examples/views/special/update_order_number/_form.haml +10 -0
  52. data/examples/views/special/update_order_number/result.haml +7 -0
  53. data/examples/views/useful/activate_invoice/_form.haml +9 -0
  54. data/examples/views/useful/activate_invoice/result.haml +7 -0
  55. data/examples/views/useful/credit_invoice/_form.haml +11 -0
  56. data/examples/views/useful/credit_invoice/result.haml +7 -0
  57. data/examples/views/useful/delete_invoice/_form.haml +9 -0
  58. data/examples/views/useful/delete_invoice/result.haml +7 -0
  59. data/examples/views/useful/email_invoice/_form.haml +9 -0
  60. data/examples/views/useful/email_invoice/result.haml +7 -0
  61. data/examples/views/useful/has_account/_form.haml +9 -0
  62. data/examples/views/useful/has_account/result.haml +7 -0
  63. data/examples/views/useful/return_amount/_form.haml +15 -0
  64. data/examples/views/useful/return_amount/result.haml +7 -0
  65. data/examples/views/useful/send_invoice/_form.haml +9 -0
  66. data/examples/views/useful/send_invoice/result.haml +7 -0
  67. data/examples/web.rb +349 -0
  68. data/klarna.gemspec +34 -0
  69. data/lib/klarna.rb +175 -0
  70. data/lib/klarna/api.rb +170 -0
  71. data/lib/klarna/api/client.rb +128 -0
  72. data/lib/klarna/api/constants.rb +638 -0
  73. data/lib/klarna/api/errors.rb +154 -0
  74. data/lib/klarna/api/methods.rb +16 -0
  75. data/lib/klarna/api/methods/cost_calculations.rb +134 -0
  76. data/lib/klarna/api/methods/invoicing.rb +304 -0
  77. data/lib/klarna/api/methods/reservation.rb +149 -0
  78. data/lib/klarna/api/methods/standard.rb +123 -0
  79. data/lib/klarna/version.rb +5 -0
  80. data/test/fixtures/api/companies.yml +97 -0
  81. data/test/fixtures/api/pclasses.yml +37 -0
  82. data/test/fixtures/api/persons.yml +144 -0
  83. data/test/fixtures/api/stores.yml +6 -0
  84. data/test/fixtures/klarna.yml +10 -0
  85. data/test/klarna/api/client_test.rb +272 -0
  86. data/test/klarna/api/errors_test.rb +46 -0
  87. data/test/klarna/api/methods/cost_calculations_test.rb +78 -0
  88. data/test/klarna/api/methods/invoicing_test.rb +409 -0
  89. data/test/klarna/api/methods/reservation_test.rb +66 -0
  90. data/test/klarna/api/methods/standard_test.rb +244 -0
  91. data/test/klarna/api_test.rb +137 -0
  92. data/test/klarna_test.rb +204 -0
  93. data/test/support/assertions_helper.rb +40 -0
  94. data/test/test_helper.rb +55 -0
  95. metadata +312 -0
@@ -0,0 +1,149 @@
1
+ # encoding: utf-8
2
+
3
+ module Klarna
4
+ module API
5
+ module Methods
6
+ module Reservation
7
+
8
+ # Reserve a purchase amount for a specific customer. The reservation is valid, by default, for 7 days.
9
+ # Pass cellphone no. instead of Pno for SMS payments.
10
+ #
11
+ def reserve_amount(pno_or_cellphone, amount, goods_list, reference, reference_code, order_id_1, order_id_2,
12
+ client_ip, shipping_address, invoicing_address, email, phone, cell_phone,
13
+ currency_code, country_code, language_code, pno_encoding, pclass, annual_salary = nil, flags = nil)
14
+ # params = [
15
+ # pno_or_cellphone,
16
+ # amount,
17
+ # reference,
18
+ # reference_code,
19
+ # order_id_1,
20
+ # order_id_2,
21
+ # shipping_address,
22
+ # invoicing_address,
23
+ # email,
24
+ # phone,
25
+ # cell_phone,
26
+ # client_ip,
27
+ # flags,
28
+ # currency_code,
29
+ # country_code,
30
+ # language_code,
31
+ # self.store_id,
32
+ # self.digest(pno_or_cellphone, amount),
33
+ # pno_encoding,
34
+ # (pclass || KRED_DEFAULT_PCLASS),
35
+ # (annual_salary || KRED_DEFAULT_YSALARY),
36
+ # goods_list
37
+ # ]
38
+ # self.call(:reserve_amount, *params)
39
+ raise NotImplementedError
40
+ end
41
+
42
+ # Activate purchases which have been previously reserved with the reserve_amount function.
43
+ #
44
+ def activate_reservation(reservation_id, pno, ocr, goods_list, reference, reference_code, order_id_1, order_id_2,
45
+ client_ip, shipping_address, invoicing_address, shipment_type, email, phone, cell_phone,
46
+ currency_code, country_code, language_code, pno_encoding, pclass, annual_salary = nil, flags = nil)
47
+ # params = [
48
+ # reservation_id,
49
+ # pno,
50
+ # (ocr || KRED_DEFAULT_OCR),
51
+ # goods_list,
52
+ # reference,
53
+ # reference_code,
54
+ # order_id_1,
55
+ # order_id_2,
56
+ # shipping_address,
57
+ # invoicing_address,
58
+ # shipment_type,
59
+ # email,
60
+ # phone,
61
+ # cell_phone,
62
+ # client_ip,
63
+ # flags,
64
+ # currency_code,
65
+ # country_code,
66
+ # language_code,
67
+ # self.store_id,
68
+ # self.digest(pno, goods_list),
69
+ # pno_encoding,
70
+ # (pclass || KRED_DEFAULT_PCLASS),
71
+ # (annual_salary || KRED_DEFAULT_YSALARY)
72
+ # ]
73
+ # self.call(:activate_reservation, *params)
74
+ raise NotImplementedError
75
+ end
76
+
77
+ # Cancel a reservation.
78
+ #
79
+ def cancel_reservation(reservation_id)
80
+ # params = [
81
+ # reservation_id,
82
+ # self.store_id,
83
+ # self.digest(reservation_id)
84
+ # ]
85
+ # self.call(:cancel_reservation, *params)
86
+ raise NotImplementedError
87
+ end
88
+
89
+ # Split a reservation due to for example outstanding articles.
90
+ #
91
+ def split_reservation(reservation_id, split_amount, order_id_1, order_id_2, flags = nil)
92
+ # params = [
93
+ # reservation_id,
94
+ # split_amount,
95
+ # order_id_1,
96
+ # order_id_2,
97
+ # flags.to_i,
98
+ # self.store_id,
99
+ # self.digest(reservation_id, split_amount)
100
+ # ]
101
+ # self.call(:split_reservation, *params)
102
+ raise NotImplementedError
103
+ end
104
+
105
+ # Change a reservation.
106
+ #
107
+ def change_reservation(reservation_id, new_amount)
108
+ # params = [
109
+ # reservation_id,
110
+ # new_amount,
111
+ # self.store_id,
112
+ # self.digest(reservation_id, new_amount)
113
+ # ]
114
+ # self.call(:change_reservation, *params)
115
+ raise NotImplementedError
116
+ end
117
+
118
+ # Reserves one or more OCR numbers for your store.
119
+ #
120
+ def reserve_ocr_numbers(number_of_ocrs)
121
+ # params = [
122
+ # number_of_ocrs,
123
+ # self.store_id,
124
+ # self.digest(number_of_ocrs)
125
+ # ]
126
+ # self.call(:reserve_ocr_nums, *params)
127
+ raise NotImplementedError
128
+ end
129
+
130
+ # Create addresses for arguments such as the +activate_reservation+ function.
131
+ #
132
+ def make_reservation_address(first_name, last_name, street_address, zip, city, country_code, house_number = nil)
133
+ # {
134
+ # :fname => first_name,
135
+ # :lname => last_name,
136
+ # :street => street_address,
137
+ # :zip => zip,
138
+ # :city => city,
139
+ # :country => ::Klarna::API.id_for(:country, country_code),
140
+ # :house_number => house_number
141
+ # }.with_indifferent_access
142
+ raise NotImplementedError
143
+ end
144
+ alias :mk_reservation_address :make_reservation_address
145
+
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,123 @@
1
+ # encoding: utf-8
2
+
3
+ module Klarna
4
+ module API
5
+ module Methods
6
+ module Standard
7
+
8
+ # Retrieve a customer’s address(es). Using this, the customer is not required to enter
9
+ # any information – only confirm the one presented to him/her.
10
+ # Can also be used for companies: If the customer enters a company number,
11
+ # it will return all the addresses where the company is registered at.
12
+ #
13
+ # == Note:
14
+ #
15
+ # ONLY allowed to be used for Swedish persons with the following conditions:
16
+ #
17
+ # * It can be only used if invoice or part payment is the default payment method
18
+ # * It has to disappear if the customer chooses another payment method
19
+ # * The button is not allowed to be called get address ("hämta adress"), but continue ("fortsätt")
20
+ # or it can be picked up automatically when all the numbers have been typed.
21
+ #
22
+ # In the other Nordic countries you will have to have input fields for name, last name, street name,
23
+ # zip code and city so that the customer can enter this information by himself.
24
+ #
25
+ def get_addresses(pno, pno_encoding, address_type = :GIVEN)
26
+ pno = pno.to_s.gsub(/[\W]/, '')
27
+ pno_encoding = ::Klarna::API.id_for(:pno_format, pno_encoding)
28
+ address_type = ::Klarna::API.id_for(:address_format, address_type)
29
+ params = [
30
+ pno,
31
+ self.store_id,
32
+ self.digest(pno),
33
+ pno_encoding,
34
+ address_type,
35
+ self.client_ip
36
+ ]
37
+ self.call(:get_addresses, *params).tap do |result|
38
+ result = result.first
39
+ result[5] = ::Klarna::API.id_for(:country, result[5]) # TODO: Return symbol from ID
40
+ end
41
+ end
42
+
43
+ # Same as +get_addresses+ but returns only first address.
44
+ #
45
+ def get_address(*args)
46
+ self.get_addresses(*args).first
47
+ end
48
+
49
+ # Create addresses (i.e. the +address+ argument to the +add_transaction+ method).
50
+ #
51
+ def make_address(co_address, street_address, zip, city, country, phone, cell_phone, email,
52
+ house_number = nil, house_extension = nil)
53
+ country = ::Klarna::API.id_for(:country, country)
54
+ phone = phone.to_s.gsub(/[\W\s\t]/, '')
55
+ cell_phone = cell_phone.to_s.gsub(/[\W\s\t]/, '')
56
+ {
57
+ :careof => co_address,
58
+ :street => street_address,
59
+ :postno => zip,
60
+ :city => city,
61
+ :country => country,
62
+ :telno => phone,
63
+ :cellno => cell_phone,
64
+ :email => email
65
+ }.with_indifferent_access
66
+ end
67
+ alias :mk_address :make_address
68
+
69
+ # Create an inventory (i.e. the +goods_list+ argument) to the +add_transaction+ function.
70
+ #
71
+ # == Flags:
72
+ #
73
+ # Argument +flags+ can be used to set the precision of the article, to indicate a shipment
74
+ # or a fee or sending the price with VAT.
75
+ #
76
+ # By using either +PRINT_1000+, +PRINT_100+, or +PRINT_10+, the +flags+
77
+ # function can be used to set article quantity (+quantity+). Unit is either +1/10+, +1/100+
78
+ # or +1/1000+. This is useful for goods measured in meters or kilograms, rather than number of items.
79
+ #
80
+ # By using the +IS_SHIPMENT+ or +IS_HANDLING+ flags a shipping or handling fee can
81
+ # be applied. The fees are sent excluding VAT with the arguments +shipping_fee+ or +handling_fee+.
82
+ #
83
+ # By using the +INC_VAT+ flag, you can send the price including VAT.
84
+ #
85
+ # == Note:
86
+ #
87
+ # If you are implementing sales with Euros, use the function mk_goods_flags instead
88
+ # since using this method can result in round off problems. With +mk_goods_flags+ you
89
+ # are able to send the price with VAT.
90
+ #
91
+ def make_goods(quantity, article_no, title, price, vat, discount = nil, flags = nil)
92
+ flags = ::Klarna::API.parse_flags(:GOODS, flags)
93
+ goods = {
94
+ :goods => {
95
+ :artno => article_no,
96
+ :title => title,
97
+ :price => price.to_i,
98
+ :vat => vat.to_f.round(2),
99
+ :discount => discount.to_f.round(2),
100
+ },
101
+ :qty => quantity.to_i
102
+ }
103
+ goods[:goods].merge!(:flags => flags.to_i) # if flags.present?
104
+ goods.with_indifferent_access
105
+ end
106
+ alias :mk_goods :make_goods
107
+ alias :mk_goods_flags :make_goods
108
+
109
+ # Check if a user has an account.
110
+ #
111
+ def has_account?(pno, pno_encoding)
112
+ params = [
113
+ self.store_id,
114
+ self.digest(pno),
115
+ pno_encoding
116
+ ]
117
+ self.call(:has_account, *params)
118
+ end
119
+
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ module Klarna
4
+ VERSION = '0.1.3'
5
+ end
@@ -0,0 +1,97 @@
1
+ # Here are Klarnas test COMPANIES.
2
+ # All approved persons have unlimited credit and the system will never accept purchases from the not approved ones.
3
+ #
4
+ # Purchases done with the test persons will be displayed in Klarna Online as regular invoices, although they will
5
+ # unvisible unless you have "Yes" selected next to "Display test invoices" when searching for invoices.
6
+ #
7
+ # We will not pay for the invoices created with the test persons nor companies and we will not collect any fees as well.
8
+
9
+ companies:
10
+ se:
11
+ approved:
12
+ cno: "6020310139"
13
+ name: "Kalle Anka AB"
14
+ street_address: "Storgatan 1"
15
+ postal_code: "12345"
16
+ city: "Ankeborg"
17
+ street_address_2: "Lillgatan 99"
18
+ postal_code_2: "77777"
19
+ city_2: "Ankeborg"
20
+ country: "SE"
21
+ cell_phone: "076 526 00 00"
22
+ currency: "SEK"
23
+ language: "SV"
24
+ unapproved:
25
+ cno: "6720217931"
26
+ name: "Björnligan AB"
27
+ street_address: "Fulgatan 1"
28
+ postal_code: "12345"
29
+ city: "Ankeborg"
30
+ street_address_2: "Bakgatan 99"
31
+ postal_code_2: "77777"
32
+ city_2: "Ankeborg"
33
+ country: "SE"
34
+ cell_phone: "076 526 00 00"
35
+ currency: "SEK"
36
+ language: "SV"
37
+
38
+ no:
39
+ # N/A
40
+
41
+ dk:
42
+ approved:
43
+ pno: "27968880"
44
+ first_name: ""
45
+ last_name: "Onbase ApS"
46
+ street_address: "Centrumgaden 37"
47
+ postal_code: "2750"
48
+ city: "Ballerup"
49
+ country: "DK"
50
+ cell_phone: "20 123 456"
51
+ currency: "DKK"
52
+ language: "DA"
53
+ unapproved:
54
+ pno: "99999993"
55
+ first_name: ""
56
+ last_name: "Larsen & Olsen Contracters ApS"
57
+ street_address: "Glarmestervej 2"
58
+ postal_code: "8600"
59
+ city: "Silkeborg"
60
+ street_address: "Kristianiagade 9"
61
+ postal_code: "2100"
62
+ city: "København Ø"
63
+ country: "DK"
64
+ cell_phone: "20 123 456"
65
+ currency: "DKK"
66
+ language: "DA"
67
+
68
+ fi:
69
+ approved:
70
+ pno: "10891871"
71
+ first_name: ""
72
+ last_name: "Porin Mies-Laulu r.y."
73
+ street_address: "Vapaudenkatu 10"
74
+ postal_code: "28100"
75
+ city: "Pori"
76
+ country: "FI"
77
+ cell_phone: "040 123 45 67"
78
+ currency: "EUR"
79
+ language: "FI"
80
+
81
+ unapproved:
82
+ pno: "07527622"
83
+ first_name: ""
84
+ last_name: "Mankalan Perhekodit Oy"
85
+ street_address: "Porrassalmenkatu 19 B"
86
+ postal_code: "50100"
87
+ city: "Parikkala"
88
+ country: "FI"
89
+ cell_phone: "040 123 45 67"
90
+ currency: "EUR"
91
+ language: "FI"
92
+
93
+ de:
94
+ # N/A
95
+
96
+ nl:
97
+ # N/A
@@ -0,0 +1,37 @@
1
+ # Pclass id number, Description, Amount of months for part payment, Start fee, Invoice fee, Interest rate, Minimum purchase amount for pclass
2
+
3
+ pclasses:
4
+ sek:
5
+ 390:
6
+ pclass_id: 390
7
+ description: "Konto"
8
+ months: 24
9
+ start_fee: 0
10
+ invoice_fee: 2900
11
+ interest_rate: 1950
12
+ minimum_purchase_amount: 100
13
+ 121:
14
+ pclass_id: 121
15
+ description: "6 m\303\245n"
16
+ months: 6
17
+ start_fee: 19500
18
+ invoice_fee: 2900
19
+ interest_rate: 0
20
+ minimum_purchase_amount: 100000
21
+ 120:
22
+ pclass_id: 120
23
+ description: "3 m\303\245n"
24
+ months: 3
25
+ start_fee: 9500
26
+ invoice_fee: 2900
27
+ interest_rate: 0
28
+ minimum_purchase_amount: 100000
29
+
30
+ nok:
31
+ # Not available (for some reason)
32
+
33
+ dkk:
34
+ # Not available (for some reason)
35
+
36
+ eur:
37
+ # Not available (for some reason)
@@ -0,0 +1,144 @@
1
+ # Here are Klarnas test PERSONS.
2
+ # All approved persons have unlimited credit and the system will never accept purchases from the not approved ones.
3
+ #
4
+ # Purchases done with the test persons will be displayed in Klarna Online as regular invoices, although they will
5
+ # unvisible unless you have "Yes" selected next to "Display test invoices" when searching for invoices.
6
+ #
7
+ # We will not pay for the invoices created with the test persons nor companies and we will not collect any fees as well.
8
+
9
+ persons:
10
+ se:
11
+ approved:
12
+ pno: "4304158399"
13
+ first_name: "Karl"
14
+ last_name: "Lidin"
15
+ street_address: "Junibackg. 42"
16
+ postal_code: "23634"
17
+ city: "Hollviken"
18
+ country: "SE"
19
+ cell_phone: "076 526 00 00"
20
+ currency: "SEK"
21
+ language: "SV"
22
+ unapproved:
23
+ pno: "5311096845"
24
+ first_name: "Maud"
25
+ last_name: "Johansson"
26
+ street_address: "Köpmansgatan 7"
27
+ postal_code: "12149"
28
+ city: "Johanneshov"
29
+ country: "SE"
30
+ cell_phone: "076 526 00 00"
31
+ currency: "SEK"
32
+ language: "SV"
33
+
34
+ no:
35
+ approved:
36
+ pno: "18106500157"
37
+ first_name: "Petter"
38
+ last_name: "Testmann"
39
+ street_address: "Hundremeterskogen 100"
40
+ postal_code: "0563"
41
+ city: "Oslo"
42
+ country: "NO"
43
+ cell_phone: "40 123 456"
44
+ currency: "NOK"
45
+ language: "NO"
46
+ unapproved:
47
+ pno: "18106500076"
48
+ first_name: "Petra"
49
+ last_name: "Testdame"
50
+ street_address: "Sofienberggate 56"
51
+ postal_code: "0563"
52
+ city: "Oslo"
53
+ country: "NO"
54
+ cell_phone: "40 123 456"
55
+ currency: "NOK"
56
+ language: "NO"
57
+
58
+ dk:
59
+ approved:
60
+ pno: "0505610059"
61
+ first_name: "Rasmus Jens-Peter"
62
+ last_name: "Lybert"
63
+ street_address: "Godthåbvej 8,-2"
64
+ postal_code: "3900"
65
+ city: "Godthåb"
66
+ country: "DK"
67
+ cell_phone: "20 123 456"
68
+ currency: "DKK"
69
+ language: "DA"
70
+ unapproved:
71
+ # N/A
72
+
73
+ # fi:
74
+ # approved:
75
+ # pno: "230246-8989"
76
+ # first_name: "Suvi"
77
+ # last_name: "Aurinkoinen"
78
+ # street_address: "Planeettatie 2"
79
+ # postal_code: "01450"
80
+ # city: "Vantaa"
81
+ # country: "FI"
82
+ # cell_phone: "0401234567
83
+ # currency: "EUR"
84
+ # language: "FI"
85
+ # unapproved:
86
+ # pno: "010130-887T"
87
+ # first_name: "Mikael"
88
+ # last_name: "Miehinen"
89
+ # street_address: "Tikkuritie 11"
90
+ # postal_code: "01370"
91
+ # city: "Vantaa"
92
+ # country: "FI"
93
+ # cell_phone: "0401234567"
94
+ # currency: "EUR"
95
+ # language: "FI"
96
+ #
97
+ de:
98
+ approved:
99
+ pno: "070719601"
100
+ first_name: "Uno"
101
+ last_name: "Eins"
102
+ street_address: "Hellersbergstrasse 14"
103
+ postal_code: "41460"
104
+ city: "Neuss"
105
+ country: "DE"
106
+ cell_phone: "015 2211 3356"
107
+ currency: "EUR"
108
+ language: "DE"
109
+ unapproved:
110
+ pno: "07071950"
111
+ first_name: "Uno"
112
+ last_name: "Vier"
113
+ street_address: "Hellersbergstrasse 14"
114
+ postal_code: "41460"
115
+ city: "Neuss"
116
+ cell_phone: "015 2211 3356"
117
+ country: "DE"
118
+ currency: "EUR"
119
+ language: "DE"
120
+
121
+ nl:
122
+ approved:
123
+ pno:
124
+ first_name: "Test"
125
+ last_name: "Persoon"
126
+ street_address: "Neherkade 1"
127
+ postal_code: "2521VA"
128
+ city: "Gravenhage"
129
+ country: "NL"
130
+ cell_phone: "0612345678"
131
+ currency: "EUR"
132
+ language: "NL"
133
+ unapproved:
134
+ # Only a few details available.
135
+ pno:
136
+ first_name:
137
+ last_name:
138
+ street_address:
139
+ postal_code:
140
+ city:
141
+ country: "NL"
142
+ cell_phone: "0612345678"
143
+ currency: "EUR"
144
+ language: "NL"