Commit Graph

100 Commits

Author SHA1 Message Date
Oliver 5ba75c868d
total_price for orders (#4447)
* Adds unit test for counting queries on PurchaseOrderList API endpoint

- We will work to make this queryset more efficient

* PEP fixes

* Add 'total_price' fields to SalesOrder and PurchaseOrder models

* PurchaseOrder list API now has constant query count

* Data migration for updating existing PurchaseOrder and SalesOrder instances

- Calculate total_price for any existing order
- Will fail if exchange rates are not available

* Add total_price_currency to API serializers

* Render total_price in SalesOrder table

* Add ability to filter both lists by total_price field

* Update total_price whenever an order is updated

* Update total price whenever a lineitem is saved or deleted

* Add query-counting unit test for SalesOrder list API

* Calling refresh_from_db inside a save() method is *not* a good idea
2023-03-05 22:22:18 +11:00
Oliver 50eb81f495
Do not auto-fill target_date for line items (#4275)
* Improve help_text for target_date field on lineitem model(s)

* Don't auto-fill target_date for purchase order line item(s)

* Refactor function to create new sales order line item

* Add migration file

* JS linting
2023-01-29 14:24:38 +11:00
Oliver 06266b48af
Part pricing cache (#3710)
* Create new model for storing Part pricing data

Currently this model does not "do" anything but will be used for caching pre-calculated pricing information

* Define function for accessing pricing information for a specific part

* Adds admin site support for new PartPricing model

* Specify role for PartPricing model

* Allow blank values for PartPricing model fields

* Add some TODO entries

* Update migration files to sync with latest master

* Expose API endpoint for viewing part pricing information

* Update migration file

* Improvements:

- Updated model with new fields
- Code for calculating BOM price
- Code for calculating internal price
- Code for calculating supplier price
- Updated unit testing

* Fix (and test) for API serializer

* Including min/max pricing data in part serializer

* Bump API version

* Add pricing overview information in part table

- Adds helper function for formatting currency data
- No longer pre-render "price strings" on the server

* Overhaul of BOM API

- Pricing data no longer calculated "on the fly"
- Remove expensive annotation operations
- Display cached price range information in BOM table

* Filter BOM items by "has pricing"

* Part API endpoint can be filtered by price range

* Updpated API version notes

* Improvements for price caching calculations

- Handle null price values
- Handle case where conversion rates are missing
- Allow manual update via API

* Button to manually refresh pricing

* Improve rendering of price-break table

* Update supplier part pricing table

* Updated js functions

* Adds background task to update assembly pricing whenever a part price cache is changed

* Updates for task offloading

* HTML tweaks

* Implement calculation of historical purchase cost

- take supplier part pack size into account
- improve unit tests

* Improvements for pricing tab rendering

* Refactor of pricing page

- Move javascript functions out into separate files
- Change price-break tables to use bar graphs
- Display part pricing history table and chart
- Remove server-side rendering for price history data
- Fix rendering of supplier pricing table
- Adds extra filtering options to the SupplierPriceBreak API endpoint

* Refactor BOM pricing chart / table

- Display as bar chart with min/max pricing
- Display simplified BOM table

* Update page anchors

* Improvements for BOM pricing table display

* Refactoring sales data tables

- Add extra data and filter options to sales order API endpoints
- Display sales order history table and chart

* Add extra fields to PartPricing model:

- sale_price_min
- sale_price_max
- sale_history_min
- sale_history_max

* Calculate and cache sale price data

* Update part pricing when PurchaseOrder is completed

* Update part pricing when sales order is completed

* Signals for updating part pricing cache

- Whenever an internal price break is created / edited / deleted
- Whenever a sale price break is created / edited / deleted

* Also trigger part pricing update when BomItem is created  / edited / deleted

* Update part pricing whenever a supplier price break is updated

* Remove has_complete_bom_pricing method

* Export min/max pricing data in BOM file

* Fix pricing data in BOM export

- Calculate total line cost
- Use more than two digits

* Add pricing information to part export

Also some improvements to part exporting

* Allow download of part category table

* Allow export of stock location data to file

* Improved exporting of StockItem data

* Add cached variant pricing data

- New fields in part pricing model
- Display variant pricing overview in "pricing" tab

* Remove outdated "PART_SHOW_PRICE_HISTORY" setting

* Adds scheduled background task to periodically update part pricing

* Internal prices can optionally override other pricing

* Update js file checks

* Update price breaks to use 6 decimal places

* Fix for InvenTreeMoneySerializer class

- Allow 6 decimal places through the API

* Update for supplier price break table

* javascript linting fix

* Further js fixes

* Unit test updates

* Improve rendering of currency in templates

- Do not artificially limit to 2 decimal places

* Unit test fixes

* Add pricing information to part "details" tab

* Tweak for money formatting

* Enable sort-by-price in BOM table

* More unit test tweaks

* Update BOM exporting

* Fixes for background worker process

- To determine if worker is running, look for *any* successful task, not just heartbeat
- Heartbeat rate increased to 5 minute intervals
- Small adjustments to django_q settings

Ref: https://github.com/inventree/InvenTree/issues/3921
(cherry picked from commit cb26003b92)

* Force background processing of heartbeat task when server is started

- Removes the ~5 minute window in which the server "thinks" that the worker is not actually running

* Adjust strategy for preventing recursion

- Rather than looking for duplicate parts, simply increment a counter
- Add a "scheduled_for_update" flag to prevent multiple updates being scheduled
- Consolidate migration files

* Adds helper function for rendering a range of prices

* Include variant cost in calculations

* Fixes for "has_pricing" API filters

* Ensure part pricing status flags are reset when the server restarts

* Bug fix for BOM API filter

* Include BOM quantity in BOM pricing chart

* Small tweaks to pricing tab

* Prevent caching when looking up settings in background worker

- Caching across mnultiple processes causes issues
- Need to move to something like redis to solve this
- Ref: https://github.com/inventree/InvenTree/issues/3921

* Fixes for /part/pricing/ detail API endpoint

* Update pricing tab

- Consistent naming

* Unit test fixes

* Prevent pricing updates when loading test fixtures

* Fix for Part.pricing

* Updates for "check_missing_pricing"

* Change to pie chart for BOM pricing

* Unit test fix

* Updates

- Sort BOM pie chart correctly
- Simplify PartPricing.is_valid
- Pass "limit" through to check_missing_pricing
- Improved logic for update scheduling

* Add option for changing how many decimals to use when displaying pricing data

* remove old unused setting

* Consolidate settings tabs for pricing and currencies

* Fix CI after changing settings page

* Fix rendering for "Supplier Pricing"

- Take unit pricing / pack size into account

* Extra filtering / ordering options for the SupplierPriceBreak API endpoint

* Fix for purchase price history graph

- Use unit pricing (take pack size into account)

* JS fixes
2022-11-14 15:58:22 +11:00
Oliver 57a20be5c3
Remove client-side length validation in form inputs (#3911)
* Remove client-side length validation in form inputs

- Let the server throw an error (so the user sees it)

* Update instances of models.URLField to InvenTreeURLField
2022-11-10 12:51:15 +11:00
Oliver 2afd39356a
Int migration fix (#3323)
* Add fix for stock migration

- Ensure the serial number is not too large when performing migration
- Add unit test for data migration

(cherry picked from commit 661fbf0e3d)

* Add similar fixes for PO and SO migrations

(cherry picked from commit bde23c130c)

* And similar fix for BuildOrder reference field

(cherry picked from commit ca0f4e0031)

* Update unit tests for API plugin mixin class

- API at previous target URL has changed
- Simplier to use the github API as a test case

(cherry picked from commit dfe3172b7d)

* Revert test database name

(cherry picked from commit 53333c29c3)

* Override default URL behaviour for unit test

(cherry picked from commit 2c12a69529)
2022-07-15 11:57:27 +10:00
Oliver 648faf4ed2
Reference fields (#3267)
* Adds a configurable 'reference pattern' to the IndexingReferenceMixin class

* Expand tests for reference_pattern validator:

- Prevent inclusion of illegal characters
- Prevent multiple groups of hash (#) characters
- Add unit tests

* Validator now checks for valid strftime formatter

* Adds build order reference pattern

* Adds function for creating a valid regex from the supplied pattern

- More unit tests
- Use it to validate BuildOrder reference field

* Refactoring the whole thing again - try using python string.format

* remove datetime-matcher from requirements.txt

* Add some more formatting helper functions

- Construct a regular expression from a format string
- Extract named values from a string, based on a format string

* Fix validator for build order reference field

* Adding unit tests for the new format string functionality

* Adds validation for reference fields

* Require the 'ref' format key as part of a valid reference pattern

* Extend format extraction to allow specification of integer groups

* Remove unused import

* Fix requirements

* Add method for generating the 'next' reference field for a model

* Fix function for generating next BuildOrder reference value

- A function is required as class methods cannot be used
- Simply wraps the existing class method

* Remove BUILDORDER_REFERENCE_REGEX setting

* Add unit test for build order reference field validation

* Adds unit testing for extracting integer values from a reference field

* Fix bugs from previous commit

* Add unit test for generation of default build order reference

* Add data migration for BuildOrder model

- Update reference field with old prefix
- Construct new pattern based on old prefix

* Adds unit test for data migration

- Check that the BuildOrder reference field is updated as expected

* Remove 'BUILDORDER_REFERENCE_PREFIX' setting

* Adds new setting for SalesOrder reference pattern

* Update method by which next reference value is generated

* Improved error handling in api_tester code

* Improve automated generation of order reference fields

- Handle potential errors
- Return previous reference if something goes wrong

* SalesOrder reference has now been updated also

- New reference pattern setting
- Updated default and validator for reference field
- Updated serializer and API
- Added unit tests

* Migrate the "PurchaseOrder" reference field to the new system

* Data migration for SalesOrder and PurchaseOrder reference fields

* Remove PURCHASEORDER_REFERENCE_PREFIX

* Remove references to SALESORDER_REFERENCE_PREFIX

* Re-add maximum value validation

* Bug fixes

* Improve algorithm for generating new reference

- Handle case where most recent reference does not conform to the reference pattern

* Fixes for 'order' unit tests

* Unit test fixes for order app

* More unit test fixes

* More unit test fixing

* Revert behaviour for "extract_int" clipping function

* Unit test value fix

* Prevent build order notification if we are importing records
2022-07-11 00:01:46 +10:00
Oliver 8f92fddd2d
Virtual part fix (#3265)
* Add 'virtual': False requirement to sales order items

* Adds "virtual" filter for part table

* Adds extra validation to the SalesOrderLineItem model

* Prevent creation of stock items for virtual parts

- Add validation check to clean() method of StockItem model
- Improve validation message for StockItemSerializer class

* Hide "new stock item" button for virtual parts

* Hide more buttons for 'virtual' parts
2022-06-28 13:39:27 +10:00
Oliver 63b4ff3eb6
Remove reliance on django-markdownx (#3231)
* Remove reliance on django-markdownx

- We are now rendering notes on the client side using easymde
- No longer any need to utilize the markdownx integration
- Adds character limit for notes fields`

* Adjust legacy migrations - remove references to markdownx

* Fix bug for company notes field
2022-06-20 22:20:04 +10:00
Matthias Mair f38386b13c
Add more checks to pre-commit (#3132)
* Add bandit to pre-commit checks

* fix catchall exceptions

* remove unused definitons

* remove unuseed ariables

* Add docstring

* fix B006, B008 errors

* fix B007 error

* ignore B009

* Add checks for formatting and naming
2022-06-06 08:56:52 +10:00
Oliver 2378073c61
SalesOrderShipment improvements (#3058)
* Adds two new fields to SalesOrderShipment model:

- Invoice number (char)
- Link (URL)

* Bump API version

* Update API / serializer / JS

- Allow entry of new fields at time of shipping

* PEP fixes

* Actually fix the PEP issues

* Unit testing: check some more fields
2022-05-25 11:00:19 +10:00
Matthias Mair 93b6934127 fix trailing 2022-05-20 13:20:55 +02:00
Oliver Walters 3373bb19f1 Remove unique_together requirement on SalesOrderAllocation model 2022-05-17 00:36:30 +10:00
Oliver Walters 21ebf562fd Adds metadata fields to PurchaseOrder and SalesOrder models 2022-05-16 21:21:32 +10:00
Matthias 1a3d482e42
Merge branch 'master' of https://github.com/inventree/InvenTree into matmair/issue2788 2022-05-04 12:33:21 +02:00
Matthias 0900fe82dc
ignore coverage on reverse conversion 2022-05-03 20:11:41 +02:00
Matthias 8f3899ffe6
move migrations 2022-05-02 22:10:50 +02:00
Matthias Mair 0c338cb2ae
Merge branch 'inventree:master' into matmair/issue2788 2022-05-02 21:50:57 +02:00
Matthias d05472b30c
upgrade to pyhton 3.9 syntax
using pyupgrade
2022-05-01 21:53:12 +02:00
Matthias 58901a8cf6
fix migrations 2022-05-01 00:15:02 +02:00
Matthias 6319beb14e
only print if models found 2022-04-28 00:42:28 +02:00
Matthias aa30e62ad8
[BUG] Deleting a Customer Breaks Associated Sales Orders
Add special protected deleted company
Fixes #2788
2022-03-30 01:29:36 +02:00
Matthias 03328088a2
add missing migrations 2022-03-29 00:03:19 +02:00
Matthias 1387709281
remove coverage from reverse action 2022-03-29 00:01:34 +02:00
Matthias 760dafcdb2
use sub-context for migrations 2022-03-27 23:18:20 +02:00
Matthias 7a32f8edfc
add migration to convert items 2022-03-27 04:18:19 +02:00
Matthias 085a7c7d11
unify migrations 2022-03-27 03:16:49 +02:00
Matthias 934754ddff
migration for PO additional item 2022-03-11 01:18:50 +01:00
Matthias 7a54cb4cb8
merge migrations 2022-03-06 23:38:59 +01:00
Matthias acec4fa5d5
remove titile 2022-03-06 18:43:27 +01:00
Matthias b81d2b8410
cut back on modifications 2022-03-05 23:10:20 +01:00
Matthias 157f0e72a7
[FR] Add delivery cost (excluding unit cost that already exists) in PO
Fixes #2694
2022-03-04 01:06:39 +01:00
Oliver 7c82857cc7 Remove unique_together requirement for purchaseorderlineitem
- Allow a single purchase order to specify duplicate lines (e.g. split shipments / order scheduling)
2022-02-28 15:27:56 +11:00
Oliver 557aa44904 Adds "target_date" field to PurchaseOrderLineItem and SalesOrderLineItem models
- Allows different target dates to be specified for different line items
- If not set (null) then the base "target_date" parameter for the parent order is used
2022-02-28 14:26:01 +11:00
Matthias 22bc0b3d90
ignore exception ref 2022-02-13 05:21:43 +01:00
Matthias a4c6d0e6c5
fix migration coverage for orders 2022-02-13 04:49:08 +01:00
Oliver 732034d9e5 Merge conflicting migrations 2021-12-03 00:43:10 +11:00
Oliver 93173ef1ee Merge remote-tracking branch 'inventree/master' into partial-shipment
# Conflicts:
#	InvenTree/order/serializers.py
2021-12-02 23:58:52 +11:00
Matthias 3b5e9d3283
use BigIntegerField for a hugher range ;-) 2021-12-01 22:39:53 +01:00
Oliver 3f9b280e17 Allow shipment numbers to be non-unique for different sales orders
- must be unique for a given sales order
2021-11-30 00:42:30 +11:00
Oliver da6c723184 Merge branch 'master' into partial-shipment
# Conflicts:
#	InvenTree/order/serializers.py
2021-11-29 22:59:36 +11:00
Oliver e9ed7bffc9 adds a "link" field to the InvenTree attachment model
- Allows attachments to also serve as links to external files
2021-11-28 12:53:01 +11:00
Oliver 8aed68a1d1 Adds "shipped" field to SalesOrderLineItem
- This is an internal tracker of quantity of items shipped
- Updated by the database logic (not by the user)
- Keeps track of how many items have been shipped against a lineitem
- Does not matter if the actual stock items are later removed from the database
2021-11-26 23:20:27 +11:00
Oliver c90c224ed2 Update "reference" field for shipment model
- Must be unique
- Auto-incrementing default value
- Updated migrations
2021-10-26 22:13:55 +11:00
Oliver e7c25126a4 Construct table of "shipments" 2021-10-26 00:17:17 +11:00
Oliver e9e4d13541 Add list and detail API endpoints for SalesOrderShipment
- Filter by order
- Filter by "shipped" status
- SalesOrderShipment serializer includes information on items allocated to that shipment
2021-10-25 23:34:58 +11:00
Oliver d31f2be955 Make "shipment" field required for a SalesOrderAllocation
- Deleting a "Shipment" will delete any "Allocation" objects which reference it
- Improve existing data migration for new shipment model
2021-10-25 22:47:41 +11:00
Oliver ce5b47460a Added data migration for existing SalesOrder instances
- If a SalesOrder is "PENDING" or there are allocations available, a shipment is created
2021-10-25 22:35:27 +11:00
Oliver 2f7e0974b7 Add 'shipment' foreign-key field to SalesOrderAllocation model 2021-10-25 17:42:56 +11:00
Oliver f00ec26efd Create SalesOrderShipment model 2021-10-25 13:09:06 +11:00
Oliver 2c9bbb051a Add some unit tests
- Saving a model automatically updates the reference_int field
- Data migrations are correctly applied
2021-10-14 19:12:23 +11:00