Commit Graph

50 Commits

Author SHA1 Message Date
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
Rohan Mitchell
f1fa90d7c3 Clone order cycles 2013-08-22 16:53:11 +10:00
Rohan Mitchell
7a75898b2b Find exchanges going to/from any number of enterprises 2013-08-19 10:41:14 +10:00
Rohan Mitchell
dfd1a89975 Test whether exchanges are incoming 2013-08-19 10:41:14 +10:00
Rohan Mitchell
9563aad9fa Find exchanges with a particular variant 2013-08-19 10:41:14 +10:00
Rohan Mitchell
552cecb2e0 Find incoming and outgoing exchanges 2013-08-16 10:22:29 +10:00
Rohan Mitchell
ba19db3ccf Add or update exchange variants when creating or updating order cycles 2013-01-09 10:06:51 +11:00
Rohan Mitchell
cfa96c7615 Each order cycle may not have duplicate exchanges between the same enterprises 2012-11-30 16:37:29 +11:00
Rohan Mitchell
d5310452b6 Admin list order cycles 2012-11-27 10:13:12 +11:00
Rohan Mitchell
6b97872a25 Create OrderCycles, Exchanges, ExchangeFees and ExchangeVariants 2012-11-26 11:03:44 +11:00