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
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ .DS_Store
2
+ .bundle
3
+ .rbx
4
+ .*~
5
+ Gemfile.lock
6
+ pkg/*
7
+ *.gem
8
+ *.rbc
9
+ *~
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - ree
5
+ - ruby-head
6
+ - rbx
7
+ - rbx-2.0
8
+ - jruby
9
+ env:
10
+ # Don't get any ideas, this will only work with Klarna's test-server. ;)
11
+ - KLARNA_ESTORE=1562,V6Y95XQ46ymmAWA
12
+ notifications:
13
+ disabled: true
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+
3
+ # See: klarna.gemspec
4
+ gemspec
5
+
6
+ platform :jruby do
7
+ gem 'jruby-openssl'
8
+ end
9
+
10
+ group :test do
11
+ group :darwin do
12
+ gem 'rb-fsevent'
13
+ end
14
+ end
data/Guardfile ADDED
@@ -0,0 +1,16 @@
1
+ guard 'bundler' do
2
+ watch('Gemfile')
3
+ watch(/^.+\.gemspec/)
4
+ end
5
+
6
+ guard 'minitest' do
7
+ # with Minitest::Unit
8
+ watch(%r|^test/test_(.*)\.rb|)
9
+ watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
10
+ watch(%r|^test/test_helper\.rb|) { "test" }
11
+
12
+ # with Minitest::Spec
13
+ # watch(%r|^spec/(.*)_spec\.rb|)
14
+ # watch(%r|^lib/(.*)\.rb|) { |m| "spec/#{m[1]}_spec.rb" }
15
+ # watch(%r|^spec/spec_helper\.rb|) { "spec" }
16
+ end
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010-2011 Jonas Grimfelt, Merchii. http://merchii.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.textile ADDED
@@ -0,0 +1,139 @@
1
+ h1. KLARNA "!https://secure.travis-ci.org/merchii/klarna-ruby.png!":http://travis-ci.org/merchii/klarna-ruby
2
+
3
+ _A Ruby wrapper for the Klarna XML-RPC API._
4
+
5
+ h2. What is Klarna?
6
+
7
+ *"Klarna":http://klarna.com* is a payment solution with focus on e-commerce. Visit "klarna.com":http://klarna.com for more information, or why not "Wikipedia: Klarna":http://en.wikipedia.org/wiki/Klarna. We might be biased, but at "Merchii":http://merchii.com we currently consider Klarna the most convenient online payment solution that exists - and that's why we lean on it.
8
+
9
+ *Supported countries:*
10
+
11
+ Sweden (SE), Norway (NO), Denmark (DK), Finland (FI), Germany (DE), Netherlands (NL).
12
+
13
+ h2. Implementation/Background
14
+
15
+ This gem was developed as a semi-1:1 implementation of the corresponding API implementations provided by Klarna (with a few simple justifications and heavily refactored methods). Klarnas official implementations were not implemented using OO patterns and as their implementation was changing very often without any notice/versioning I kept it simple as possible.
16
+
17
+ Since Klarna 2.0 was released they'va refactored their implementations a lot which makes it a good idea to review this implementation as well. Like stated in the TODO I had a clean classy DSL in mind.
18
+
19
+ This is not a complete implementation, but not far from it and enough for most use cases - a few of the more advanced API methods needs a review/revisit (code disabled now).
20
+
21
+ h2. Setup
22
+
23
+ Install the gem:
24
+
25
+ <pre>
26
+ $ gem install klarna
27
+ </pre>
28
+
29
+ ...or if you use "Bundler":http://gembundler.com:
30
+
31
+ @Gemfile@:
32
+
33
+ <pre>
34
+ gem 'klarna'
35
+ </pre>
36
+
37
+ ...and @$ bundle install@.
38
+
39
+ h2. Usage
40
+
41
+ Trivial example looking up an address using - in this case - a Swedish SSN:
42
+
43
+ <pre>
44
+ require 'rubygems'
45
+ require 'klarna'
46
+
47
+ Klarna.configure do |c|
48
+ c.store_id = 123
49
+ c.store_secret = 'secret'
50
+
51
+ c.mode = :test
52
+ c.http_logging = false
53
+ end
54
+
55
+ client = Klarna::API::Client.new
56
+
57
+ client.get_addresses("430415-8399", :SE)
58
+ </pre>
59
+
60
+ See the code/docs for more information.
61
+
62
+ h2. Testing
63
+
64
+ A couple of ways...
65
+
66
+ *Specs*
67
+
68
+ To run unit/integration tests, simply do:
69
+
70
+ <pre>
71
+ $ bundle exec rake test
72
+ </pre>
73
+
74
+ ...or if you use "Guard":http://github.com/guard/guard:
75
+
76
+ <pre>
77
+ $ bundle exec guard
78
+ </pre>
79
+
80
+ *Dummie client*
81
+
82
+ <pre>
83
+ $ cd examples
84
+ $ ruby console.rb
85
+ </pre>
86
+
87
+ *Web/Sinatra app*
88
+
89
+ 1. Start the server...
90
+
91
+ <pre>
92
+ $ cd examples
93
+ $ ruby web.rb
94
+ ...
95
+ >> Listening on 0.0.0.0:4567, CTRL+C to stop
96
+ </pre>
97
+
98
+ 2. Open it up!
99
+
100
+ @http://localhost:4567@
101
+
102
+ *NOTE:* The web app actions/forms are probably completely broken currently as it hasn't been updated to reflect the current library implementation.
103
+
104
+ h2. Debugging
105
+
106
+ *HTTP-debugging in Wireshark*
107
+
108
+ Ensure port @4567@ (port used for Klarna API integration test/debugging) is in the list of captured ports in the HTTP/HTTPS preferences, or these requests/responses will not be captured. Note: Port @80@ (port used for Klarna API integration in production) is captured by default.
109
+
110
+ *XML-RPC-debugging in a XML-RPC client*
111
+
112
+ Try this:
113
+
114
+ Endpoint: @http://beta-test.klarna.com:4567@
115
+ Method: @get_addresses@
116
+ Params: @["1.0","ruby/xmlrpc","430415-8399",2,"AY2qnVNi8ccTsuDw2XNovQ==",2,2]@
117
+
118
+ h2. References
119
+
120
+ * "Klarna API Documentation":http://integration.klarna.com/en/api/step-by-step
121
+ * "XML-RPC Overview":http://en.wikipedia.org/wiki/XML-RPC
122
+
123
+ h2. Tools
124
+
125
+ * "XML-RPC Client":http://ditchnet.org/xmlrpc/ for XML-RPC debugging on OS X.
126
+ * "Wireshark":http://wireshark.org for platform-independent protocol sniffing, useful for debugging XML-RPC requests/responses.
127
+
128
+ h2. Notes
129
+
130
+ This gem was developed for our own requirements at "Merchii":http://github.com/merchii, so feel free to send pull-requests with enhancements of any kind (features, bug-fixes, documentation, tests, etc.) to make it better or useful for you as well.
131
+
132
+ h2. To-do
133
+
134
+ See the "TODO":https://github.com/merchii/klarna-ruby/blob/master/TODO.
135
+
136
+ h2. License
137
+
138
+ Released under the MIT license.
139
+ Copyright (c) "Jonas Grimfelt":http://github.com/grimen, "Merchii":http://merchii.com
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ require 'bundler/gem_tasks'
3
+ require 'rake/testtask'
4
+ require 'rdoc/task'
5
+
6
+ desc 'Default: Run all tests.'
7
+ task :default => :test
8
+
9
+ desc 'Test gem for klarna.'
10
+ Rake::TestTask.new(:test) do |test|
11
+ test.libs << ['lib', 'test']
12
+ test.pattern = 'test/**/*_test.rb'
13
+ end
14
+
15
+ desc 'Generate gem documentation for klarna.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'Klarna Ruby API-wrapper Documentation'
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README.textile')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
data/TODO ADDED
@@ -0,0 +1,30 @@
1
+
2
+ == CURRENT
3
+
4
+ x [issue]: Test the invoice activation in a proper way - not allowed in the Klarna 2.0 API (for some weird reason...)
5
+
6
+
7
+ == HIGH-PRIO
8
+
9
+ * [feature]: Review/Implement something like: our_settype_integer, our_strip_string, our_settype_string (consider one generic method, e.g. parse(:price, value) - all validation/masking/casting in one place)
10
+ * [feature]: Ensure valid string format/stripping (e.g. SSN, etc) using regular expressions
11
+ * [feature]: Compare implementation with Klarna's new API 2.0
12
+ * [feature]: Ensure correct params datatypes are submitted (validation - consider generic method)
13
+ * [feature]: Klarna::DSL - wrapper DSL for less sucky integrations
14
+ * [feature]: Implement #get_pclasses method to export pclasses as hash (and maybe export to YAML?)
15
+ * [feature]: ActiveMerchant-integration (fork ActiveMerchant and add klarna as new gateway with "klarna-ruby" as dependency)
16
+
17
+
18
+ == LOW-PRIO
19
+
20
+ * [feature]: Finalize the rest of the specs for already implemented methods, commented out currently.
21
+ * [feature]: Implement Reservation methods
22
+ * [feature]: Bring back "examples/web" - probably not working at all now.
23
+ * [feature]: Rack middleware?
24
+
25
+
26
+ == MAYBE
27
+
28
+ * [feature]: Mock XML-responses by default to avoid live API calls, but allow live calls using ENV['REMOTE]=true
29
+
30
+ https://github.com/myronmarston/vcr
data/examples/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'http://gemcutter.org'
2
+
3
+ gem 'sinatra', :require => false
4
+ gem 'sinatra-mapping', :require => false
5
+ gem 'haml', :require => false
6
+ gem 'activesupport'
7
+ gem 'nokogiri'
8
+ gem 'klarna', :path => '..'
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+ require 'klarna'
3
+
4
+ # Configuration.
5
+ Klarna.setup do |config|
6
+ config.mode = :test
7
+
8
+ config.country = :SE
9
+
10
+ config.store_id = 2
11
+ config.store_secret = 'lakrits'
12
+
13
+ config.logging = true
14
+ config.http_logging = false
15
+ end
@@ -0,0 +1,71 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ Bundler.require(:default)
6
+ require 'active_support/all'
7
+ require 'pp'
8
+
9
+ require File.expand_path("config/initializer", File.dirname(__FILE__)).to_s
10
+
11
+ # == Initialize a Klarna API-client.
12
+
13
+ Klarna.configure do |c|
14
+ c.store_id = ENV['KLARNA_ESTORE_ID'].presence
15
+ c.store_secret = ENV['KLARNA_ESTORE_SECRET'].presence
16
+ c.mode = ENV['KLARNA_MODE'].presence
17
+ c.http_logging = true
18
+ end
19
+
20
+ begin
21
+ @@klarna = ::Klarna::API::Client.new(::Klarna.store_id, ::Klarna.store_secret)
22
+ rescue Klarna::API::Errors::KlarnaCredentialsError => e
23
+ puts e
24
+ rescue ::Klarna::API::Errors::KlarnaServiceError => e
25
+ puts e
26
+ end
27
+
28
+ @@klarna.client_ip = '192.168.0.196'
29
+
30
+ puts @@klarna.endpoint_uri.inspect
31
+
32
+ puts ::Klarna::API::PNO_FORMATS[:SE].inspect
33
+
34
+ print "SSN: "
35
+ test_pno = "820328-0154" # "4304158399" # gets.strip # "4304158399"
36
+
37
+ puts "------------------------------"
38
+ puts "eid: #{Klarna.store_id}"
39
+ puts "secret: #{Klarna.store_secret}"
40
+ puts "------------------------------"
41
+ puts "pno: #{test_pno}"
42
+
43
+ pno_secret = @@klarna.send(:digest, Klarna.store_id, test_pno, Klarna.store_secret)
44
+
45
+ puts "pno_secret: #{pno_secret}"
46
+ puts "------------------------------"
47
+
48
+ puts @@klarna.get_addresses(test_pno, ::Klarna::API::PNO_FORMATS[:SE])
49
+
50
+ # ----------------------
51
+
52
+ order_items = []
53
+ order_items << @@klarna.make_goods(1, "ABC1", "T-shirt 1", 1.00 * 100, 25)
54
+ # order_items << @@klarna.make_goods(1, "ABC2", "T-shirt 2", 7.00 * 100, 25)
55
+ # order_items << @@klarna.make_goods(1, "ABC3", "T-shirt 3", 17.00 * 100, 25)
56
+
57
+ #address = @@klarna.make_address("", "Junibackg. 42", "23634", "Hollviken", :SE, "076 526 00 00", "076 526 00 00", "karl.lidin@klarna.com")
58
+ address = @@klarna.make_address("", "Sollentunavägen 68", "18743", "Täby", :SE, "0702167225", "0702167225", "grimen@gmail.com")
59
+
60
+ # invoice_no = @@klarna.add_transaction("USER-#{test_pno}", 'ORDER-1', order_items, 0, 0, :NORMAL, test_pno, "Karl", "Lidin", address, '85.230.98.196', :SEK, :SE, :SV, :SE) #, nil, nil, nil, nil, nil, nil, nil, :TEST_MODE => true)
61
+ invoice_no = @@klarna.add_transaction("USER-#{test_pno}", 'ORDER-1', order_items, 0, 0, :NORMAL, test_pno, "Jonas", "Grimfelt", address, '85.230.98.196', :SEK, :SE, :SV, :SE) #, nil, nil, nil, nil, nil, nil, nil, :TEST_MODE => true)
62
+
63
+ pp "Invoice-no: #{invoice_no}"
64
+
65
+ # FIXME: Since Klarna API changed this fails even with the TEST_MODE (2) flag set.
66
+
67
+ # invoice_url = @@klarna.activate_invoice(invoice_no)
68
+
69
+ # pp "Invoice-URL: #{invoice_url}"
70
+
71
+
Binary file
Binary file
@@ -0,0 +1,22 @@
1
+ - prefix ||= ''
2
+
3
+ %p
4
+ = field "First name:", :"#{prefix}first_name", :text, :size => "20", :value => ""
5
+ *
6
+ %p
7
+ = field "Last name:", :"#{prefix}last_name", :text, :size => "20", :value => ""
8
+ *
9
+ %p
10
+ = field "Street address:", :"#{prefix}street_address", :text, :size => "40", :value => ""
11
+ *
12
+ %p
13
+ = field "House number:", :"#{prefix}house_number", :text, :size => "2", :value => ""
14
+ (* Germany only)
15
+ %p
16
+ = field "Postal code:", :"#{prefix}postal_code", :text, :size => "5", :value => ""
17
+ *
18
+ %p
19
+ = field "City:", :"#{prefix}city", :text, :size => "20", :value => ""
20
+ *
21
+ %p
22
+ = country_selector("Country:", :prefix => prefix)
@@ -0,0 +1,21 @@
1
+ %table
2
+ %thead
3
+ %tr
4
+ %th Quantity
5
+ %th Art.no.
6
+ %th Title
7
+ %th Price
8
+ %th VAT
9
+ %tbody
10
+ %tr
11
+ %td= field "", :"product[0]_quantity", :text, :value => "1", :size => 2
12
+ %td= field "", :"product[0]_article_no", :text, :value => "101", :size => 6
13
+ %td= field "", :"product[0]_title", :text, :value => "Product #1", :size => 20
14
+ %td= field "", :"product[0]_price", :text, :value => "99,00", :size => 8
15
+ %td= field "", :"product[0]_vat", :text, :value => "25,00", :size => 4
16
+ %tr
17
+ %td= field "", :"product[1]_quantity", :text, :value => "1", :size => 2
18
+ %td= field "", :"product[1]_article_no", :text, :value => "102", :size => 6
19
+ %td= field "", :"product[1]_title", :text, :value => "Product #2", :size => 20
20
+ %td= field "", :"product[1]_price", :text, :value => "149,00", :size => 8
21
+ %td= field "", :"product[1]_vat", :text, :value => "25,00", :size => 4
@@ -0,0 +1,2 @@
1
+ %h1 Checkout Page (Example)
2
+ %p Example of a valid checkout page for a Klarna-connected store.
@@ -0,0 +1,32 @@
1
+ %h3 Add Transaction (Create Invoice)
2
+
3
+ %form{:action => '/essential/add_transaction', :name => 'add_transaction'}
4
+ %p
5
+ = field "SSN:", :pno, :text, :size => 12, :value => "430415-8399"
6
+ *
7
+ = partial(:address)
8
+ %p
9
+ = field "E-mail:", :email, :email, :size => 30
10
+ *
11
+ %p
12
+ = field "Phone:", :phone, :tel, :size => 10
13
+ *
14
+ %p
15
+ = field "Mobile:", :mobile, :tel, :size => 10
16
+ %p
17
+ = field "Order ID:", :order_id, :text, :size => 10
18
+ %p
19
+ = field "Auto-activation:", :auto_activation, :checkbox
20
+ %p
21
+ = field "Pre-pay:", :pre_pay, :checkbox
22
+ %p
23
+ = currency_selector("Currency:")
24
+ %p
25
+ = language_selector("Language:")
26
+ %p
27
+ = field "Yearly salary:", :yearly_salary, :text, :size => 10
28
+ (* with invoice purchases over 6000 SEK, DKK, NOK or 600 EUR)
29
+ %p
30
+ = field "Reference ID:", :reference, :text, :size => 10
31
+ %p
32
+ = submit_button "Create"