From 28fcb9539db509c5aa81a938ffde94d1c03eb073 Mon Sep 17 00:00:00 2001 From: Arpad Szabo Date: Thu, 19 Oct 2017 10:22:39 +0200 Subject: [PATCH 01/15] init api plans --- lib/pactas_itero/api.rb | 2 ++ lib/pactas_itero/api/plans.rb | 15 +++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 lib/pactas_itero/api/plans.rb diff --git a/lib/pactas_itero/api.rb b/lib/pactas_itero/api.rb index 3a9c14a..dee02f6 100644 --- a/lib/pactas_itero/api.rb +++ b/lib/pactas_itero/api.rb @@ -6,6 +6,7 @@ require 'pactas_itero/api/orders' require 'pactas_itero/api/invoices' require "pactas_itero/api/payment_transactions" +require "pactas_itero/api/plans" module PactasItero module Api @@ -16,5 +17,6 @@ module Api include PactasItero::Api::Orders include PactasItero::Api::Invoices include PactasItero::Api::PaymentTransactions + include PactasItero::Api::Plans end end diff --git a/lib/pactas_itero/api/plans.rb b/lib/pactas_itero/api/plans.rb new file mode 100644 index 0000000..4561d6e --- /dev/null +++ b/lib/pactas_itero/api/plans.rb @@ -0,0 +1,15 @@ +module PactasItero + module Api + module Plans + def plans(options = {}) + options = options.camelize_keys + get "api/v1/Plans", options + end + + def plan_variants(options = {}) + options = options.camelize_keys + get "api/v1/PlanVariants", options + end + end + end +end \ No newline at end of file From b06dd3f5d0753ec034a2d7cd798b65875171181b Mon Sep 17 00:00:00 2001 From: soenkex Date: Mon, 22 Jan 2018 12:08:09 +0100 Subject: [PATCH 02/15] add 2 new resource-paths for customer --- lib/pactas_itero/api/contracts.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/pactas_itero/api/contracts.rb b/lib/pactas_itero/api/contracts.rb index 0fe8fde..2400e65 100644 --- a/lib/pactas_itero/api/contracts.rb +++ b/lib/pactas_itero/api/contracts.rb @@ -35,6 +35,17 @@ def terminate_contract(contract_id, options = {}) options = options.camelize_keys post "api/v1/contracts/#{contract_id}/end", options end + + def ledgerEntries_for_contract(contract_id, options = {}) + options = options.camelize_keys + get "api/v1/contracts/#{contract_id}/ledgerEntries", options + end + + def changePaymentMethod_for_contract(contract_id, options = {}) + options = options.camelize_keys + post "api/v1/contracts/#{contract_id}/changepaymentmethod", options + end + end end end From fe6857281f494422221fd083946e9dbdc5b2c0cb Mon Sep 17 00:00:00 2001 From: soenkex Date: Mon, 22 Jan 2018 14:26:56 +0100 Subject: [PATCH 03/15] testing without SSL-verification --- lib/pactas_itero/client.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pactas_itero/client.rb b/lib/pactas_itero/client.rb index 708a132..ca4c372 100644 --- a/lib/pactas_itero/client.rb +++ b/lib/pactas_itero/client.rb @@ -75,6 +75,7 @@ def request(method, path, params = {}) def connection_options @connection_options ||= { :builder => middleware, + :ssl => {verify_mode: OpenSSL::SSL::VERIFY_NONE}, :headers => { :accept => default_media_type, :user_agent => user_agent, From 62799d51d2deed97260f78d86284d6a44bb05cd4 Mon Sep 17 00:00:00 2001 From: soenkex Date: Mon, 22 Jan 2018 15:44:01 +0100 Subject: [PATCH 04/15] add api resources coupons and discounts --- lib/pactas_itero/api.rb | 4 ++++ lib/pactas_itero/api/contracts.rb | 4 ++-- lib/pactas_itero/api/coupons.rb | 26 ++++++++++++++++++++++++++ lib/pactas_itero/api/customers.rb | 5 +++++ lib/pactas_itero/api/discounts.rb | 16 ++++++++++++++++ lib/pactas_itero/api/plans.rb | 17 ++++++++++++++++- 6 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 lib/pactas_itero/api/coupons.rb create mode 100644 lib/pactas_itero/api/discounts.rb diff --git a/lib/pactas_itero/api.rb b/lib/pactas_itero/api.rb index dee02f6..e44d656 100644 --- a/lib/pactas_itero/api.rb +++ b/lib/pactas_itero/api.rb @@ -7,6 +7,8 @@ require 'pactas_itero/api/invoices' require "pactas_itero/api/payment_transactions" require "pactas_itero/api/plans" +require "pactas_itero/api/coupons" +require "pactas_itero/api/discounts" module PactasItero module Api @@ -18,5 +20,7 @@ module Api include PactasItero::Api::Invoices include PactasItero::Api::PaymentTransactions include PactasItero::Api::Plans + include PactasItero::Api::Coupons + include PactasItero::Api::Discounts end end diff --git a/lib/pactas_itero/api/contracts.rb b/lib/pactas_itero/api/contracts.rb index 2400e65..be96351 100644 --- a/lib/pactas_itero/api/contracts.rb +++ b/lib/pactas_itero/api/contracts.rb @@ -36,12 +36,12 @@ def terminate_contract(contract_id, options = {}) post "api/v1/contracts/#{contract_id}/end", options end - def ledgerEntries_for_contract(contract_id, options = {}) + def ledger_entries_for_contract(contract_id, options = {}) options = options.camelize_keys get "api/v1/contracts/#{contract_id}/ledgerEntries", options end - def changePaymentMethod_for_contract(contract_id, options = {}) + def change_payment_method_for_contract(contract_id, options = {}) options = options.camelize_keys post "api/v1/contracts/#{contract_id}/changepaymentmethod", options end diff --git a/lib/pactas_itero/api/coupons.rb b/lib/pactas_itero/api/coupons.rb new file mode 100644 index 0000000..4adb9ed --- /dev/null +++ b/lib/pactas_itero/api/coupons.rb @@ -0,0 +1,26 @@ +module PactasItero + module Api + module Coupons + def coupons(options = {}) + options = options.camelize_keys + get "api/v1/coupons", options + end + + def coupon(coupon_id, options = {}) + options = options.camelize_keys + get "api/v1/coupons/#{coupon_id}", options + end + + def coupon(coupon_id, options = {}) + options = options.camelize_keys + get "api/v1/coupons/#{coupon_id}", options + end + + def coupon_by_code(coupon_code, options = {}) + options = options.camelize_keys + get "api/v1/coupons/?couponCode=#{coupon_code}", options + end + + end + end +end \ No newline at end of file diff --git a/lib/pactas_itero/api/customers.rb b/lib/pactas_itero/api/customers.rb index 1c1f17d..4599fcd 100644 --- a/lib/pactas_itero/api/customers.rb +++ b/lib/pactas_itero/api/customers.rb @@ -20,6 +20,11 @@ def update_customer(customer_id, options = {}) options = options.camelize_keys patch "api/v1/customers/#{customer_id}", options end + + def search_customer(search_string, options = {}) + options = options.camelize_keys + get "api/v1/customers/?search=#{search_string}", options + end end end end diff --git a/lib/pactas_itero/api/discounts.rb b/lib/pactas_itero/api/discounts.rb new file mode 100644 index 0000000..3449663 --- /dev/null +++ b/lib/pactas_itero/api/discounts.rb @@ -0,0 +1,16 @@ +module PactasItero + module Api + module Discounts + def discounts(options = {}) + options = options.camelize_keys + get "api/v1/Discounts", options + end + + def discount(discount_id, options = {}) + options = options.camelize_keys + get "api/v1/Discounts/#{discount_id}", options + end + + end + end +end \ No newline at end of file diff --git a/lib/pactas_itero/api/plans.rb b/lib/pactas_itero/api/plans.rb index 4561d6e..d9e2bcb 100644 --- a/lib/pactas_itero/api/plans.rb +++ b/lib/pactas_itero/api/plans.rb @@ -6,9 +6,24 @@ def plans(options = {}) get "api/v1/Plans", options end + def plan(plan_id, options = {}) + options = options.camelize_keys + get "api/v1/plans/#{plan_id}", options + end + def plan_variants(options = {}) options = options.camelize_keys - get "api/v1/PlanVariants", options + get "api/v1/planvariants", options + end + + def plan_variant(planvariant_id, options = {}) + options = options.camelize_keys + get "api/v1/planvariants/#{planvariant_id}", options + end + + def plan_variants_for_plan(plan_id, options = {}) + options = options.camelize_keys + get "api/v1/plans/#{plan_id}/planvariants", options end end end From 2585f839c6f7797ddbc7fd0ff8f7556b3ed3e07e Mon Sep 17 00:00:00 2001 From: soenkex Date: Mon, 22 Jan 2018 16:13:52 +0100 Subject: [PATCH 05/15] create and update plans and plan-variants, add components-resource --- lib/pactas_itero/api/components.rb | 21 +++++++++++++++++++++ lib/pactas_itero/api/contracts.rb | 9 +++++++++ lib/pactas_itero/api/plans.rb | 20 ++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 lib/pactas_itero/api/components.rb diff --git a/lib/pactas_itero/api/components.rb b/lib/pactas_itero/api/components.rb new file mode 100644 index 0000000..aab8e2f --- /dev/null +++ b/lib/pactas_itero/api/components.rb @@ -0,0 +1,21 @@ +module PactasItero + module Api + module Components + def components(options = {}) + options = options.camelize_keys + get "api/v1/components", options + end + + def component(component_id, options = {}) + options = options.camelize_keys + get "api/v1/components/#{component_id}", options + end + + def update_component(component_id, options = {}) + options = options.camelize_keys + patch "api/v1/components/#{component_id}", options + end + + end + end +end \ No newline at end of file diff --git a/lib/pactas_itero/api/contracts.rb b/lib/pactas_itero/api/contracts.rb index be96351..1597e4d 100644 --- a/lib/pactas_itero/api/contracts.rb +++ b/lib/pactas_itero/api/contracts.rb @@ -46,6 +46,15 @@ def change_payment_method_for_contract(contract_id, options = {}) post "api/v1/contracts/#{contract_id}/changepaymentmethod", options end + def subscribe_component_for_contract(contract_id, options = {}) + options = options.camelize_keys + post "api/v1/contracts/#{contract_id}/componentsubscriptions", options + + ## ComponentType:Metered + ## ComponentType:QuantityBased + + end + end end end diff --git a/lib/pactas_itero/api/plans.rb b/lib/pactas_itero/api/plans.rb index d9e2bcb..1421b08 100644 --- a/lib/pactas_itero/api/plans.rb +++ b/lib/pactas_itero/api/plans.rb @@ -11,6 +11,16 @@ def plan(plan_id, options = {}) get "api/v1/plans/#{plan_id}", options end + def create_plan(options = {}) + options = options.camelize_keys + post "api/v1/plans", options + end + + def update_plan(plan_id, options = {}) + options = options.camelize_keys + patch "api/v1/plans/#{plan_id}", options + end + def plan_variants(options = {}) options = options.camelize_keys get "api/v1/planvariants", options @@ -21,6 +31,16 @@ def plan_variant(planvariant_id, options = {}) get "api/v1/planvariants/#{planvariant_id}", options end + def create_plan_variant(options = {}) + options = options.camelize_keys + post "api/v1/planvariants", options + end + + def update_plan_variant(planvariant_id, options = {}) + options = options.camelize_keys + patch "api/v1/planvariants/#{planvariant_id}", options + end + def plan_variants_for_plan(plan_id, options = {}) options = options.camelize_keys get "api/v1/plans/#{plan_id}/planvariants", options From a8993ba0bf5937110ce18e12a1631e3a6eb84580 Mon Sep 17 00:00:00 2001 From: soenkex Date: Mon, 22 Jan 2018 21:45:05 +0100 Subject: [PATCH 06/15] change create_planvariants path --- lib/pactas_itero/api/plans.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pactas_itero/api/plans.rb b/lib/pactas_itero/api/plans.rb index 1421b08..e6479fd 100644 --- a/lib/pactas_itero/api/plans.rb +++ b/lib/pactas_itero/api/plans.rb @@ -31,9 +31,9 @@ def plan_variant(planvariant_id, options = {}) get "api/v1/planvariants/#{planvariant_id}", options end - def create_plan_variant(options = {}) + def create_plan_variant(plan_id, options = {}) options = options.camelize_keys - post "api/v1/planvariants", options + post "api/v1/plans/#{plan_id}/planvariants", options end def update_plan_variant(planvariant_id, options = {}) From ef8a4b8972207f5b3ccf5982f141fc42beb3564f Mon Sep 17 00:00:00 2001 From: soenkex Date: Mon, 22 Jan 2018 22:45:27 +0100 Subject: [PATCH 07/15] change create_plan path --- lib/pactas_itero/api/plans.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pactas_itero/api/plans.rb b/lib/pactas_itero/api/plans.rb index e6479fd..ebc3a8a 100644 --- a/lib/pactas_itero/api/plans.rb +++ b/lib/pactas_itero/api/plans.rb @@ -11,9 +11,9 @@ def plan(plan_id, options = {}) get "api/v1/plans/#{plan_id}", options end - def create_plan(options = {}) + def create_plan(plangroup_id, options = {}) options = options.camelize_keys - post "api/v1/plans", options + post "api/v1/planGroups/#{plangroup_id}/plans", options end def update_plan(plan_id, options = {}) From b775e24eee37e75b28cb8076ee4f71791fcf2bec Mon Sep 17 00:00:00 2001 From: soenkex Date: Tue, 23 Jan 2018 00:21:55 +0100 Subject: [PATCH 08/15] do not camelize exact string "_c" --- lib/pactas_itero/api/coupons.rb | 5 ----- lib/pactas_itero/ext/hash/camelize_keys.rb | 9 +++++++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/pactas_itero/api/coupons.rb b/lib/pactas_itero/api/coupons.rb index 4adb9ed..37335d3 100644 --- a/lib/pactas_itero/api/coupons.rb +++ b/lib/pactas_itero/api/coupons.rb @@ -11,11 +11,6 @@ def coupon(coupon_id, options = {}) get "api/v1/coupons/#{coupon_id}", options end - def coupon(coupon_id, options = {}) - options = options.camelize_keys - get "api/v1/coupons/#{coupon_id}", options - end - def coupon_by_code(coupon_code, options = {}) options = options.camelize_keys get "api/v1/coupons/?couponCode=#{coupon_code}", options diff --git a/lib/pactas_itero/ext/hash/camelize_keys.rb b/lib/pactas_itero/ext/hash/camelize_keys.rb index 8ce8dbb..b1d8fc8 100644 --- a/lib/pactas_itero/ext/hash/camelize_keys.rb +++ b/lib/pactas_itero/ext/hash/camelize_keys.rb @@ -24,9 +24,14 @@ def camelize_key(key) end # copied from ActiveSupport + # do not camelize exact "_c" def camelize(term) string = term.to_s - string = string.sub(/^[a-z\d]*/) { $&.capitalize } - string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/', '::') + if (string.downcase == '_c') + string + else + string = string.sub(/^[a-z\d]*/) { $&.capitalize } + string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/', '::') + end end end From 18a359f41c1002f76961c1f452a75a4253129de5 Mon Sep 17 00:00:00 2001 From: soenkex Date: Tue, 23 Jan 2018 15:48:54 +0100 Subject: [PATCH 09/15] Update README with some example --- README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d74d596..46bb7a8 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,61 @@ Or install it yourself as: ## Usage -TODO: Write usage instructions here +#### INIT: + PactasItero.client_id = "my_billwerk_client_id" + PactasItero.client_secret = "my_billwerk_client_secret" + @billwerkClient = PactasItero.client + @billwerkClient.bearer_token = @billwerkClient.try(:token).try(:access_token) + +#### Examples: +#####1) Create-Plan Example + plangroup_id = "16dc8c7gba5c2202143de8b5" + plan_options={} + plan_options[:Name] = {"_c" => "Package XXL" } + plan_options[:PlanDescription] = {"_c"=>"This is the Plan-Description for XXL"} + plan_options[:PlanGroupId] = plangroup_id + plan_options[:SetupDescription] = {"_c"=>"one-time setup-fee"} + plan_options[:TrialEndNotificationPeriod] = {'Unit' => "Day", 'Quantity' => 3} + plan_options[:TrialEndPolicy] = "RequestPayment" + plan_options[:TrialPeriod] = {:Unit => "Day", :Quantity => 7} + plan_options[:IsQuantityBased] = false + plan_options[:Hidden] = false + plan_options[:IsDeletable] = false + @plan=@billwerkClient.create_plan(plangroup_id,plan_options) + + +#####2) Create-Order Example +######Submitted via Order-Form (Example Data) + Parameters: {"Cart"=>{"PlanVariantId"=>"19dc8c7gba5c2202143de1s9"}, "Customer"=>{"CompanyName"=>"Mustermann Ltd.", "EmailAddress"=>"mustermann@test.de", "FirstName"=>"Klaus", "LastName"=>"Mustermann", "VatId"=>"DE63244715", "Address"=>{"Street"=>"Karl-Str.", "HouseNumber"=>"55", "PostalCode"=>"10421", "City"=>"Berlin", "Country"=>"DE"}}, "Bearer"=>{"holder"=>"Mustermann Ltd", "iban"=>"DE883299699663", "bic"=>"HAC556AXXX"}} +######Usage in Order-Controller + orderOptions = {} + orderOptions[:ContractCustomFields] = {} + orderOptions[:AdditionalData] = {} + orderOptions[:AdditionalData][:Contract] = {} + orderOptions[:AdditionalData][:Contract][:CustomFields] = {} + orderOptions[:Cart] = params[:Cart].to_h + orderOptions[:Cart][:Quantity] = 1 + orderOptions[:Cart][:EnableTrial] = true + orderOptions[:Cart][:ComponentSubscriptions] = [] + orderOptions[:Cart][:MeteredUsages] = [] + orderOptions[:Cart][:DiscountSubscriptions] = [] + orderOptions[:Cart][:RatedItems] = [] + orderOptions[:Customer] = params[:Customer].to_h + orderOptions[:Customer][:ExternalCustomerId] = "#{current_customer.id}" + orderOptions[:Customer][:Language] = 'de-DE'; + orderOptions[:Customer][:Locale] = 'de-DE'; + orderOptions[:Customer][:DebitorAccount] = "#{current_customer.debit_id}" + orderOptions[:Customer][:Hidden] = false + orderOptions[:StartDate] = Time.now.to_formatted_s(:iso8601) + @order=@billwerkClient.create_order(orderOptions) + +######On Success Commit-Order via Order-Controller + commitOptions = {} + commitOptions[:PaymentMethod] = "Debit:FakeProvider" + commitOptions[:Bearer] = params[:Bearer].to_h + commitOptions[:Bearer][:mandatereference] = "Z-#{current_customer.debit_id}-#{current_customer.id}" + @commit = @billwerkClient.commit_order(@order.id, commitOptions) + ## Contributing From 9c716df547d977f46c0d82823fde0c8e6bc3a84b Mon Sep 17 00:00:00 2001 From: soenkex Date: Tue, 23 Jan 2018 16:00:58 +0100 Subject: [PATCH 10/15] tweak README --- README.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 46bb7a8..cd4991c 100644 --- a/README.md +++ b/README.md @@ -22,15 +22,15 @@ Or install it yourself as: ## Usage -#### INIT: +### INIT: PactasItero.client_id = "my_billwerk_client_id" PactasItero.client_secret = "my_billwerk_client_secret" @billwerkClient = PactasItero.client @billwerkClient.bearer_token = @billwerkClient.try(:token).try(:access_token) -#### Examples: -#####1) Create-Plan Example - plangroup_id = "16dc8c7gba5c2202143de8b5" +### Examples: +####1) Create-Plan Example + plangroup_id = "16dc8c7gba5c2202143de8b5" plan_options={} plan_options[:Name] = {"_c" => "Package XXL" } plan_options[:PlanDescription] = {"_c"=>"This is the Plan-Description for XXL"} @@ -45,10 +45,13 @@ Or install it yourself as: @plan=@billwerkClient.create_plan(plangroup_id,plan_options) -#####2) Create-Order Example -######Submitted via Order-Form (Example Data) - Parameters: {"Cart"=>{"PlanVariantId"=>"19dc8c7gba5c2202143de1s9"}, "Customer"=>{"CompanyName"=>"Mustermann Ltd.", "EmailAddress"=>"mustermann@test.de", "FirstName"=>"Klaus", "LastName"=>"Mustermann", "VatId"=>"DE63244715", "Address"=>{"Street"=>"Karl-Str.", "HouseNumber"=>"55", "PostalCode"=>"10421", "City"=>"Berlin", "Country"=>"DE"}}, "Bearer"=>{"holder"=>"Mustermann Ltd", "iban"=>"DE883299699663", "bic"=>"HAC556AXXX"}} -######Usage in Order-Controller +####2) Create-Order Example +####Submitted via Order-Form (Example Data) + Parameters: {"Cart"=>{"PlanVariantId"=>"19dc8c7gba5c2202143de1s9"}, + "Customer"=>{"CompanyName"=>"Mustermann Ltd.", "EmailAddress"=>"mustermann@test.de", "FirstName"=>"Klaus", "LastName"=>"Mustermann", "VatId"=>"DE63244715", + "Address"=>{"Street"=>"Karl-Str.", "HouseNumber"=>"55", "PostalCode"=>"10421", "City"=>"Berlin", "Country"=>"DE"}}, + "Bearer"=>{"holder"=>"Mustermann Ltd", "iban"=>"DE883299699663", "bic"=>"HAC556AXXX"}} +####Usage in Order-Controller orderOptions = {} orderOptions[:ContractCustomFields] = {} orderOptions[:AdditionalData] = {} @@ -70,7 +73,7 @@ Or install it yourself as: orderOptions[:StartDate] = Time.now.to_formatted_s(:iso8601) @order=@billwerkClient.create_order(orderOptions) -######On Success Commit-Order via Order-Controller +####On Success Commit-Order via Order-Controller commitOptions = {} commitOptions[:PaymentMethod] = "Debit:FakeProvider" commitOptions[:Bearer] = params[:Bearer].to_h From 6154d97f5ed6a267e66a64ccb673979627c2a20f Mon Sep 17 00:00:00 2001 From: soenkex Date: Tue, 23 Jan 2018 16:17:07 +0100 Subject: [PATCH 11/15] tweak README --- README.md | 123 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 69 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index cd4991c..7ef3664 100644 --- a/README.md +++ b/README.md @@ -23,63 +23,78 @@ Or install it yourself as: ## Usage ### INIT: - PactasItero.client_id = "my_billwerk_client_id" - PactasItero.client_secret = "my_billwerk_client_secret" - @billwerkClient = PactasItero.client - @billwerkClient.bearer_token = @billwerkClient.try(:token).try(:access_token) - +``` +PactasItero.client_id = "my_billwerk_client_id" +PactasItero.client_secret = "my_billwerk_client_secret" +@billwerkClient = PactasItero.client +@billwerkClient.bearer_token = @billwerkClient.try(:token).try(:access_token) +``` + ### Examples: + ####1) Create-Plan Example - plangroup_id = "16dc8c7gba5c2202143de8b5" - plan_options={} - plan_options[:Name] = {"_c" => "Package XXL" } - plan_options[:PlanDescription] = {"_c"=>"This is the Plan-Description for XXL"} - plan_options[:PlanGroupId] = plangroup_id - plan_options[:SetupDescription] = {"_c"=>"one-time setup-fee"} - plan_options[:TrialEndNotificationPeriod] = {'Unit' => "Day", 'Quantity' => 3} - plan_options[:TrialEndPolicy] = "RequestPayment" - plan_options[:TrialPeriod] = {:Unit => "Day", :Quantity => 7} - plan_options[:IsQuantityBased] = false - plan_options[:Hidden] = false - plan_options[:IsDeletable] = false - @plan=@billwerkClient.create_plan(plangroup_id,plan_options) - - + +``` +plangroup_id = "16dc8c7gba5c2202143de8b5" +plan_options={} +plan_options[:Name] = {"_c" => "Package XXL" } +plan_options[:PlanDescription] = {"_c"=>"This is the Plan-Description for XXL"} +plan_options[:PlanGroupId] = plangroup_id +plan_options[:SetupDescription] = {"_c"=>"one-time setup-fee"} +plan_options[:TrialEndNotificationPeriod] = {'Unit' => "Day", 'Quantity' => 3} +plan_options[:TrialEndPolicy] = "RequestPayment" +plan_options[:TrialPeriod] = {:Unit => "Day", :Quantity => 7} +plan_options[:IsQuantityBased] = false +plan_options[:Hidden] = false +plan_options[:IsDeletable] = false +@plan=@billwerkClient.create_plan(plangroup_id,plan_options) +``` + ####2) Create-Order Example -####Submitted via Order-Form (Example Data) - Parameters: {"Cart"=>{"PlanVariantId"=>"19dc8c7gba5c2202143de1s9"}, - "Customer"=>{"CompanyName"=>"Mustermann Ltd.", "EmailAddress"=>"mustermann@test.de", "FirstName"=>"Klaus", "LastName"=>"Mustermann", "VatId"=>"DE63244715", - "Address"=>{"Street"=>"Karl-Str.", "HouseNumber"=>"55", "PostalCode"=>"10421", "City"=>"Berlin", "Country"=>"DE"}}, - "Bearer"=>{"holder"=>"Mustermann Ltd", "iban"=>"DE883299699663", "bic"=>"HAC556AXXX"}} -####Usage in Order-Controller - orderOptions = {} - orderOptions[:ContractCustomFields] = {} - orderOptions[:AdditionalData] = {} - orderOptions[:AdditionalData][:Contract] = {} - orderOptions[:AdditionalData][:Contract][:CustomFields] = {} - orderOptions[:Cart] = params[:Cart].to_h - orderOptions[:Cart][:Quantity] = 1 - orderOptions[:Cart][:EnableTrial] = true - orderOptions[:Cart][:ComponentSubscriptions] = [] - orderOptions[:Cart][:MeteredUsages] = [] - orderOptions[:Cart][:DiscountSubscriptions] = [] - orderOptions[:Cart][:RatedItems] = [] - orderOptions[:Customer] = params[:Customer].to_h - orderOptions[:Customer][:ExternalCustomerId] = "#{current_customer.id}" - orderOptions[:Customer][:Language] = 'de-DE'; - orderOptions[:Customer][:Locale] = 'de-DE'; - orderOptions[:Customer][:DebitorAccount] = "#{current_customer.debit_id}" - orderOptions[:Customer][:Hidden] = false - orderOptions[:StartDate] = Time.now.to_formatted_s(:iso8601) - @order=@billwerkClient.create_order(orderOptions) - -####On Success Commit-Order via Order-Controller - commitOptions = {} - commitOptions[:PaymentMethod] = "Debit:FakeProvider" - commitOptions[:Bearer] = params[:Bearer].to_h - commitOptions[:Bearer][:mandatereference] = "Z-#{current_customer.debit_id}-#{current_customer.id}" - @commit = @billwerkClient.commit_order(@order.id, commitOptions) - + +#####Submitted via Order-Form (Example Data) + +``` +Parameters: {"Cart"=>{"PlanVariantId"=>"19dc8c7gba5c2202143de1s9"}, + "Customer"=>{"CompanyName"=>"Mustermann Ltd.", "EmailAddress"=>"mustermann@test.de", "FirstName"=>"Klaus", "LastName"=>"Mustermann", "VatId"=>"DE63244715", + "Address"=>{"Street"=>"Karl-Str.", "HouseNumber"=>"55", "PostalCode"=>"10421", "City"=>"Berlin", "Country"=>"DE"}}, + "Bearer"=>{"holder"=>"Mustermann Ltd", "iban"=>"DE883299699663", "bic"=>"HAC556AXXX"}} +``` + +#####Usage in Order-Controller + +``` +orderOptions = {} +orderOptions[:ContractCustomFields] = {} +orderOptions[:AdditionalData] = {} +orderOptions[:AdditionalData][:Contract] = {} +orderOptions[:AdditionalData][:Contract][:CustomFields] = {} +orderOptions[:Cart] = params[:Cart].to_h +orderOptions[:Cart][:Quantity] = 1 +orderOptions[:Cart][:EnableTrial] = true +orderOptions[:Cart][:ComponentSubscriptions] = [] +orderOptions[:Cart][:MeteredUsages] = [] +orderOptions[:Cart][:DiscountSubscriptions] = [] +orderOptions[:Cart][:RatedItems] = [] +orderOptions[:Customer] = params[:Customer].to_h +orderOptions[:Customer][:ExternalCustomerId] = "#{current_customer.id}" +orderOptions[:Customer][:Language] = 'de-DE'; +orderOptions[:Customer][:Locale] = 'de-DE'; +orderOptions[:Customer][:DebitorAccount] = "#{current_customer.debit_id}" +orderOptions[:Customer][:Hidden] = false +orderOptions[:StartDate] = Time.now.to_formatted_s(:iso8601) +@order=@billwerkClient.create_order(orderOptions) +``` + +#####On Success Commit-Order via Order-Controller + +``` +commitOptions = {} +commitOptions[:PaymentMethod] = "Debit:FakeProvider" +commitOptions[:Bearer] = params[:Bearer].to_h +commitOptions[:Bearer][:mandatereference] = "Z-#{current_customer.debit_id}-#{current_customer.id}" +@commit = @billwerkClient.commit_order(@order.id, commitOptions) +``` ## Contributing From 88eaf74e79d753406303c825f12d46304b858429 Mon Sep 17 00:00:00 2001 From: soenkex Date: Tue, 23 Jan 2018 16:49:17 +0100 Subject: [PATCH 12/15] add Components module to api.rb --- README.md | 10 +++++----- lib/pactas_itero/api.rb | 2 ++ lib/pactas_itero/api/contracts.rb | 3 --- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7ef3664..5cc2bae 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ PactasItero.client_secret = "my_billwerk_client_secret" ### Examples: -####1) Create-Plan Example +#### 1) Create-Plan Example ``` plangroup_id = "16dc8c7gba5c2202143de8b5" @@ -50,9 +50,9 @@ plan_options[:IsDeletable] = false @plan=@billwerkClient.create_plan(plangroup_id,plan_options) ``` -####2) Create-Order Example +#### 2) Create-Order Example -#####Submitted via Order-Form (Example Data) +##### Submitted via Order-Form (Example Data) ``` Parameters: {"Cart"=>{"PlanVariantId"=>"19dc8c7gba5c2202143de1s9"}, @@ -61,7 +61,7 @@ Parameters: {"Cart"=>{"PlanVariantId"=>"19dc8c7gba5c2202143de1s9"}, "Bearer"=>{"holder"=>"Mustermann Ltd", "iban"=>"DE883299699663", "bic"=>"HAC556AXXX"}} ``` -#####Usage in Order-Controller +##### Usage in Order-Controller ``` orderOptions = {} @@ -86,7 +86,7 @@ orderOptions[:StartDate] = Time.now.to_formatted_s(:iso8601) @order=@billwerkClient.create_order(orderOptions) ``` -#####On Success Commit-Order via Order-Controller +##### On Success Commit-Order via Order-Controller ``` commitOptions = {} diff --git a/lib/pactas_itero/api.rb b/lib/pactas_itero/api.rb index e44d656..05a043e 100644 --- a/lib/pactas_itero/api.rb +++ b/lib/pactas_itero/api.rb @@ -9,6 +9,7 @@ require "pactas_itero/api/plans" require "pactas_itero/api/coupons" require "pactas_itero/api/discounts" +require "pactas_itero/api/components" module PactasItero module Api @@ -22,5 +23,6 @@ module Api include PactasItero::Api::Plans include PactasItero::Api::Coupons include PactasItero::Api::Discounts + include PactasItero::Api::Components end end diff --git a/lib/pactas_itero/api/contracts.rb b/lib/pactas_itero/api/contracts.rb index 1597e4d..e54ea80 100644 --- a/lib/pactas_itero/api/contracts.rb +++ b/lib/pactas_itero/api/contracts.rb @@ -50,9 +50,6 @@ def subscribe_component_for_contract(contract_id, options = {}) options = options.camelize_keys post "api/v1/contracts/#{contract_id}/componentsubscriptions", options - ## ComponentType:Metered - ## ComponentType:QuantityBased - end end From f2652057d7afb3432877ce40088158831aba7032 Mon Sep 17 00:00:00 2001 From: soenkex Date: Sun, 4 Mar 2018 16:46:10 +0100 Subject: [PATCH 13/15] add create method for coupons, discounts and components --- lib/pactas_itero/api/components.rb | 5 +++++ lib/pactas_itero/api/contracts.rb | 5 +++++ lib/pactas_itero/api/coupons.rb | 10 ++++++++++ lib/pactas_itero/api/discounts.rb | 10 ++++++++++ 4 files changed, 30 insertions(+) diff --git a/lib/pactas_itero/api/components.rb b/lib/pactas_itero/api/components.rb index aab8e2f..aab957b 100644 --- a/lib/pactas_itero/api/components.rb +++ b/lib/pactas_itero/api/components.rb @@ -10,6 +10,11 @@ def component(component_id, options = {}) options = options.camelize_keys get "api/v1/components/#{component_id}", options end + + def create_component(plangroup_id, options = {}) + options = options.camelize_keys + post "api/v1/planGroups/#{plangroup_id}/components", options + end def update_component(component_id, options = {}) options = options.camelize_keys diff --git a/lib/pactas_itero/api/contracts.rb b/lib/pactas_itero/api/contracts.rb index e54ea80..3eb26b6 100644 --- a/lib/pactas_itero/api/contracts.rb +++ b/lib/pactas_itero/api/contracts.rb @@ -35,6 +35,11 @@ def terminate_contract(contract_id, options = {}) options = options.camelize_keys post "api/v1/contracts/#{contract_id}/end", options end + + def annulate_contract(contract_id, options = {}) + options = options.camelize_keys + post "api/v1/contracts/#{contract_id}/annulate", options + end def ledger_entries_for_contract(contract_id, options = {}) options = options.camelize_keys diff --git a/lib/pactas_itero/api/coupons.rb b/lib/pactas_itero/api/coupons.rb index 37335d3..26a3edd 100644 --- a/lib/pactas_itero/api/coupons.rb +++ b/lib/pactas_itero/api/coupons.rb @@ -10,7 +10,17 @@ def coupon(coupon_id, options = {}) options = options.camelize_keys get "api/v1/coupons/#{coupon_id}", options end + + def create_coupon(plangroup_id, options = {}) + options = options.camelize_keys + post "api/v1/planGroups/#{plangroup_id}/coupons", options + end + def update_coupon(coupon_id, options = {}) + options = options.camelize_keys + patch "api/v1/coupons/#{coupon_id}", options + end + def coupon_by_code(coupon_code, options = {}) options = options.camelize_keys get "api/v1/coupons/?couponCode=#{coupon_code}", options diff --git a/lib/pactas_itero/api/discounts.rb b/lib/pactas_itero/api/discounts.rb index 3449663..3ac9b2b 100644 --- a/lib/pactas_itero/api/discounts.rb +++ b/lib/pactas_itero/api/discounts.rb @@ -10,6 +10,16 @@ def discount(discount_id, options = {}) options = options.camelize_keys get "api/v1/Discounts/#{discount_id}", options end + + def create_discount(plangroup_id, options = {}) + options = options.camelize_keys + post "api/v1/planGroups/#{plangroup_id}/discounts", options + end + + def update_discount(discount_id, options = {}) + options = options.camelize_keys + patch "api/v1/discount/#{discount_id}", options + end end end From 19eee4ac9b1a68daee75b52bf605c0bf5a01af5f Mon Sep 17 00:00:00 2001 From: soenkex Date: Mon, 19 Mar 2018 18:03:03 +0100 Subject: [PATCH 14/15] add "usage" method for components in api/contracts.rb --- lib/pactas_itero/api/contracts.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/pactas_itero/api/contracts.rb b/lib/pactas_itero/api/contracts.rb index 1597e4d..91ef208 100644 --- a/lib/pactas_itero/api/contracts.rb +++ b/lib/pactas_itero/api/contracts.rb @@ -46,13 +46,14 @@ def change_payment_method_for_contract(contract_id, options = {}) post "api/v1/contracts/#{contract_id}/changepaymentmethod", options end + def component_usage_for_contract(contract_id, options = {}) + options = options.camelize_keys + post "api/v1/contracts/#{contract_id}/usage", options + end + def subscribe_component_for_contract(contract_id, options = {}) options = options.camelize_keys post "api/v1/contracts/#{contract_id}/componentsubscriptions", options - - ## ComponentType:Metered - ## ComponentType:QuantityBased - end end From 4089f41c5b4bd6f2e8780a07c81848d71a2de96a Mon Sep 17 00:00:00 2001 From: soenkex Date: Thu, 5 Apr 2018 20:53:20 +0200 Subject: [PATCH 15/15] Search by couponCode only supported when enabled=true or active=true --- lib/pactas_itero/api/coupons.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pactas_itero/api/coupons.rb b/lib/pactas_itero/api/coupons.rb index 26a3edd..251340b 100644 --- a/lib/pactas_itero/api/coupons.rb +++ b/lib/pactas_itero/api/coupons.rb @@ -23,7 +23,7 @@ def update_coupon(coupon_id, options = {}) def coupon_by_code(coupon_code, options = {}) options = options.camelize_keys - get "api/v1/coupons/?couponCode=#{coupon_code}", options + get "api/v1/coupons/?couponCode=#{coupon_code}&active=true", options end end