Skip to content

Commit 4541299

Browse files
committed
feat(payment_terms): REST API write and read
1 parent d2c5852 commit 4541299

21 files changed

Lines changed: 346 additions & 7 deletions

app/controllers/api/v1/billing_entities_controller.rb

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def update
6767
private
6868

6969
def create_params
70-
params.require(:billing_entity).permit(
70+
permitted = params.require(:billing_entity).permit(
7171
:code,
7272
:name,
7373
:einvoicing,
@@ -99,10 +99,12 @@ def create_params
9999
:document_locale
100100
]
101101
)
102+
103+
with_raw_payment_term(permitted, params[:billing_entity])
102104
end
103105

104106
def update_params
105-
params.require(:billing_entity).permit(
107+
permitted = params.require(:billing_entity).permit(
106108
:name,
107109
:einvoicing,
108110
:email,
@@ -135,6 +137,20 @@ def update_params
135137
tax_codes: [],
136138
invoice_custom_section_codes: []
137139
)
140+
141+
with_raw_payment_term(permitted, params[:billing_entity])
142+
end
143+
144+
# payment_term is a discriminated union validated in PaymentTerms::ValidateService.
145+
# Strong params would silently drop null and non-hash values before validation,
146+
# breaking clear-by-null and hiding invalid_format errors.
147+
def with_raw_payment_term(permitted, raw)
148+
if raw.respond_to?(:key?) && raw.key?(:payment_term)
149+
permitted[:payment_term] = raw[:payment_term]
150+
permitted[:payment_term].permit! if permitted[:payment_term].is_a?(ActionController::Parameters)
151+
end
152+
153+
permitted
138154
end
139155

140156
def resource_name

app/controllers/api/v1/customers_controller.rb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def checkout_url
121121
private
122122

123123
def create_params
124-
params.expect(customer: [
124+
permitted = params.expect(customer: [
125125
:account_type,
126126
:external_id,
127127
:name,
@@ -191,6 +191,20 @@ def create_params
191191
tax_codes: [],
192192
invoice_custom_section_codes: []
193193
])
194+
195+
with_raw_payment_term(permitted, params[:customer])
196+
end
197+
198+
# payment_term is a discriminated union validated in PaymentTerms::ValidateService.
199+
# Strong params would silently drop null and non-hash values before validation,
200+
# breaking clear-by-null and hiding invalid_format errors.
201+
def with_raw_payment_term(permitted, raw)
202+
if raw.respond_to?(:key?) && raw.key?(:payment_term)
203+
permitted[:payment_term] = raw[:payment_term]
204+
permitted[:payment_term].permit! if permitted[:payment_term].is_a?(ActionController::Parameters)
205+
end
206+
207+
permitted
194208
end
195209

196210
def render_customer(customer)

app/serializers/v1/billing_entity_serializer.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def serialize
2323
legal_number: model.legal_number,
2424
timezone: model.timezone,
2525
net_payment_term: model.net_payment_term,
26+
payment_term: model.payment_term,
2627
email_settings: model.email_settings,
2728
document_numbering: model.document_numbering,
2829
document_number_prefix: model.document_number_prefix,

app/serializers/v1/customer_serializer.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def serialize
3333
timezone: model.timezone,
3434
applicable_timezone: model.applicable_timezone,
3535
net_payment_term: model.net_payment_term,
36+
payment_term: model.payment_term,
3637
external_salesforce_id: model.external_salesforce_id,
3738
finalize_zero_amount_invoice: model.finalize_zero_amount_invoice,
3839
billing_configuration:,

app/serializers/v1/invoice_serializer.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def serialize
1212
issuing_date: model.issuing_date&.iso8601,
1313
payment_due_date: model.payment_due_date&.iso8601,
1414
net_payment_term: model.net_payment_term,
15+
payment_term: model.snapshotted_payment_term&.to_h,
1516
invoice_type: model.invoice_type,
1617
status: model.status,
1718
payment_status: model.payment_status,

app/services/billing_entities/create_service.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ def initialize(organization:, params:)
1919
def call
2020
return result.forbidden_failure! unless organization.can_create_billing_entity?
2121

22+
unless PaymentTerms::ValidateService.new(result, payment_term: params[:payment_term]).valid?
23+
return result
24+
end
25+
2226
ActiveRecord::Base.transaction do
2327
billing_entity.assign_attributes(create_attributes)
2428
billing_entity.id = params[:id] if params[:id]
@@ -77,7 +81,6 @@ def create_attributes
7781
legal_name
7882
legal_number
7983
name
80-
net_payment_term
8184
phone
8285
state
8386
tax_identification_number

app/services/billing_entities/update_service.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ def initialize(billing_entity:, params:)
1919
def call
2020
return result.not_found_failure!(resource: "billing_entity") unless billing_entity
2121

22+
unless PaymentTerms::ValidateService.new(result, payment_term: params[:payment_term]).valid?
23+
return result
24+
end
25+
2226
original_attributes = billing_entity.attributes
2327
old_tax_codes = billing_entity.taxes.pluck(:code)
2428

app/services/customers/create_service.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ def call
3434
)
3535
end
3636

37+
unless PaymentTerms::ValidateService.new(result, payment_term: args[:payment_term]).valid?
38+
return result
39+
end
40+
3741
customer = billing_entity.customers.new(
3842
organization_id: organization.id,
3943
external_id: args[:external_id],
@@ -56,7 +60,6 @@ def call
5660
logo_url: args[:logo_url],
5761
legal_name: args[:legal_name],
5862
legal_number: args[:legal_number],
59-
net_payment_term: args[:net_payment_term],
6063
external_salesforce_id: args[:external_salesforce_id],
6164
payment_provider: args[:payment_provider],
6265
payment_provider_code: args[:payment_provider_code],

app/services/customers/update_service.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ def call
2929
)
3030
end
3131

32+
unless PaymentTerms::ValidateService.new(result, payment_term: args[:payment_term]).valid?
33+
return result
34+
end
35+
3236
old_payment_provider = customer.payment_provider
3337
old_provider_customer = customer.provider_customer
3438
original_tax_values = customer.slice(:tax_identification_number, :zipcode, :country).symbolize_keys

app/services/customers/upsert_from_api_service.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ def call
4444
)
4545
end
4646

47+
unless PaymentTerms::ValidateService.new(result, payment_term: params[:payment_term]).valid?
48+
return result
49+
end
50+
4751
ActiveRecord::Base.transaction do
4852
original_tax_values = customer.slice(:tax_identification_number, :zipcode, :country).symbolize_keys
4953

@@ -71,7 +75,6 @@ def call
7175
customer.logo_url = params[:logo_url] if params.key?(:logo_url)
7276
customer.legal_name = params[:legal_name] if params.key?(:legal_name)
7377
customer.legal_number = params[:legal_number] if params.key?(:legal_number)
74-
customer.net_payment_term = params[:net_payment_term] if params.key?(:net_payment_term)
7578
customer.external_salesforce_id = params[:external_salesforce_id] if params.key?(:external_salesforce_id)
7679
customer.finalize_zero_amount_invoice = params[:finalize_zero_amount_invoice] || "inherit" if params.key?(:finalize_zero_amount_invoice)
7780
customer.firstname = params[:firstname] if params.key?(:firstname)

0 commit comments

Comments
 (0)