-
Notifications
You must be signed in to change notification settings - Fork 70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow admin to remove VAT rate #413
base: master
Are you sure you want to change the base?
Conversation
❌ Deploy Preview for ecommerce-events failed.
|
<%= form_with url: available_vat_rates_path, method: :delete do |f| %> | ||
<%= f.hidden_field :vat_rate_code, value: available_vat_rate.code %> | ||
<%= f.submit 'Delete' %> | ||
<% end %> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I used form_with
instead of link_to
because I needed to send vat_rate_code
, which is our identifier. The vat_rate_code
can contain a dot, e.g., 10.0
. Using link_to
the code was added as a parameter to the url, which caused issues with Turbo. It appears that Turbo does not handle URLs with dots in the path correctly (see hotwired/turbo#608).
To avoid this issue, I decided to send the parameter through the form instead.
&.fetch(:vat_rate) | ||
&.then { |vat_rate| Infra::Types::VatRate.new(vat_rate) } | ||
|
||
if last_available_vat_rate_event.instance_of?(AvailableVatRateAdded) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you only care about the AvailableVatRateAdded
event then you could use RES client's api to get that:
@event_store.read.stream("Taxes::AvailableVatRate$#{vat_rate_code}").of_type(AvailableVatRateAdded).last
the if statement wouldn't be necessary
@@ -16,13 +16,17 @@ def vat_rate_for(product_id) | |||
end | |||
|
|||
def vat_rate_by_code(vat_rate_code) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Outside of scope of this task, but this method got me thinking.
This method is called in the AddAvailableVatRateHandler
It is called to check if tax rate with given code already exists. If not, then the handler publishes an event.
First of all, it breaks the tell don't ask rule. In current implementation there is possibility that two AvailableVatRateAdded
events will be published. Therefore, the system will be in unexpected state.
The question is if that is a major or minor problem.
Since this if statement has been added for some reason, let's assume it would a major issue if the vat rate code is duplicated.
To reproduce this behaviour you can follow those steps:
rails-application(dev)* fiber = Fiber.new do
rails-application(dev)* unless event_store.read.stream("AvailableVatRate$#{vat_rate_code}").last
rails-application(dev)* Fiber.yield
rails-application(dev)* event_store.publish(AvailableVatRateAdded.new(data: { vat_rate_code: }), stream_name: "AvailableVatRate$#{vat_rate_code}")
rails-application(dev)* end
rails-application(dev)> end
rails-application(dev)> fiber.resume
RubyEventStore::ActiveRecord::EventInStream Load (0.6ms) SELECT "event_store_events_in_streams".* FROM "event_store_events_in_streams" WHERE "event_store_events_in_streams"."stream" = $1 ORDER BY "event_store_events_in_streams"."id" DESC LIMIT $2 [["stream", "AvailableVatRate$60"], ["LIMIT", 1]]
=> nil # <========= The if statement was checked here, there was no event in stream
rails-application(dev)> event_store.publish(AvailableVatRateAdded.new(data: { vat_rate_code: }), stream_name: "AvailableVatRate$#{vat_rate_code}")
rails-application(dev)> event_store.read.stream("AvailableVatRate$#{vat_rate_code}").to_a.count
=> 2
How do you think we could deal with that? (tip: look at the core concepts section in RES documentation)
Issue: #408
This PR allows admin to delete VAT Rate.
Nagranie.z.ekranu.2024-10-9.o.14.09.11.mov