Commit Graph

17514 Commits

Author SHA1 Message Date
Gaetan Craig-Riou
2a0caca570 Refactor EnterpriseFee.clear_all_adjustments
Renamed to clear_order_adjustments, it doesn't clear line item
adjustment
2025-04-01 13:46:34 +11:00
Trésor Bireke
5e7f0f8a1a Merge branch 'master' into tb-rescue-not-found-error-for-enterprise 2025-04-01 01:10:17 +02:00
Gaetan Craig-Riou
0537a56b47 Merge pull request #13239 from cyrillefr/FixRailsRubocopIssueInverseOfInPayments
Fixes rubocop offense inverse_of on payment model
2025-04-01 09:59:01 +11:00
David Cook
d8eab7875f Merge pull request #13235 from mkllnk/stock-aggregation
[API change] Remove unused ProductStock concern
2025-04-01 09:45:24 +11:00
Tresor11
507705a4eb Update method name to require
This commit updates the method name to be called required_enterprise
since we only expect it to raise an error when the enterprise is not found.
2025-03-31 22:28:38 +03:00
cyrillefr
09a6da0c57 Fixes rubocop offense inverse_of on payment model
- some clean up unused method too
2025-03-31 17:10:43 +02:00
David Cook
e02ef08b06 Consolidate translations for hidden field
The string '< Hidden >' was agreed on as a good default, so we will use the hidden_field key.
I also moved the definition in en.yml up to the more general area at the start of admin.reports section (before it was hidden between report-specific keys.
2025-03-31 16:24:07 +11:00
David Cook
729dc9d658 Move mask logic to separate module
And cross-reference similar files so we don't miss it next time\!
2025-03-31 16:16:27 +11:00
David Cook
47b6888fe6 Display customer emails & phone numbers to suppliers
when permitted.

The MaskDataService is used by the report framework, so this should affect all reports. It would be nice to test all reports, but I figured it wasn't worth it (already we only test one report for masking names).
2025-03-31 16:16:27 +11:00
David Cook
98ab910fb4 Refactor 2025-03-31 16:16:27 +11:00
David Cook
4402854a2a AddEnableProducersToEditOrdersToEnterprises
With system spec for setting the preference. The enterprise edit page seems under-tested..
2025-03-31 16:16:27 +11:00
David Cook
02db30202b Use rails form helper methods
This helps ensure the labels are attached to the radio buttons, so you can click on the words to select the option.
2025-03-31 16:16:27 +11:00
Gaetan Craig-Riou
421b753e0a Merge pull request #13231 from chitty/more-rubocop-style-corrections
Correct rubocop Style/* offenses
2025-03-31 10:49:20 +11:00
David Cook
91a9a3cd77 Merge pull request #13226 from cyrillefr/FixRailsInversOfPartI
Fixes some Rails InverseOf offenses
2025-03-31 09:48:51 +11:00
Filipe
37ef5d5b02 Merge pull request #13214 from chahmedejaz/task/13179-expand-notes-edit-order
Fix expand notes field when editing order
2025-03-28 16:43:29 +00:00
Maikel Linke
b3ddfde1c3 Remove empty ProductStock concern 2025-03-28 14:49:47 +11:00
Maikel Linke
ca9f32ceae [API change] Remove unused Product#on_hand 2025-03-28 14:48:40 +11:00
Maikel Linke
d55d4dd8ed Remove unused Product#on_demand 2025-03-28 14:00:40 +11:00
Maikel Linke
406018e7eb Simplify resetting variants
I was hoping to reduce the query count but it stayed the same. In fact,
I'm expecting the query count to be higher with this version. The
DfcCatalogImporter queries all variants and links at once while the OC
job is not pre-loading the variants at the moment. We can optimise the
job though.

If we kept the old version and there were multiple catalogs per variant
then we would call the importer with the reset multiple times. The job
is iterating through each link only once though. So depending on the
ratio of catalogs to variants, I'm not sure which version would be more
efficient.

No version is properly dealing with the edge-case of multiple catalogs
per variant anyway. Imagine there are two catalogs with different stock
levels. Which one do we choose? Or do we add up?
And if the variant disappears from one catalog we still want to sell it
through the other. But depending on the order of processing, we may
reset the variant if it's missing in the last catalog. But let's worry
about that when it actually happens. Maybe it will be better to restrict
variants to one catalog.
2025-03-27 15:12:45 +11:00
Maikel Linke
1a5b6bbc8f Reset stock for unavailable products on OC open 2025-03-27 14:40:50 +11:00
Maikel Linke
9e3ff412f9 Simplify controller 2025-03-27 13:36:48 +11:00
Maikel Linke
48e3b5b05e Move more reset variant code for re-use 2025-03-27 13:36:48 +11:00
Maikel Linke
c43bd0c24b Move variant reset code to shared service 2025-03-27 13:36:48 +11:00
Maikel Linke
e35a29cc29 Remember local stock of backordered products
When retail variants are mapped to wholesale variants, we usually have a
some leftover stock at the end of an order cycle. For example, we
backordered a slab of 12 cans of tomatoes but our customers bought only
9 of those. Then we have 3 left for the next order cycle.

Even when the product is not available for backorder with the supplier,
we still want to sell off our leftover stock, the three cans of tomatoes
in our example.

And it might be that the product will come back in the future.
2025-03-27 13:36:48 +11:00
Maikel Linke
2a81d26ef1 Simplify complex method 2025-03-27 13:36:48 +11:00
Maikel Linke
c60718feea List absent products in import preview 2025-03-27 13:36:48 +11:00
Maikel
a2e68e1f3c Explain stock reset further
Co-authored-by: David Cook <david@redcliffs.net>
2025-03-27 13:36:48 +11:00
Maikel Linke
11be8360e3 Prettier and localised display of import stats 2025-03-27 13:36:47 +11:00
Maikel Linke
a6c08fe2ad Reset stock for absent products in DFC catalog 2025-03-27 13:36:47 +11:00
cyrillefr
da26f5833f Requested changes 2025-03-26 19:44:08 +01:00
Carlos Chitty
ecb303fef5 Correct Style/SlicingWithRange rubocop offenses 2025-03-26 11:16:24 -04:00
Carlos Chitty
7f734cf2f8 Autocorrect Style/PreferredHashMethods rubocop offense 2025-03-26 11:16:24 -04:00
cyrillefr
1d24674386 Fixes some Rails InverseOf offenses 2025-03-25 18:46:00 +01:00
Filipe
9fa42cae47 Merge pull request #13143 from mkllnk/admin-in-same-tab
Open admin dashboard in same tab by default
2025-03-25 17:10:51 +00:00
Filipe
2a3927caad Merge pull request #13176 from drummer83/reply-to-email-address_part2
Add a 'reply to' email address to some more emails
2025-03-25 17:00:02 +00:00
David Cook
ff7c23c8f9 Rename OrderCycleOpenedJob
This name better reflects what it's doing.

As this job is scheduled automatically by Sidekiq, I think there shouldn't be any jobs with the old name in redis. So I didn't bother keeping a placholder for the old name.

And Clean up unused include
2025-03-25 10:38:34 +11:00
David Cook
6738101ebd Raise error if record not found, and don't retry too many times
After 10 minutes, I'd consider that it failed to open the order cycle. Who would want their products to sync, or get a notification at a random time during the order cycle?

Best viewed with whitespace ignored.
2025-03-25 10:38:34 +11:00
David Cook
428bcc8988 Only update one timestamp
> The order cycle itself is not changed. It's just that time passed and it's now considered open/closed.
2025-03-25 10:38:34 +11:00
David Cook
317cbd4b32 Use existing method
Co-authored-by: Maikel <maikel@email.org.au>
2025-03-25 10:38:34 +11:00
David Cook
23dc0f7298 Change concurrency check to be based on order_cycle.opened_at
Being based on the DB value should be more robust.

This prevents an order cycle from being "opened" when it's already open. But note that the order cycle can become "unopened" (see OrderCycle#reset_opened_at).

Nice to see the database query count drop, but I must confess I don't know why!
2025-03-25 10:38:34 +11:00
David Cook
eff8fdb28b Move to new job
And re-organise specs.

TOFIX: concurrency test now fails. why?

Use correct testing methods
2025-03-25 10:38:34 +11:00
David Cook
a8490a9b11 Record the exact event time for the webhook
There might be a delay before it gets sent, so it's better to record the time the event occurred at.
It would have been simpler to just add it to the data hash, but I felt it was an important detail for an event and should be at the top level along with event name.

In the case of order cycle opening, this is the same as opened_at. I've included this in the payload for clarity too.
2025-03-25 10:38:30 +11:00
David Cook
05e1a5b39d Mark each order cycle as opened once pre-conditions have been processed 2025-03-25 10:27:47 +11:00
David Cook
5b21c81ca5 Synchronise remote products when order cycle opens
I considered pre-loading the variant and product with includes, But can't do that here because it's a polymorphic relationship.
2025-03-25 10:27:47 +11:00
Gaetan Craig-Riou
bdced0b9e2 Merge pull request #13207 from mkllnk/dfc-missing-product
Gracefully handle product missing from catalog
2025-03-24 10:12:48 +11:00
Ahmed Ejaz
806965b2cd add textarea field plus the preformatted tag to display paragraph formatting in the notes 2025-03-24 00:43:07 +05:00
Tresor11
5b3bae85ca Rescue Not Found Error for Enterprise for admin
Currently when an admin tries to edit an no-existing enterprise, a
NoMethodError is raised.

This commit adds a set_enterprise setter method to the
enterprises controller that sets the @enterprise instance variable to
have the same value as the enterprise object defined in the the edit
method; this method also rescues the NotFound error  in case
the enterprise is not found and redirects the user to the enterprises
index page with a error message.
2025-03-22 00:35:27 +03:00
cyrillefr
fa4fc7c3c5 Fixes Rails TimeZone rubocop offenses 2025-03-21 13:13:52 +01:00
Maikel Linke
dc749092b4 Simplify authorisation required email 2025-03-20 09:58:46 +11:00
Gaetan Craig-Riou
11e08dcc26 Revert "Update line items enterprise fee instead of deleting and recreating " 2025-03-19 09:40:02 +11:00