Commit Graph

59 Commits

Author SHA1 Message Date
Maikel Linke
54f83b45c8 Replace has_spree_role? with simpler admin?
We have only one role, so let's get rid of the unneeded method.

Now we are in a better place to get rid of Spree::Role and replace it
with a simple boolean.
2024-12-19 09:19:01 +11:00
Maikel Linke
8098131dba Store link to open backorder
We don't use the link yet, but it's there.
2024-11-19 15:53:59 +11:00
Maikel Linke
597d9ad314 Add semantic links to Exchange 2024-11-19 15:53:59 +11:00
cyrillefr
9ae064a24f Fix RedundantPresenceValidationOnBelongs on some files
- presence: true is redundant since Rails 5.0 BUT applies
   with new default config of
   belongs_to_required_by_default to true
   Lots of files with belongs_to_required_by_default = false
   (backward compatibility)
   So: deleting this setting implies to adding optional: true
 - added 'NOT NULL' constraints so model constraints match
   with contraints on DB tables.
 - updated the todo
2024-04-22 17:36:47 +02:00
cyrillefr
404fcf1f72 Fix FixRailsWhereEquals
- fixes offenses caused by RuboCop::Cop::Rails::WhereEquals cop
2024-04-09 10:44:02 +02:00
Ahmed Ejaz
0e0b322707 #11667, assign tag_list to cloned exchange tag_list 2023-10-28 14:02:44 +05:00
Neal Chambers
4ffd3759cc Fix Style/HashSyntax 2023-09-12 23:19:05 +09:00
Maikel Linke
faeb8ae8f8 Fix Exchange clone tagging
The validation of ActsAsTaggableOn::Taggable failed when trying to copy
tag ids during cloning. But I found that it's totally unnecessary
because `Exchange.dup` copies the `tag_list` attribute already and it
gets saved correctly. There's an existing spec for this.
2023-08-11 10:14:47 +10:00
Maikel Linke
8ef6966891 Declare old belongs_to default on remaining models
It would take ages to go through all files now and assess all belongs_to
associations. So I just declare the old default and then we can move on
and apply the new default for the application while these classes still
use the old one. All new models will then use the new default which is
the goal of this excercise and we can refactor old classes when we touch
them anyway.
2023-08-11 10:14:43 +10:00
Matt-Yorkley
3ef7d2c9ff Remove master variant from product 2023-06-16 21:23:44 +01:00
Matt-Yorkley
459ef5f0d1 Only delete related exchange variants if exchange is outgoing 2023-05-22 11:09:29 +01:00
Matt-Yorkley
434c9ae110 Delete exchange variants in bulk when deleting an order cycle 2023-05-19 10:46:55 +01:00
Maikel Linke
636b365304 Tell Rubocop and devs about bulk insert 2023-05-12 10:30:47 +10:00
Matt-Yorkley
b139087c5f Clone ExchangeVariant objects in bulk
An ExchangeVariant is a simple representation of a join table between Exchange and Variant. Previously this code was triggering an additional INSERT query for every variant added to the newly cloned exchange. Some exchanges have ~3000 variants! The code now creates them in bulk in a single INSERT statement. When cloning large order cycles this can improve performance by ~1000% or so.
2023-05-11 20:51:20 +01:00
Luis Ramos
e52937c113 Use rubocop auto correct to add frozen string literal to all files
This is an unsafe auto corection, we will need to trust our build here
2021-06-17 23:07:26 +01:00
Luis Ramos
f29f525d90 Adapt code to circunvent security constraint on rails 6.1 2021-05-10 23:39:17 +01:00
Maikel Linke
1364b878fe Add ApplicationRecord for customisations
Rails 5 introduced this new class to confine application-specific monkey
patches to our models only, and not leak into other libraries using
ActiveRecord::Base.

https://bigbinary.com/blog/application-record-in-rails-5
2021-04-15 15:59:03 +10:00
Matt-Yorkley
45a06a300e Update Exchange touch on Enterprise to use touch_later
This can improve issues with deadlocks where multiple touch calls are triggered in a single update, for example where an exchange touches it's parent enterprise on save, and we do this:

oc_with_lots_of_exchanges.exchanges.each{|ex| ex.clone! }
2021-03-26 12:44:50 +00:00
Luis Ramos
32a4355f09 Merge branch 'master' into 3-0-stable-mar6 2020-03-12 16:54:09 +00:00
Matt-Yorkley
98fdbb8621 Update deprecated #scoped calls
Model#scoped is now deprecated. Model#where(nil) in Rails 4 returns the same result as Model#scoped in Rails 3
2020-02-22 11:06:51 +00:00
Luis Ramos
1eba17f048 Make select column explicit to avoid too many columns sql error 2020-02-18 18:32:52 +00:00
Matt-Yorkley
ab330e882e Remove product cache 2019-10-18 21:15:11 +01:00
Maikel Linke
73372a58ef Remove unused and dangerous Exchange#eql? override
The `eql?` override has been added in very early commits but was
actually not used except in a test. It also caused performance problems
since each call to `eql?` would issue two database queries. A developer
would unknowingly trigger these when using `exchanges.uniq`. A mistake
that could have happened again in the future.

I moved the implementation to the test that was actually using it and
made a second test a bit more explicit.
2019-07-02 18:42:02 +10:00
Maikel Linke
287d6a926a Document Exchange 2019-07-02 18:42:02 +10:00
Maikel Linke
04b07a1ff5 Further optimise querying affected exchanges
The implementation queried the database for each incoming variant that
was changed. This rewrite combines ActiveRecord relations so that it
creates only one query. This saves another 5-10% of execution time when
updating enterprise fees on production instances.
2019-07-02 18:42:01 +10:00
luisramos0
c15c5435ff Fix long lines in exchange model 2019-06-18 10:45:01 +01:00
luisramos0
ba91abd20e Adapt exchanges.with_any_variant scope to rails 4 2019-06-18 10:40:49 +01:00
luisramos0
f58d9ec790 Fix rubocop issues in exchange model 2019-05-28 16:10:40 +01:00
luisramos0
ffbd79d3dd Change all model scopes without a callable object to use a proc 2019-05-28 15:55:13 +01:00
luisramos0
86b0d71c7e Result of rubocop auto-correct and rebuilding rubocop_manual_todo 2019-05-28 12:57:29 +01:00
Michael Hughes
9e56198092 references to payment_enterprise_id removed, new migration created 2019-05-04 16:32:48 +01:00
Pau Perez
cee24dcca7 Use indented style for multiline method calls
This enables the Rubocop's Style/MultilineMethodCallIndentation cop with
indentend enforced style. Which makes you split multiline method calls like:

  orders = Spree::Order
    .an_scope
    .another_scope
    .where(id: list_of_ids)

It also autofixes the current violations and updates the
rubocop_todo.yml
2017-07-12 10:40:53 +02:00
Rohan Mitchell
1ea4f4274c Add enterprise cache invalidation for order cycle changes 2016-11-25 14:14:42 +11:00
Rohan Mitchell
bd11c6ce14 New hash style 2016-11-25 14:14:42 +11:00
Rob Harrington
9dc1294ec5 Outgoing exchanges can be tagged
Using panels infrastructure to display tags and products interfaces
2016-05-27 16:25:10 +10:00
Rohan Mitchell
27d7b3026b Move OpenFoodNetwork::ProductsCacheIntegrityChecker.active_exchanges to Exchange model 2016-03-09 12:28:09 +11:00
Rohan Mitchell
8af6866ae4 Refresh products cache when exchange is changed or destroyed 2016-02-24 15:05:03 +11:00
Rohan Mitchell
8d270e919f Sort exchanges for display when editing an order cycle 2015-12-10 09:17:25 +11:00
Rob Harrington
85e4b3970c Adding an 'involved' scope to exchanges 2015-03-27 15:56:07 +11:00
Rohan Mitchell
9b15c213d1 When an enterprise user saves an order cycle for which it manages only some of the enterprises involved, do not delete the other exchanges 2014-05-23 11:28:00 +10:00
Rohan Mitchell
85db8859bb On admin order cycle edit page, do not show exchanges for enterprises the user doesn't manage 2014-04-24 15:51:39 +10:00
Rohan Mitchell
32ffd05ba0 Order cycle can have the same enterprise participating as supplier, coordinator and distributor 2014-04-02 11:54:28 +11:00
Rohan Mitchell
f184f0c246 Fix inappropriate intimacy: Extract exchange-specific queries from OrderCycle back into exchange 2014-03-26 11:43:32 +11:00
Rohan Mitchell
ac92d0919a Add incoming boolean field to Exchange, determine exchange direction from this field rather than sender/receiver roles 2014-03-26 11:19:35 +11:00
Rohan Mitchell
98776caa51 Rename Exchange.any_variant to with_any_variant for clarity 2014-03-14 11:18:59 +11:00
Rohan Mitchell
affb2a5743 Fix bug: Whole order fees being charged once per variant. Exchange.any_variant was returning duplicate rows. 2014-03-14 11:18:59 +11:00
Rohan Mitchell
9dec40703a Find exchanges with any of a number of variants 2014-02-26 13:49:10 +11:00
Rohan Mitchell
08009d4020 Extract application of enterprise fees as adjustments into its own class 2014-02-21 15:48:58 +11:00
Rohan Mitchell
52b6c33aaa When converting an exchange to a hash for comparison, ensure id lists are sorted - ordering issues should not indicate inequality 2013-11-15 12:09:26 +11:00
Rohan Mitchell
68fe20c37a Add scope: Exchange.with_product 2013-09-23 17:39:16 +10:00