ERP beyond your fridge - Grocy is a web-based self-hosted groceries & household management solution for your home
MIT License
Bot releases are hidden (Show)
0
price weren't ignoredbattery_charge_cycles
Published by berrnd 8 months ago
💡 PHP 8.3 is from now on (additionally to PHP 8.2) supported.
⚠️ PHP 8.1 is no longer supported.
1
instead of the actual amount opened1
instead of the whole stock entryGET /objects/{entity}
and GET /objects/{entity}/{objectId}
now also return Userfields for the entity stock
Published by berrnd about 1 year ago
Published by berrnd about 1 year ago
Published by berrnd about 1 year ago
💡 PHP 8.2 is from now on (additionally to PHP 8.1) supported.
MEAL_PLAN_FIRST_DAY_OF_WEEK
and CALENDAR_FIRST_DAY_OF_WEEK
were set to different values/stock/products/{productId}
Published by berrnd about 1 year ago
⚠️ PHP 8.1 (with SQLite 3.34.0+) is from now on the only supported runtime version.
❗ The major version bump is due to breaking API changes, please see below if you use the API.
Recommendation: Benchmark tests showed that e.g. unit conversion handling is up to 5 times faster when using a more recent (3.39.4+) SQLite version.
1
0
price are ignoredFEATURE_FLAG_RECIPES_MEALPLAN
(in config.php
) to only disable the meal plan if not needed (thanks @webysther)config.php
setting MEAL_PLAN_FIRST_DAY_OF_WEEK
can now be set to -1
to dynamically start the meal plan week on today
stock
entity and using the "Never overdue" shortcut checkbox for the due date on purchase, this Userfield would also be set to the corresponding "never overdue date"config.php
setting ENERGY_UNIT
to customize the label to display energy values (was fixed kcal
before and defaults to that, so no changed behavior when not configured)All permissions
permission)qu_factor_purchase_to_stock
was removed (existing factors were migrated to normal product specific QU conversions, see above)/stock/products/{productId}
:
qu_conversion_factor_purchase_to_stock
for convenience (contains the conversion factor of the corresponding QU conversion from the product's qu_id_purchase
to qu_id_stock
)qu_conversion_factor_price_to_stock
for convenience (contains the conversion factor of the corresponding QU conversion from the product's qu_id_price
to qu_id_stock
)default_quantity_unit_consume
(contains the quantity unit object of the product's "Default quantity unit consume")/objects/{entity}
(only listing, no edit)
quantity_unit_conversions_resolved
(returns all final/resolved conversion factors per product and any directly or indirectly related quantity units)recipes_pos_resolved
(returns stock fulfilment information for all recipe ingredients)/batteries
now also returns the corresponding battery object (as field/property battery
)Published by berrnd almost 2 years ago
0
, unit conversion (if any) failed when adding the corresponding product to stockNever show on stock overview
enablednull
Userfields (so when the field for that object was not set before / on the initial object creation)LABEL_PRINTER_RUN_SERVER
= false
), the setting LABEL_PRINTER_HOOK_JSON
was ignored (the WebHook data was always sent as form data)/stock/volatile
missing_products
now also contains the product
object/recipes/{recipeId}/consume
: Fixed (again) that consuming partially fulfilled recipes was possible, although an error was already returned in that case (and potentially some of the in stock ingredients were consumed in fact)Published by berrnd over 2 years ago
/stock/products/{productId}
: New field/property default_consume_location
(contains the products default consume location object)/stock/products/{productId}/add
: Fixed that the request body parameter transaction_type
was ignored / always set to purchase
/stock/products/by-barcode/{barcode}/open
didn't handle stock entries provided by a grocycode (thanks @jtommi)<=
) and greater or equal (>=
) filter comparisons didn't work (optional query[]
request query parameter on most endpoints)Published by berrnd over 2 years ago
stock
FEATURE_FLAG_STOCK_LOCATION_TRACKING
was disabledTreat opened as out of stock
set and when having at least one opened stock entryDaily
period type has been changed to schedule the chore at the same time (based on the start date) each n
days
n
days after the last execution before, which is also possible by using the Hourly
period type and a corresponding period interval; all existing Daily
schedules will be converted to that on migration0
(which makes absolutely no sense in reality)equipment
and use the type File
GET /stock/locations/{locationId}/entries
to get all stock entries of a given location (similar to the already existing endpoint GET /stock/products/{productId}/entries
)/recipes/{recipeId}/consume
: Fixed that consuming partially fulfilled recipes was possible, although an error was already returned in that case (and potentially some of the in stock ingredients were consumed in fact)/stock/products/{productId}
:
current_price
which returns the current price of the corresponding product, based on the stock entry to use next (defined by the default consume rule "Opened first, then first due first, then first in first out") or on the last price if the product is currently not in stockoldest_price
is deprecated and will be removed in a future version (this had no real sense, currently returns the same as current_price
)Published by berrnd over 2 years ago
config.php
option FEATURE_SETTING_STOCK_COUNT_OPENED_PRODUCTS_AGAINST_MINIMUM_STOCK_AMOUNT
was removed and is now a new product option Treat opened as out of stock
, means, if opened stock entries will be counted as missing for calculating if a product is below its minimum stock amount, can now be configured per product
Yearly
period type has been changed to be schedule the chore on the same day each year
Daily
period type and a period interval of 365 days; all existing Yearly
schedules will be converted to that on migrationHourly
period type (to schedule chores every x
hours)Adaptive
period type (to schedule chores dynamically based on the past average execution frequency)Dynamic regular
, since it's the same as Daily
Dynamic regular
schedules will be converted to that on migration1970-01-01
was shown0
to disable that filter/highlighting[+/-]n[d/m/y]
for date fields to quickly input a date relative to today (adding (+) or subtracting (-) the number of days/months/years, see the full list of available shorthands here)LDAP_UID_ATTR
is now used to compare if the user already exists instead of the username entered on the login page (that prevents creating multiple users if you enter the username in different notations) (thanks @FloSet)ReverseProxyAuthMiddleware
), it's now also possible to pass the username in an environment variable instead of an HTTP header (new config.php
option REVERSE_PROXY_AUTH_USE_ENV
) (thanks @Forceu)config.php
option DISABLE_BROWSER_BARCODE_CAMERA_SCANNING
has been renamed to FEATURE_FLAG_DISABLE_BROWSER_BARCODE_CAMERA_SCANNING
/stock/shoppinglist/clear
has now a new optional request body parameter done_only
(to only remove done items from the given shopping list, defaults to false
)/chores/{choreId}/execute
has now a new optional request body parameter skipped
(to skip the next chore schedule, defaults to false
)/chores/{choreId}
has new response field/property average_execution_frequency_hours
(contains the average past execution frequency in hours or null
, when the chore was never executed before)/recipes/{recipeId}/printlabel
(to print recipe grocycodes on the configured label printer)Published by berrnd almost 3 years ago
/chores/{choreIdToKeep}/merge/{choreIdToRemove}
for merging chores/stock/products/{productId}/add
API endpoint: The (optional) request body parameter print_stock_label
was renamed to stock_label_type
Published by berrnd about 3 years ago
Consume
and Transfer
on the stock overview page were disabled when the amount in stock was < 1Published by berrnd about 3 years ago
v3.0.0
- so it was potentially possible via the API (or any third party app/tool which utilizes it) to create such a nesting which then made this upgrade to fail❗ The release before (v3.1.0) introduced that "numbers are now returned as numbers": This was reverted since it had unintended side effects (so all fields are technically strings now again, just like before - sorry for that)
missing_products
of the /stock/volatile
endpoint also contained inactive products/objects/{entity}
endpoint returned wrong Userfield values/stock/products/by-barcode/{barcode}/consume
and /stock/products/by-barcode/{barcode}/transfer
endpoints haven't used the stock entry given by a stock entry grocycode (thanks @lowlee for the initial work on this)Published by berrnd over 3 years ago
⚠️ The following PHP extensions are now additionally required:
json
,intl
,zlib
⚠️ PHP 8 is now supported and from now on the only tested runtime version (although currently PHP 7.2 should still work).
config.php
option GROCYCODE_TYPE
:
1D
(default) will produce a Code128
1D barcode (supported by the integrated camera barcode scanner)2D
will produce a DataMatrix
2D barcode (currently not supported by the integrated camera barcode scanner, but can be probably printed smaller)FEATURE_FLAG_LABEL_PRINTER
(defaults to disabled)LABEL_PRINTER*
config.php
optionsESC/POS
protocol and needs to be locally attached or network reachable to/by the machine hosting grocy (so the server)TPRINTER*
config.php
options to configure the printer connection and other optionsFEATURE_FLAG_THERMAL_PRINTER
(defaults to disabled)FEATURE_FLAG_STOCK_PRODUCT_FREEZING
is enabled)
1
for adding items quickerFEATURE_FLAG_STOCK_PRICE_TRACKING
is enabled)chores_log
1.0
LDAP*
config.php
options
❗ Numbers are now returned as numbers (so technically without quotes around them, were strings for nearly all endpoints before - should practically be no real difference)=> ❗❗❗ This has been reverted after this (v3.1.0) release since it had unintended side effects
/system/localization-strings
to get the localization strings (gettext JSON representation; in the by the user desired language)/recipes/{recipeId}/copy
to copy a recipeGET /chores
endpoint now also returns the next_execution_assigned_user
object per chore (like the endpoint GET /chores/{choreId}
already did for a single chore)GET /tasks
endpoint now also returns the assigned user and category object per taskGET /objects/{entity}
and GET /objects/{entity}/{objectId}
)due_type
= "Expiration date" were missing in due_products
of the /stock/volatile
endpointPUT/DELETE /objects/{entity}/{objectId}
produced an internal server error when the given object id was invalid (now returns 400 Bad Request
)Published by berrnd almost 4 years ago
⚠️⚠️ SQLite >= 3.9.0 (was released in late 2015) is required
Here is a workaround if you still run a SQLite version >= 3.8.3 < 3.9.0
PHP 7.2 with SQLite 3.8.3 was the formerly in README mentioned minimum runtime requirement, any future release will only be tested against a reasonable recent runtime (currently PHP 7.4 with SQLite 3.27.2) - supporting those (very) old runtime stuff is too time consuming...
ctype
) (thanks @Forceu)data/config.php
settings to prevent using invalid ones (thanks @Forceu)ReverseProxyAuthMiddleware
), additionally a valid API key can now also be used for authentication (if you don't want to protect the API endpoints via your reverse proxy, however)/system/time
to get the current server time (thanks @Forceu)0
FEATURE_FLAG_STOCK_LOCATION_TRACKING
was disabledPublished by berrnd almost 4 years ago
⚠️ The major version bump is due to breaking API changes, please see below if you use the API
⚠️⚠️ SQLite >= 3.9.0 (was released in late 2015) is required
Here is a workaround if you still run a SQLite version >= 3.8.3 < 3.9.0
PHP 7.2 with SQLite 3.8.3 was the formerly in README mentioned minimum runtime requirement, any future release will only be tested against a reasonable recent runtime (currently PHP 7.4 with SQLite 3.27.2) - supporting those (very) old runtime stuff is too time consuming...
❗ If some pages/tables doesn't load at all, please check that your
/data/config.php
settingCURRENCY
is a valid ISO 4217 currency code - that's most probably the issue then.
config.php
setting DEFAULT_PERMISSIONS
(defaults to ADMIN
, so no changed behavior when not configured)ADMIN
) during the update/migrationADMIN
permission
config.php
setting AUTH_CLASS
to change the used authentication providerconfig.php
settings LDAP_DOMAIN
, LDAP_ADDRESS
and LDAP_BASE_DN
AUTH_CLASS
to Grocy\Middleware\LdapAuthMiddleware
, users will be authenticated against your directory (and will also be created (in grocy), if not already present)config.php
setting REVERSE_PROXY_AUTH_HEADER
AUTH_CLASS
to Grocy\Middleware\ReverseProxyAuthMiddleware
and your reverse proxy sends a username in the HTTP header REMOTE_USER
(header name can be changed by the setting REVERSE_PROXY_AUTH_HEADER
), the user is automatically authenticated (and will also be created (in grocy), if not already present)Due date type = Best before date
(so all existing products) are "due" or "overdue" (they don't "expire" or are "expired")Due date type = Expiration date
(new option) can "expire" or are "expired"TAB
handling (thanks @kriddles)FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING
is disabled, products now get internally a due date of "never overdue" (aka 2999-12-31
) instead of today (thanks @kriddles)4
, for prices 2
)ENTER
(additionally to TAB
)C
) to the product picker workflow dialog-1
(like the option "Default due days") to set the product to "never due" on freezingFEATURE_SETTING_STOCK_COUNT_OPENED_PRODUCTS_AGAINST_MINIMUM_STOCK_AMOUNT
(option to configure if opened products should be considered for minimum stock amounts) was not handled correctly (thanks @teddybeermaniac)1
FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING
is set to false
, the purchase page validation failed (thanks @fipwmaqzufheoxq92ebc)FEATURE_FLAG_STOCK
is disabled, all product/stock related inputs and buttons are now hidden on the shopping list page (thanks @fipwmaqzufheoxq92ebc)shopping_list
), on the shopping list table those fields are rendered additionally to the product UserfieldsGROCY_FEATURE_FLAG_STOCK
is disabled
data
folder) is now configurable, making it possible to run multiple grocy instances from the same directory (with different config.php
files / different database, etc.) (thanks @fgrsnau)
GROCY_DATAPATH
(higher priority)GROCY_DATAPATH
(lower priority)Accept-Language
)config.php
option CULTURE
was renamed to DEFAULT_LOCALE
DEFAULT_LOCALE
from config.php
is usedconfig.php
settings (see the section Component configuration for Quagga2
) to tweak Quagga2 (this is the component used for device camera for barcode scanning) (thanks @andrelam)barcodes
with a comma separated barcode list, instead barcodes are now stored in a separate table/entity product_barcodes
(use the existing "Generic entity interactions" endpoints to access them)/objects/{entity}/search
was removed (use the existing /objects/{entity}
endpoint with the new filter capabilities mentioned below)ProductDetailsResponse
have slightly changed (endpoint /stock/products/{productId}
)/stock/volatile
expring_days
was renamed to due_soon_days
expiring_products
was renamed to due_products
expired_products
now only contains expired products (so them with Due date type = Expiration date
)overdue_products
contains only overdue products (so them with Due date type = Best before date
)/stock/entry/{entryId}
/stock/products/{productId}/add
/stock/products/{productId}/consume
/stock/products/{productId}/transfer
/stock/products/{productId}/inventory
/stock/products/{productId}/open
/stock/products/by-barcode/{barcode}/add
/stock/products/by-barcode/{barcode}/consume
/stock/products/by-barcode/{barcode}/transfer
/stock/products/by-barcode/{barcode}/inventory
/stock/products/by-barcode/{barcode}/open
/stock/transactions/{transactionId}
)<API-Url>|<API-Key>
/objects/{entity}
/stock/products/{productId}/entries
/stock/products/{productId}/locations
/recipes/fulfillment
/users
/tasks
/chores
/batteries
order
The field to order by (use the separator :
to specify the sort order - asc
or desc
, defaults to asc
when omitted)limit
The maximum number of objects to returnoffset
The number of objects to skipquery[]
An array of conditions, each of them is a string in the form of <field><condition><value>
, where
<field>
is a field name<condition>
is a comparison operator, one of
=
equal!=
not equal~
LIKE!~
not LIKE<
less>
greater<=
less or equal>=
greater or equal§
regular expression<value>
is the value to search for/stock/shoppinglist/add-overdue-products
to add all currently in-stock but overdue products to a shopping list (thanks @m-byte)/stock/shoppinglist/add-expired-products
to add all currently in-stock but expired products to a shopping list/users/{userId}/permissions
for the new user permissions feature mentioned above/user
to get the currently authenticated user/user/settings/{settingKey}
to delete a user setting/stock/products/{productIdToKeep}/merge/{productIdToRemove}
for the new product merging feature mentioned above/objects/{entity}
(only listing, no edit)
stock_log
(the stock journal)stock
(the "raw" stock entries)stock_current_locations
(info how much of each product is currently stored at which location)/stock/products/*
endpoints (thanks @fipwmaqzufheoxq92ebc)/stock/products/{productId}/locations
now also has an optional query parameter include_sub_products
to optionally also return locations of sub products of the given productallow_subproduct_substitution
to consume/open any child product when the given product is a parent product and currently not in stock
/stock/products/{productId}/consume
/stock/products/by-barcode/{barcode}/consume
/stock/products/{productId}/open
/stock/products/by-barcode/{barcode}/open
/objects/{entity}/{objectId}
always returned successfully, even when the given object not exists (now returns 404
when the object is not found) (thanks @fipwmaqzufheoxq92ebc)/stock/volatile
didn't include products which are due today (thanks @fipwmaqzufheoxq92ebc)/objects/{entity}
did not include Userfields for Userentities (so the effective endpoint /objects/userobjects
)/stock/consume
returned the response code 200
and an empty response body when stock_entry_id
was set (consuming a specific stock entry) but invalid (now returns the response code 400
) (thanks @fipwmaqzufheoxq92ebc)/user/settings/{settingKey}
didn't return the default setting if it was not configured for the current user (same behavior as the endpoint /user/settings
now)/calendar/ical
: Fixed that "Track date only"-chores were always set to happen at 12am (are treated as all-day events now)Published by berrnd over 4 years ago
Published by berrnd over 4 years ago
FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING
FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING
and FEATURE_FLAG_STOCK_PRODUCT_OPENED_TRACKING
/user/settings
to get all user settings of the currently logged in user (key/value pairs)/system/config
to get all config settings (config.php
) (key/value pairs)/stock/products/{productId}/locations
now also returns the current stock amount of the product in that loctation (new field/property amount
) (thanks @Forceu)/objects/{entity}
and /objects/{entity}/{objectId}
now also include/return userfields of the object(s) (new field/property userfields
per object, key/value pairs or null
, when the object has no userfields)config.php
setting FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_FIELD_NUMBER_PAD
which activates the number pad for best-before-date fields on (supported) mobile browsers (useful because of shorthands) (defaults to true
) (thanks @Mik-)config.php
setting FEATURE_FLAG_AUTO_TORCH_ON_WITH_CAMERA
to always enable the flash light automaticallyquagga2_numofworkers
(config.php
) to make the Quagga2 setting "numOfWorkers" adjustable (defaults to 4
)data/settingoverrides
files (thanks @dacto)update.sh
) to create the backup tar archive before writing to it (was a problem on Btrfs file systems) (thanks @shane-kerr)update.sh
file had wrong line endings (DOS instead of Unix)Published by berrnd over 4 years ago
Security fix (see #696)
Published by berrnd over 4 years ago
If you run grocy in a subdirectory, you need to set a new config.php
setting (BASE_PATH
, see config-dist.php
)
FEATURE_FLAG_STOCK_LOCATION_TRACKING
was set to false
false
, so no changed behavior when not configured) (thanks @Forceu)FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING
was set to false
false
, so no changed behavior when not configured) (thanks @kriddles)ENTER
and that the next input is automatically selected after selecting a recipe/productFEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING
is set to false
) (thanks @kriddles)/chores
now also includes the chore name (new field chore_name
) (thanks @DarienFord)