Bug 11897

Summary: Stock Rotation for Koha
Product: Koha Reporter: Martin Renvoize <martin.renvoize>
Component: CirculationAssignee: Martin Renvoize <martin.renvoize>
Status: CLOSED FIXED QA Contact: Tomás Cohen Arazi <tomascohen>
Severity: new feature    
Priority: P5 - low CC: alex, chris, fiona.borthwick, gmcharlt, jonathan.druart, jonathan.field, josef.moravec, katrin.fischer, kyle.m.hall, kyle, lisettepalouse+koha, liz, nick, oleonard, sally.healey, tomascohen
Version: master   
Hardware: All   
OS: All   
See Also: https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=12807
Change sponsored?: --- Patch complexity: Large patch
Documentation contact: Documentation submission:
Text to go in the release notes:
Sponsored by PTFS Europe and North West England Public Libraries This is a batch process to automate the rotation of stock. It includes a staff client page, under tools, to manage rotas (ordered lists of locations for items to rotate to with associated durations for the items stay) and assign them to items. Once at least one rota is configured, and your staff user has the permission to add a rota to an item, then an additional tab will appear on each biblio record page allowing the management of which rota, if any, individual items are assigned.
Version(s) released in:
Bug Depends on: 14187, 18137    
Bug Blocks: 22567, 24444, 35430, 20595, 21553, 21614, 21615, 21682, 22209, 22373, 22566, 22634, 22653, 23432    
Attachments: Technical Spec
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Koha::Objects for Stockrotation module.
Bug 11897: Add stockrotation cron script.
Bug 11897: Add Utils library for Stockrotation module
Bug 11897: REST API - add path defs, controller & tests
Bug 11897: Add JS to provide rota stage manipulation
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stock Rotation permissions to list
Bug 11897: Interface for rotas from Tools menu
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stock Rotation permissions to list
Bug 11897: Interface for rotas from Tools menu
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Draft Documentation (authored by Fiona Borthwick)
Documentation for Koha manual
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Koha::Objects for Stockrotation module.
Bug 11897: Add stockrotation cron script.
Bug 11897: Add Utils library for Stockrotation module
Bug 11897: REST API - add path defs, controller & tests
Bug 11897: Add JS to provide rota stage manipulation
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stock Rotation permissions to list
Bug 11897: Interface for rotas from Tools menu
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Bug 11897: Bugfixes, unit tests, feedback, documentation.
Bug 11897: Fix style of button links, & form wording.
Bug 11897: Add documentation for the cron script.
Use camel case for stockrotation modules.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Koha::Objects for Stockrotation module.
Bug 11897: Add stockrotation cron script.
Bug 11897: Add Utils library for Stockrotation module
Bug 11897: REST API - add path defs, controller & tests
Bug 11897: Add JS to provide rota stage manipulation
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stock Rotation permissions to list
Bug 11897: Interface for rotas from Tools menu
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Bug 11897: Bugfixes, unit tests, feedback, documentation.
Bug 11897: Fix style of button links, & form wording.
Bug 11897: Add documentation for the cron script.
Bug 11897: Use camel case in Koha namespace modules.
Bug 11897: Bugfix: Handle empty rotas.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Koha::Objects for Stockrotation module.
Bug 11897: Add stockrotation cron script.
Bug 11897: Add Utils library for Stockrotation module
Bug 11897: REST API - add path defs, controller & tests
Bug 11897: Add JS to provide rota stage manipulation
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stock Rotation permissions to list
Bug 11897: Interface for rotas from Tools menu
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Bug 11897: Bugfixes, unit tests, feedback, documentation.
Bug 11897: Fix style of button links, & form wording.
Bug 11897: Add documentation for the cron script.
Bug 11897: Use camel case in Koha namespace modules.
Bug 11897: Bugfix: Handle empty rotas.
Bug 11897: Follow up: Update userflags/permission id.
Bug 11897: Follow up: Use "btn-xs" instead of "btn-sm".
Bug 11897: Follow up: Check syspref before stockrotation access.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Koha::Objects for Stockrotation module.
Bug 11897: Add stockrotation cron script.
Bug 11897: Add Utils library for Stockrotation module
Bug 11897: REST API - add path defs, controller & tests
Bug 11897: Add JS to provide rota stage manipulation
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stock Rotation permissions to list
Bug 11897: Interface for rotas from Tools menu
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Bug 11897: Bugfixes, unit tests, feedback, documentation.
Bug 11897: Fix style of button links, & form wording.
Bug 11897: Add documentation for the cron script.
Bug 11897: Use camel case in Koha namespace modules.
Bug 11897: Bugfix: Handle empty rotas.
Bug 11897: Follow up: Update userflags/permission id.
Bug 11897: Follow up: Use "btn-xs" instead of "btn-sm".
Bug 11897: Follow up: Check syspref before stockrotation access.
Bug 11897: Move from ::Swagger to ::OpenAPI.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Koha::Objects for Stockrotation module.
Bug 11897: Add stockrotation cron script.
Bug 11897: Add Utils library for Stockrotation module
Bug 11897: REST API - add path defs, controller & tests
Bug 11897: Add JS to provide rota stage manipulation
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stock Rotation permissions to list
Bug 11897: Interface for rotas from Tools menu
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Bug 11897: Bugfixes, unit tests, feedback, documentation.
Bug 11897: Fix style of button links, & form wording.
Bug 11897: Add documentation for the cron script.
Bug 11897: Use camel case in Koha namespace modules.
Bug 11897: Bugfix: Handle empty rotas.
Bug 11897: Follow up: Update userflags/permission id.
Bug 11897: Follow up: Use "btn-xs" instead of "btn-sm".
Bug 11897: Follow up: Check syspref before stockrotation access.
Bug 11897: Move from ::Swagger to ::OpenAPI.
Bug 11897: Follow up: Add more error conditions.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Koha::Objects for Stockrotation module.
Bug 11897: Add stockrotation cron script.
Bug 11897: Add Utils library for Stockrotation module
Bug 11897: REST API - add path defs, controller & tests
Bug 11897: Add JS to provide rota stage manipulation
Bug 11897: Add Stockrotation CSS rules
Bug 11897: Add Stock Rotation permissions to list
Bug 11897: Interface for rotas from Tools menu
Bug 11897: Interface for rota items from biblio
Bug 11897: Add menu options for Stock Rotation
Bug 11897: Bugfixes, unit tests, feedback, documentation.
Bug 11897: Fix style of button links, & form wording.
Bug 11897: Add documentation for the cron script.
Bug 11897: Use camel case in Koha namespace modules.
Bug 11897: Bugfix: Handle empty rotas.
Bug 11897: Follow up: Update userflags/permission id.
Bug 11897: Follow up: Use "btn-xs" instead of "btn-sm".
Bug 11897: Follow up: Check syspref before stockrotation access.
Bug 11897: Move from ::Swagger to ::OpenAPI.
Bug 11897: Follow up: Add more error conditions.
Bug 11897: Rebase bugfixes.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add bulk of Stockrotation module.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add bulk of Stockrotation module.
Bug 11897: (QA Followup) Implement review feedback.
Bug 11897: (QA Followup) Implement review feedback.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add bulk of Stockrotation module.
Bug 11897: (QA Followup) Implement review feedback.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add bulk of Stockrotation module.
Bug 11897: (QA follow-up) Implement review feedback.
Bug 11897: (follow-up) Fix rebasing issue with templates
Bug 11897: (QA follow-up) Fix Koha/Libraries test
Bug 11897: (QA follow-up) Fix POD failures
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add bulk of Stockrotation module.
Bug 11897: (QA follow-up) Implement review feedback.
Bug 11897: (follow-up) Fix rebasing issue with templates
Bug 11897: (QA follow-up) Fix Koha/Libraries test
Bug 11897: (QA follow-up) Fix POD failures
Bug 11897: (QA follow-up) Convert cronscript to use notices
Bug 11897: (QA follow-up) Add default notice template
Bug 11897: (QA follow-up) Convert cronscript to use notices
Bug 11897: (QA follow-up) Add default notice template
Bug 11897: DO NOT PUSH: (follow-up) Update stock rotation schema files.
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add bulk of Stockrotation module.
Bug 11897: (QA follow-up) Implement review feedback.
Bug 11897: (follow-up) Fix rebasing issue with templates
Bug 11897: (QA follow-up) Fix Koha/Libraries test
Bug 11897: (QA follow-up) Fix POD failures
Bug 11897: (QA follow-up) Convert cronscript to use notices
Bug 11897: (QA follow-up) Add default notice template
Bug 11897: DO NOT PUSH: (follow-up) Update stock rotation schema files.
Bug 11897: (QA follow-up) - Add uses of Asset tt plugin
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add bulk of Stockrotation module.
Bug 11897: (QA follow-up) Implement review feedback.
Bug 11897: (follow-up) Fix rebasing issue with templates
Bug 11897: (QA follow-up) Fix Koha/Libraries test
Bug 11897: (QA follow-up) Fix POD failures
Bug 11897: (QA follow-up) Convert cronscript to use notices
Bug 11897: (QA follow-up) Add default notice template
Bug 11897: DO NOT PUSH: (follow-up) Update stock rotation schema files.
Bug 11897: (QA follow-up) - Add uses of Asset tt plugin
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add bulk of Stockrotation module.
Bug 11897: (QA follow-up) Implement review feedback.
Bug 11897: (follow-up) Fix rebasing issue with templates
Bug 11897: (QA follow-up) Fix Koha/Libraries test
Bug 11897: (QA follow-up) Fix POD failures
Bug 11897: (QA follow-up) Convert cronscript to use notices
Bug 11897: (QA follow-up) Add default notice template
Bug 11897: DO NOT PUSH: (follow-up) Update stock rotation schema files.
Bug 11897: (QA follow-up) - Add uses of Asset tt plugin
Bug 11897: (follow-up) Correct bug in referenced permission
Bug 11897: (follow-up) Make permissions more consistent
Bug 11897: (follow-up) Ensure rota's always come back ordered
Bug 11897: (follow-up) Default to 'replyto' and fallback on 'from'
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Stockrotation
Bug 11897: Stockrotation
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Stockrotation
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Stockrotation
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Stockrotation
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Boolean handling to dbic classes.
Bug 11897: Stockrotation
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Boolean handling to dbic classes.
Bug 11897: Stockrotation
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Boolean handling to dbic classes.
Bug 11897: Stockrotation
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Boolean handling to dbic classes.
Bug 11897: Stockrotation
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Boolean handling to dbic classes.
Bug 11897: Stockrotation
Bug 11897: (QA follow-up) Remove rebase leftover
Bug 11897: (QA follow-up) Fix tests
Bug 11897: Remove warnings
Bug 11897: Use 'stockrotation' permission for the endpoint
Bug 11897: Add sample notices for all languages
Bug 11897: (QA follow-up) Template filter fixes
Bug 11897: (QA follow-up) Template filter fixes
Bug 11897: 'superlibrarian' has 'stockrotation' perms
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Boolean handling to dbic classes.
Bug 11897: Stockrotation
Bug 11897: (QA follow-up) Remove rebase leftover
Bug 11897: (QA follow-up) Fix tests
Bug 11897: Use 'stockrotation' permission for the endpoint
Bug 11897: Add sample notices for all languages
Bug 11897: (QA follow-up) Template filter fixes
Bug 11897: 'superlibrarian' has 'stockrotation' perms
Bug 11897: (QA follow-up) Fixes for JS12
Bug 11897: (QA follow-up) Update of tools-menu.js
Bug 11897: (QA follow-up) Move menu to 'Catalog'
Bug 11897: Translatability and wrong escaping fix
Bug 11897: Add Stock Rotation atomic update schema.
Bug 11897: DO NOT PUSH: Add stock rotation schema files.
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Bug 11897: Add Boolean handling to dbic classes.
Bug 11897: Stockrotation
Bug 11897: (QA follow-up) Remove rebase leftover
Bug 11897: (QA follow-up) Fix tests
Bug 11897: Use 'stockrotation' permission for the endpoint
Bug 11897: Add sample notices for all languages
Bug 11897: (QA follow-up) Template filter fixes
Bug 11897: 'superlibrarian' has 'stockrotation' perms
Bug 11897: (QA follow-up) Fixes for JS12
Bug 11897: (QA follow-up) Update of tools-menu.js
Bug 11897: (QA follow-up) Move menu to 'Catalog'
Bug 11897: Translatability and wrong escaping fix
Bug 11897: (QA follow-up) Convert atomic update to perl
Bug 11897: (QA follow-up) Convert atomic update to perl
Bug 11897: (follow-up) Add Stock Rotation atomic update schema
Bug 11897: Add mising semi-colon to userflags.sql
Bug 11897: Add mising semi-colon to user*.sql

Description Martin Renvoize 2014-03-06 08:39:51 UTC
We intend on writing a stock rotation module for Koha.

We aim to add a batch process to automate rotation with a staff client page under tools to manage rotas/schedules.

Once a rota is configured, and your staff user has the right permissions to allocate items, then an additional tab will appear on biblio records allowing the management of of which rota, if any, individual items belong to.

This is different to the rotating collections work as it is designed around rotating individual items upon an automated schedule, however some of the code in that area may be re-factored to allow sharing between the two features.
Comment 1 Martin Renvoize 2014-03-06 09:12:04 UTC Comment hidden (obsolete)
Comment 2 Alex Sassmannshausen 2016-12-12 14:32:27 UTC Comment hidden (obsolete)
Comment 3 Andrew Isherwood 2016-12-15 16:51:05 UTC Comment hidden (obsolete)
Comment 4 Alex Sassmannshausen 2016-12-15 17:04:44 UTC Comment hidden (obsolete)
Comment 5 Alex Sassmannshausen 2016-12-15 17:04:50 UTC Comment hidden (obsolete)
Comment 6 Alex Sassmannshausen 2016-12-15 17:04:57 UTC Comment hidden (obsolete)
Comment 7 Alex Sassmannshausen 2016-12-15 17:05:01 UTC Comment hidden (obsolete)
Comment 8 Alex Sassmannshausen 2016-12-15 17:05:06 UTC Comment hidden (obsolete)
Comment 9 Alex Sassmannshausen 2016-12-15 17:05:10 UTC Comment hidden (obsolete)
Comment 10 Alex Sassmannshausen 2016-12-15 17:05:15 UTC Comment hidden (obsolete)
Comment 11 Alex Sassmannshausen 2016-12-15 17:05:19 UTC Comment hidden (obsolete)
Comment 12 Alex Sassmannshausen 2016-12-15 17:05:23 UTC Comment hidden (obsolete)
Comment 13 Alex Sassmannshausen 2016-12-15 17:05:28 UTC Comment hidden (obsolete)
Comment 14 Alex Sassmannshausen 2016-12-15 17:05:33 UTC Comment hidden (obsolete)
Comment 15 Alex Sassmannshausen 2016-12-15 17:05:38 UTC Comment hidden (obsolete)
Comment 16 Alex Sassmannshausen 2016-12-16 08:48:25 UTC Comment hidden (obsolete)
Comment 17 Andrew Isherwood 2016-12-20 10:22:53 UTC Comment hidden (obsolete)
Comment 18 Andrew Isherwood 2016-12-20 10:23:11 UTC Comment hidden (obsolete)
Comment 19 Andrew Isherwood 2016-12-20 10:25:31 UTC Comment hidden (obsolete)
Comment 20 Andrew Isherwood 2016-12-20 10:26:16 UTC Comment hidden (obsolete)
Comment 21 Alex Sassmannshausen 2017-01-05 10:46:30 UTC
Test Plan
=========

Setup
-----

- Ensure the patches apply cleanly and without problems
- Run the unit tests, and ensure no regressions.  In particular:
  * t/db_dependent/Stockrotationitems.t
  * t/db_dependent/Stockrotationrotas.t
  * t/db_dependent/Stockrotationstages.t
  * t/db_dependent/Items.t
  * t/db_dependent/Koha/Libraries.t

User Interface
--------------

- Enable the stockrotation system preference
- A new menu, "stockrotation" should have appeared under the "tools" page. Test:
  * creating rota
  * editing rota
  * adding stages
  * adding items
  * removing items
  * "move item to next stage"
- Any biblio should now have a "rotas" tab in the biblio view
- From there any items attached to that biblio can be added/removed to/from rotas

Cron Script
-----------

The task of the cron script is to traverse all the items in all rotas
and to see whether any of them need to be moved on to the next stage.

It does this by, for each item, checking whether it has spent more
days than "duration" at the current branch since it's last
(stockrotation) branch transfer.

To test the script, run it with the "-h" flag.  You should get
documentation.

If you want to see the script actually do something, you should:
- setup an item as described above
- run the script to create initial stock rotation branch transfers
  (don't forget the "-x" flag!)
- fiddle the database, so that the initial stock rotation branch
  transfer is in the past by at least the "duration" of the stage
  that the item is currently at
- run the script again (without the "-x" flag): you should see that
  the cron script would now move the item to the next stage
- running it with the "-x" flag will create the new branch transfer
  and will emit a report for the library currently holding the item
  to inform them it needs to be fetched from shelf to be put in
  transit.

If you prefer you can have the script send emails.  Follow the
documentation for this.


Please let me know if you have any questions!  I'll be happy to help
:-)

Alex
Comment 22 Owen Leonard 2017-01-06 14:59:46 UTC Comment hidden (obsolete)
Comment 23 Andrew Isherwood 2017-01-09 16:17:42 UTC Comment hidden (obsolete)
Comment 24 Andrew Isherwood 2017-01-09 16:27:40 UTC Comment hidden (obsolete)
Comment 25 Andrew Isherwood 2017-01-09 16:28:49 UTC Comment hidden (obsolete)
Comment 26 Andrew Isherwood 2017-01-09 16:29:30 UTC Comment hidden (obsolete)
Comment 27 Andrew Isherwood 2017-01-09 16:29:57 UTC Comment hidden (obsolete)
Comment 28 Andrew Isherwood 2017-01-09 16:30:19 UTC Comment hidden (obsolete)
Comment 29 Andrew Isherwood 2017-01-09 16:39:05 UTC Comment hidden (obsolete)
Comment 30 Alex Sassmannshausen 2017-02-14 09:52:41 UTC Comment hidden (obsolete)
Comment 31 Alex Sassmannshausen 2017-02-27 14:07:41 UTC Comment hidden (obsolete)
Comment 32 Liz Rea 2017-03-02 03:16:08 UTC Comment hidden (obsolete)
Comment 33 Alex Sassmannshausen 2017-03-02 11:55:55 UTC Comment hidden (obsolete)
Comment 34 Liz Rea 2017-03-03 01:41:06 UTC Comment hidden (obsolete)
Comment 35 Alex Sassmannshausen 2017-04-04 13:50:00 UTC Comment hidden (obsolete)
Comment 36 Alex Sassmannshausen 2017-04-04 13:50:14 UTC Comment hidden (obsolete)
Comment 37 Alex Sassmannshausen 2017-04-04 13:50:23 UTC Comment hidden (obsolete)
Comment 38 Alex Sassmannshausen 2017-04-04 13:50:29 UTC Comment hidden (obsolete)
Comment 39 Alex Sassmannshausen 2017-04-04 13:50:35 UTC Comment hidden (obsolete)
Comment 40 Alex Sassmannshausen 2017-04-04 13:50:41 UTC Comment hidden (obsolete)
Comment 41 Alex Sassmannshausen 2017-04-04 13:50:47 UTC Comment hidden (obsolete)
Comment 42 Alex Sassmannshausen 2017-04-04 13:50:52 UTC Comment hidden (obsolete)
Comment 43 Alex Sassmannshausen 2017-04-04 13:50:58 UTC Comment hidden (obsolete)
Comment 44 Alex Sassmannshausen 2017-04-04 13:51:03 UTC Comment hidden (obsolete)
Comment 45 Alex Sassmannshausen 2017-04-04 13:51:09 UTC Comment hidden (obsolete)
Comment 46 Alex Sassmannshausen 2017-04-04 13:51:15 UTC Comment hidden (obsolete)
Comment 47 Alex Sassmannshausen 2017-04-04 13:51:22 UTC Comment hidden (obsolete)
Comment 48 Alex Sassmannshausen 2017-04-04 13:51:29 UTC Comment hidden (obsolete)
Comment 49 Alex Sassmannshausen 2017-04-04 13:51:37 UTC Comment hidden (obsolete)
Comment 50 Alex Sassmannshausen 2017-04-04 13:54:02 UTC Comment hidden (obsolete)
Comment 51 Alex Sassmannshausen 2017-04-05 13:11:52 UTC Comment hidden (obsolete)
Comment 52 Owen Leonard 2017-04-10 17:52:25 UTC Comment hidden (obsolete)
Comment 53 Alex Sassmannshausen 2017-04-12 11:04:49 UTC Comment hidden (obsolete)
Comment 54 Owen Leonard 2017-04-12 12:24:43 UTC Comment hidden (obsolete)
Comment 55 Kyle M Hall 2017-04-24 15:39:42 UTC Comment hidden (obsolete)
Comment 56 Alex Sassmannshausen 2017-04-26 08:18:27 UTC Comment hidden (obsolete)
Comment 57 Alex Sassmannshausen 2017-04-26 08:28:25 UTC Comment hidden (obsolete)
Comment 58 Alex Sassmannshausen 2017-04-26 08:39:25 UTC Comment hidden (obsolete)
Comment 59 Alex Sassmannshausen 2017-04-26 15:07:22 UTC Comment hidden (obsolete)
Comment 60 Alex Sassmannshausen 2017-04-27 08:16:36 UTC Comment hidden (obsolete)
Comment 61 Alex Sassmannshausen 2017-04-27 08:17:35 UTC Comment hidden (obsolete)
Comment 62 Alex Sassmannshausen 2017-04-27 08:17:43 UTC Comment hidden (obsolete)
Comment 63 Alex Sassmannshausen 2017-04-27 08:17:50 UTC Comment hidden (obsolete)
Comment 64 Alex Sassmannshausen 2017-04-27 08:17:57 UTC Comment hidden (obsolete)
Comment 65 Alex Sassmannshausen 2017-04-27 08:18:03 UTC Comment hidden (obsolete)
Comment 66 Alex Sassmannshausen 2017-04-27 08:18:10 UTC Comment hidden (obsolete)
Comment 67 Alex Sassmannshausen 2017-04-27 08:18:18 UTC Comment hidden (obsolete)
Comment 68 Alex Sassmannshausen 2017-04-27 08:18:25 UTC Comment hidden (obsolete)
Comment 69 Alex Sassmannshausen 2017-04-27 08:18:33 UTC Comment hidden (obsolete)
Comment 70 Alex Sassmannshausen 2017-04-27 08:18:40 UTC Comment hidden (obsolete)
Comment 71 Alex Sassmannshausen 2017-04-27 08:18:47 UTC Comment hidden (obsolete)
Comment 72 Alex Sassmannshausen 2017-04-27 08:18:54 UTC Comment hidden (obsolete)
Comment 73 Alex Sassmannshausen 2017-04-27 08:19:02 UTC Comment hidden (obsolete)
Comment 74 Alex Sassmannshausen 2017-04-27 08:19:09 UTC Comment hidden (obsolete)
Comment 75 Alex Sassmannshausen 2017-04-27 08:19:17 UTC Comment hidden (obsolete)
Comment 76 Alex Sassmannshausen 2017-04-27 08:19:33 UTC Comment hidden (obsolete)
Comment 77 Alex Sassmannshausen 2017-04-27 08:19:45 UTC Comment hidden (obsolete)
Comment 78 Alex Sassmannshausen 2017-04-27 08:22:28 UTC Comment hidden (obsolete)
Comment 79 Katrin Fischer 2017-05-02 18:23:41 UTC Comment hidden (obsolete)
Comment 80 Alex Sassmannshausen 2017-05-04 09:38:09 UTC Comment hidden (obsolete)
Comment 81 Alex Sassmannshausen 2017-05-04 09:38:20 UTC Comment hidden (obsolete)
Comment 82 Alex Sassmannshausen 2017-05-04 09:38:28 UTC Comment hidden (obsolete)
Comment 83 Alex Sassmannshausen 2017-05-04 09:38:35 UTC Comment hidden (obsolete)
Comment 84 Alex Sassmannshausen 2017-05-04 09:38:41 UTC Comment hidden (obsolete)
Comment 85 Alex Sassmannshausen 2017-05-04 09:38:47 UTC Comment hidden (obsolete)
Comment 86 Alex Sassmannshausen 2017-05-04 09:38:53 UTC Comment hidden (obsolete)
Comment 87 Alex Sassmannshausen 2017-05-04 09:38:58 UTC Comment hidden (obsolete)
Comment 88 Alex Sassmannshausen 2017-05-04 09:39:04 UTC Comment hidden (obsolete)
Comment 89 Alex Sassmannshausen 2017-05-04 09:39:09 UTC Comment hidden (obsolete)
Comment 90 Alex Sassmannshausen 2017-05-04 09:39:15 UTC Comment hidden (obsolete)
Comment 91 Alex Sassmannshausen 2017-05-04 09:39:21 UTC Comment hidden (obsolete)
Comment 92 Alex Sassmannshausen 2017-05-04 09:39:26 UTC Comment hidden (obsolete)
Comment 93 Alex Sassmannshausen 2017-05-04 09:39:32 UTC Comment hidden (obsolete)
Comment 94 Alex Sassmannshausen 2017-05-04 09:39:37 UTC Comment hidden (obsolete)
Comment 95 Alex Sassmannshausen 2017-05-04 09:39:42 UTC Comment hidden (obsolete)
Comment 96 Alex Sassmannshausen 2017-05-04 09:39:49 UTC Comment hidden (obsolete)
Comment 97 Alex Sassmannshausen 2017-05-04 09:39:55 UTC Comment hidden (obsolete)
Comment 98 Alex Sassmannshausen 2017-05-04 09:40:43 UTC Comment hidden (obsolete)
Comment 99 Alex Sassmannshausen 2017-05-04 14:31:15 UTC Comment hidden (obsolete)
Comment 100 Josef Moravec 2017-06-20 18:23:19 UTC Comment hidden (obsolete)
Comment 101 Alex Sassmannshausen 2017-07-06 15:02:46 UTC Comment hidden (obsolete)
Comment 102 Alex Sassmannshausen 2017-07-06 15:02:56 UTC Comment hidden (obsolete)
Comment 103 Alex Sassmannshausen 2017-07-06 15:25:40 UTC Comment hidden (obsolete)
Comment 104 Alex Sassmannshausen 2017-08-09 14:48:16 UTC Comment hidden (obsolete)
Comment 105 Alex Sassmannshausen 2017-08-09 14:48:21 UTC Comment hidden (obsolete)
Comment 106 Alex Sassmannshausen 2017-08-09 14:48:26 UTC Comment hidden (obsolete)
Comment 107 Alex Sassmannshausen 2017-08-09 14:48:31 UTC Comment hidden (obsolete)
Comment 108 Alex Sassmannshausen 2017-08-09 14:48:35 UTC Comment hidden (obsolete)
Comment 109 Alex Sassmannshausen 2017-08-09 14:48:40 UTC Comment hidden (obsolete)
Comment 110 Alex Sassmannshausen 2017-08-09 14:48:44 UTC Comment hidden (obsolete)
Comment 111 Alex Sassmannshausen 2017-08-09 14:48:49 UTC Comment hidden (obsolete)
Comment 112 Alex Sassmannshausen 2017-08-09 14:48:53 UTC Comment hidden (obsolete)
Comment 113 Alex Sassmannshausen 2017-08-09 14:48:58 UTC Comment hidden (obsolete)
Comment 114 Alex Sassmannshausen 2017-08-09 14:49:02 UTC Comment hidden (obsolete)
Comment 115 Alex Sassmannshausen 2017-08-09 14:49:07 UTC Comment hidden (obsolete)
Comment 116 Alex Sassmannshausen 2017-08-09 14:49:11 UTC Comment hidden (obsolete)
Comment 117 Alex Sassmannshausen 2017-08-09 14:49:16 UTC Comment hidden (obsolete)
Comment 118 Alex Sassmannshausen 2017-08-09 14:49:21 UTC Comment hidden (obsolete)
Comment 119 Alex Sassmannshausen 2017-08-09 14:49:25 UTC Comment hidden (obsolete)
Comment 120 Alex Sassmannshausen 2017-08-09 14:49:30 UTC Comment hidden (obsolete)
Comment 121 Alex Sassmannshausen 2017-08-09 14:49:35 UTC Comment hidden (obsolete)
Comment 122 Alex Sassmannshausen 2017-08-09 14:49:40 UTC Comment hidden (obsolete)
Comment 123 Alex Sassmannshausen 2017-08-09 14:49:44 UTC Comment hidden (obsolete)
Comment 124 Alex Sassmannshausen 2017-08-09 14:49:49 UTC Comment hidden (obsolete)
Comment 125 Alex Sassmannshausen 2017-08-09 14:49:54 UTC Comment hidden (obsolete)
Comment 126 Alex Sassmannshausen 2017-08-09 14:53:44 UTC Comment hidden (obsolete)
Comment 127 Alex Sassmannshausen 2017-08-09 15:01:01 UTC Comment hidden (obsolete)
Comment 128 Alex Sassmannshausen 2017-08-09 15:01:07 UTC Comment hidden (obsolete)
Comment 129 Alex Sassmannshausen 2017-08-09 15:01:12 UTC Comment hidden (obsolete)
Comment 130 Alex Sassmannshausen 2017-08-09 15:01:17 UTC Comment hidden (obsolete)
Comment 131 Alex Sassmannshausen 2017-08-09 15:01:22 UTC Comment hidden (obsolete)
Comment 132 Alex Sassmannshausen 2017-08-09 15:01:27 UTC Comment hidden (obsolete)
Comment 133 Alex Sassmannshausen 2017-08-09 15:01:31 UTC Comment hidden (obsolete)
Comment 134 Alex Sassmannshausen 2017-08-09 15:01:36 UTC Comment hidden (obsolete)
Comment 135 Alex Sassmannshausen 2017-08-09 15:01:41 UTC Comment hidden (obsolete)
Comment 136 Alex Sassmannshausen 2017-08-09 15:01:46 UTC Comment hidden (obsolete)
Comment 137 Alex Sassmannshausen 2017-08-09 15:01:50 UTC Comment hidden (obsolete)
Comment 138 Alex Sassmannshausen 2017-08-09 15:01:55 UTC Comment hidden (obsolete)
Comment 139 Alex Sassmannshausen 2017-08-09 15:02:00 UTC Comment hidden (obsolete)
Comment 140 Alex Sassmannshausen 2017-08-09 15:02:05 UTC Comment hidden (obsolete)
Comment 141 Alex Sassmannshausen 2017-08-09 15:02:10 UTC Comment hidden (obsolete)
Comment 142 Alex Sassmannshausen 2017-08-09 15:02:15 UTC Comment hidden (obsolete)
Comment 143 Alex Sassmannshausen 2017-08-09 15:02:20 UTC Comment hidden (obsolete)
Comment 144 Alex Sassmannshausen 2017-08-09 15:02:25 UTC Comment hidden (obsolete)
Comment 145 Alex Sassmannshausen 2017-08-09 15:02:30 UTC Comment hidden (obsolete)
Comment 146 Alex Sassmannshausen 2017-08-09 15:02:35 UTC Comment hidden (obsolete)
Comment 147 Alex Sassmannshausen 2017-08-09 15:02:39 UTC Comment hidden (obsolete)
Comment 148 Alex Sassmannshausen 2017-08-09 15:02:44 UTC Comment hidden (obsolete)
Comment 149 Alex Sassmannshausen 2017-08-09 15:03:55 UTC Comment hidden (obsolete)
Comment 150 Tomás Cohen Arazi 2017-08-22 20:21:35 UTC Comment hidden (obsolete)
Comment 151 Alex Sassmannshausen 2017-08-23 13:43:15 UTC Comment hidden (obsolete)
Comment 152 Alex Sassmannshausen 2017-08-23 13:44:33 UTC Comment hidden (obsolete)
Comment 153 Alex Sassmannshausen 2018-01-15 18:16:02 UTC Comment hidden (obsolete)
Comment 154 Alex Sassmannshausen 2018-01-15 18:17:56 UTC Comment hidden (obsolete)
Comment 155 Alex Sassmannshausen 2018-01-15 18:18:05 UTC Comment hidden (obsolete)
Comment 156 Alex Sassmannshausen 2018-01-15 18:18:13 UTC Comment hidden (obsolete)
Comment 157 Alex Sassmannshausen 2018-01-15 18:18:21 UTC Comment hidden (obsolete)
Comment 158 Alex Sassmannshausen 2018-01-15 18:18:31 UTC Comment hidden (obsolete)
Comment 159 Alex Sassmannshausen 2018-01-15 18:18:38 UTC Comment hidden (obsolete)
Comment 160 Alex Sassmannshausen 2018-01-15 18:18:45 UTC Comment hidden (obsolete)
Comment 161 Alex Sassmannshausen 2018-01-15 18:18:53 UTC Comment hidden (obsolete)
Comment 162 Alex Sassmannshausen 2018-01-15 18:19:00 UTC Comment hidden (obsolete)
Comment 163 Alex Sassmannshausen 2018-01-15 18:19:09 UTC Comment hidden (obsolete)
Comment 164 Alex Sassmannshausen 2018-01-15 18:19:16 UTC Comment hidden (obsolete)
Comment 165 Alex Sassmannshausen 2018-01-15 18:19:24 UTC Comment hidden (obsolete)
Comment 166 Alex Sassmannshausen 2018-01-15 18:19:31 UTC Comment hidden (obsolete)
Comment 167 Alex Sassmannshausen 2018-01-15 18:19:40 UTC Comment hidden (obsolete)
Comment 168 Alex Sassmannshausen 2018-01-15 18:19:46 UTC Comment hidden (obsolete)
Comment 169 Alex Sassmannshausen 2018-01-15 18:19:54 UTC Comment hidden (obsolete)
Comment 170 Alex Sassmannshausen 2018-01-15 18:20:03 UTC Comment hidden (obsolete)
Comment 171 Alex Sassmannshausen 2018-01-15 18:20:10 UTC Comment hidden (obsolete)
Comment 172 Alex Sassmannshausen 2018-01-15 18:20:19 UTC Comment hidden (obsolete)
Comment 173 Alex Sassmannshausen 2018-01-15 18:20:27 UTC Comment hidden (obsolete)
Comment 174 Alex Sassmannshausen 2018-01-15 18:20:34 UTC Comment hidden (obsolete)
Comment 175 Alex Sassmannshausen 2018-01-15 18:20:40 UTC Comment hidden (obsolete)
Comment 176 Alex Sassmannshausen 2018-01-15 18:20:48 UTC Comment hidden (obsolete)
Comment 177 Alex Sassmannshausen 2018-01-15 18:20:56 UTC Comment hidden (obsolete)
Comment 178 Alex Sassmannshausen 2018-01-15 18:52:25 UTC Comment hidden (obsolete)
Comment 179 Alex Sassmannshausen 2018-01-15 18:52:46 UTC Comment hidden (obsolete)
Comment 180 Alex Sassmannshausen 2018-01-15 18:52:56 UTC Comment hidden (obsolete)
Comment 181 Alex Sassmannshausen 2018-01-15 18:53:05 UTC Comment hidden (obsolete)
Comment 182 Katrin Fischer 2018-02-18 19:31:29 UTC Comment hidden (obsolete)
Comment 183 Katrin Fischer 2018-02-18 19:42:37 UTC Comment hidden (obsolete)
Comment 184 Katrin Fischer 2018-02-18 20:18:16 UTC Comment hidden (obsolete)
Comment 185 Alex Sassmannshausen 2018-02-23 16:03:43 UTC Comment hidden (obsolete)
Comment 186 Alex Sassmannshausen 2018-02-23 16:03:53 UTC Comment hidden (obsolete)
Comment 187 Alex Sassmannshausen 2018-02-23 16:04:06 UTC Comment hidden (obsolete)
Comment 188 Alex Sassmannshausen 2018-02-23 16:04:15 UTC Comment hidden (obsolete)
Comment 189 Alex Sassmannshausen 2018-02-23 16:04:24 UTC Comment hidden (obsolete)
Comment 190 Alex Sassmannshausen 2018-02-23 16:08:41 UTC Comment hidden (obsolete)
Comment 191 Katrin Fischer 2018-02-27 07:20:28 UTC Comment hidden (obsolete)
Comment 192 Martin Renvoize 2018-04-11 15:54:51 UTC Comment hidden (obsolete)
Comment 193 Martin Renvoize 2018-04-11 15:55:39 UTC Comment hidden (obsolete)
Comment 194 Martin Renvoize 2018-04-11 15:55:44 UTC Comment hidden (obsolete)
Comment 195 Martin Renvoize 2018-04-11 15:55:50 UTC Comment hidden (obsolete)
Comment 196 Martin Renvoize 2018-04-11 15:55:56 UTC Comment hidden (obsolete)
Comment 197 Martin Renvoize 2018-04-11 15:56:01 UTC Comment hidden (obsolete)
Comment 198 Martin Renvoize 2018-04-11 15:57:02 UTC Comment hidden (obsolete)
Comment 199 Martin Renvoize 2018-04-11 16:55:04 UTC Comment hidden (obsolete)
Comment 200 Martin Renvoize 2018-04-11 16:55:09 UTC Comment hidden (obsolete)
Comment 201 Martin Renvoize 2018-04-11 16:55:14 UTC Comment hidden (obsolete)
Comment 202 Martin Renvoize 2018-04-11 16:55:20 UTC Comment hidden (obsolete)
Comment 203 Martin Renvoize 2018-04-11 16:55:25 UTC Comment hidden (obsolete)
Comment 204 Martin Renvoize 2018-04-11 16:55:31 UTC Comment hidden (obsolete)
Comment 205 Martin Renvoize 2018-04-11 16:55:36 UTC Comment hidden (obsolete)
Comment 206 Martin Renvoize 2018-04-11 16:55:41 UTC Comment hidden (obsolete)
Comment 207 Martin Renvoize 2018-04-11 16:57:15 UTC Comment hidden (obsolete)
Comment 208 Martin Renvoize 2018-04-16 08:11:11 UTC Comment hidden (obsolete)
Comment 209 Martin Renvoize 2018-04-16 08:11:16 UTC Comment hidden (obsolete)
Comment 210 Martin Renvoize 2018-04-16 08:11:22 UTC Comment hidden (obsolete)
Comment 211 Martin Renvoize 2018-04-16 08:11:28 UTC Comment hidden (obsolete)
Comment 212 Martin Renvoize 2018-04-16 08:11:34 UTC Comment hidden (obsolete)
Comment 213 Martin Renvoize 2018-04-16 08:11:39 UTC Comment hidden (obsolete)
Comment 214 Martin Renvoize 2018-04-16 08:11:44 UTC Comment hidden (obsolete)
Comment 215 Martin Renvoize 2018-04-16 08:11:50 UTC Comment hidden (obsolete)
Comment 216 Martin Renvoize 2018-04-16 08:11:55 UTC Comment hidden (obsolete)
Comment 217 Martin Renvoize 2018-04-16 08:12:01 UTC Comment hidden (obsolete)
Comment 218 Martin Renvoize 2018-04-17 13:13:58 UTC Comment hidden (obsolete)
Comment 219 Martin Renvoize 2018-04-17 13:14:04 UTC Comment hidden (obsolete)
Comment 220 Martin Renvoize 2018-04-17 15:47:45 UTC Comment hidden (obsolete)
Comment 221 Martin Renvoize 2018-04-18 16:20:27 UTC Comment hidden (obsolete)
Comment 222 Martin Renvoize 2018-04-18 16:20:33 UTC Comment hidden (obsolete)
Comment 223 Martin Renvoize 2018-04-18 16:20:39 UTC Comment hidden (obsolete)
Comment 224 Martin Renvoize 2018-04-18 16:20:45 UTC Comment hidden (obsolete)
Comment 225 Martin Renvoize 2018-04-18 16:20:51 UTC Comment hidden (obsolete)
Comment 226 Martin Renvoize 2018-04-18 16:20:56 UTC Comment hidden (obsolete)
Comment 227 Martin Renvoize 2018-04-18 16:21:02 UTC Comment hidden (obsolete)
Comment 228 Martin Renvoize 2018-04-18 16:21:08 UTC Comment hidden (obsolete)
Comment 229 Martin Renvoize 2018-04-18 16:21:13 UTC Comment hidden (obsolete)
Comment 230 Martin Renvoize 2018-04-18 16:21:19 UTC Comment hidden (obsolete)
Comment 231 Martin Renvoize 2018-04-18 16:21:25 UTC Comment hidden (obsolete)
Comment 232 Martin Renvoize 2018-04-18 16:21:30 UTC Comment hidden (obsolete)
Comment 233 Martin Renvoize 2018-05-18 10:46:06 UTC Comment hidden (obsolete)
Comment 234 Martin Renvoize 2018-05-18 10:46:12 UTC Comment hidden (obsolete)
Comment 235 Martin Renvoize 2018-05-18 10:46:18 UTC Comment hidden (obsolete)
Comment 236 Martin Renvoize 2018-05-18 10:46:24 UTC Comment hidden (obsolete)
Comment 237 Martin Renvoize 2018-05-18 10:46:30 UTC Comment hidden (obsolete)
Comment 238 Martin Renvoize 2018-05-18 10:46:35 UTC Comment hidden (obsolete)
Comment 239 Martin Renvoize 2018-05-18 10:46:41 UTC Comment hidden (obsolete)
Comment 240 Martin Renvoize 2018-05-18 10:46:46 UTC Comment hidden (obsolete)
Comment 241 Martin Renvoize 2018-05-18 10:46:52 UTC Comment hidden (obsolete)
Comment 242 Martin Renvoize 2018-05-18 10:46:58 UTC Comment hidden (obsolete)
Comment 243 Martin Renvoize 2018-05-18 10:47:04 UTC Comment hidden (obsolete)
Comment 244 Martin Renvoize 2018-05-18 10:47:09 UTC Comment hidden (obsolete)
Comment 245 Martin Renvoize 2018-06-18 13:55:53 UTC Comment hidden (obsolete)
Comment 246 Martin Renvoize 2018-06-18 13:56:00 UTC Comment hidden (obsolete)
Comment 247 Martin Renvoize 2018-06-18 13:56:06 UTC Comment hidden (obsolete)
Comment 248 Martin Renvoize 2018-06-18 13:56:12 UTC Comment hidden (obsolete)
Comment 249 Martin Renvoize 2018-06-18 13:56:19 UTC Comment hidden (obsolete)
Comment 250 Martin Renvoize 2018-06-18 13:56:24 UTC Comment hidden (obsolete)
Comment 251 Martin Renvoize 2018-06-18 13:56:30 UTC Comment hidden (obsolete)
Comment 252 Martin Renvoize 2018-06-18 13:56:36 UTC Comment hidden (obsolete)
Comment 253 Martin Renvoize 2018-06-18 13:56:43 UTC Comment hidden (obsolete)
Comment 254 Martin Renvoize 2018-06-18 13:56:49 UTC Comment hidden (obsolete)
Comment 255 Martin Renvoize 2018-06-18 13:56:55 UTC Comment hidden (obsolete)
Comment 256 Martin Renvoize 2018-06-18 13:57:01 UTC Comment hidden (obsolete)
Comment 257 Martin Renvoize 2018-06-18 13:57:07 UTC Comment hidden (obsolete)
Comment 258 Martin Renvoize 2018-06-18 13:57:13 UTC Comment hidden (obsolete)
Comment 259 Martin Renvoize 2018-06-18 13:57:20 UTC Comment hidden (obsolete)
Comment 260 Martin Renvoize 2018-06-18 13:58:42 UTC Comment hidden (obsolete)
Comment 261 Martin Renvoize 2018-06-18 16:00:42 UTC Comment hidden (obsolete)
Comment 262 Jonathan Druart 2018-06-19 13:20:22 UTC Comment hidden (obsolete)
Comment 263 Martin Renvoize 2018-06-19 14:33:50 UTC Comment hidden (obsolete)
Comment 264 Martin Renvoize 2018-06-21 15:14:41 UTC
I have now submitted a merge request for the koha-manual to accompany this bug: https://gitlab.com/koha-community/koha-manual/merge_requests/136/diffs
Comment 265 Martin Renvoize 2018-07-05 14:23:27 UTC Comment hidden (obsolete)
Comment 266 Martin Renvoize 2018-07-05 14:23:33 UTC Comment hidden (obsolete)
Comment 267 Martin Renvoize 2018-07-05 14:23:39 UTC Comment hidden (obsolete)
Comment 268 Martin Renvoize 2018-07-05 14:23:46 UTC Comment hidden (obsolete)
Comment 269 Martin Renvoize 2018-07-05 14:27:44 UTC
Right, 

I have squashed the commits as far as I can to clean this bug up a bit and make it easier to QA as a whole, I've kept the signoff line as the same user was about to signoff again as they've been receiving all the updates as they were written and are happy the system is all still working.

I have another customer going through it all with fresh eyes (they've only been using it a couple of weeks) who will add a second signoff line for us.

All QA feedback to date has been accounted for in the squashed set of patches.
Comment 270 Martin Renvoize 2018-07-05 14:29:33 UTC
Would love some UI feedback if you get a moment Owen ;)
Comment 271 Martin Renvoize 2018-07-05 14:32:50 UTC
Created attachment 76710 [details] [review]
Bug 11897: Stockrotation

The stock rotation feature adds a batch process to automate rotation of
catalgue items with a staff client page under tools to manage rotas/schedules.

Once a rota is configured, and your staff user has the right permissions
to allocate items, then an additional tab will appear on biblio records
allowing the management of of which rota, if any, individual items belong
to.

It also includes a cron script to process the items on a daily basis.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Comment 272 Martin Renvoize 2018-08-09 13:42:33 UTC Comment hidden (obsolete)
Comment 273 Martin Renvoize 2018-08-09 13:42:41 UTC Comment hidden (obsolete)
Comment 274 Martin Renvoize 2018-08-09 13:42:49 UTC Comment hidden (obsolete)
Comment 275 Martin Renvoize 2018-08-09 13:42:57 UTC Comment hidden (obsolete)
Comment 276 Martin Renvoize 2018-08-09 13:43:35 UTC Comment hidden (obsolete)
Comment 277 Chris Cormack 2018-08-24 02:02:12 UTC Comment hidden (obsolete)
Comment 278 Martin Renvoize 2018-09-04 10:54:43 UTC Comment hidden (obsolete)
Comment 279 Martin Renvoize 2018-09-04 10:54:51 UTC Comment hidden (obsolete)
Comment 280 Martin Renvoize 2018-09-04 10:55:00 UTC Comment hidden (obsolete)
Comment 281 Martin Renvoize 2018-09-04 10:55:09 UTC Comment hidden (obsolete)
Comment 282 Martin Renvoize 2018-09-04 10:56:48 UTC
Sorry for the delay, you caught me on vacation ;).

I've rebased the patches upon master and accordingly updated the CSS to the SCSS equivalent. I'd appreciate Owens input on that side of things as I'm pretty new to scss in koha myself.
Comment 283 Martin Renvoize 2018-09-04 13:12:46 UTC Comment hidden (obsolete)
Comment 284 Martin Renvoize 2018-09-04 13:12:54 UTC Comment hidden (obsolete)
Comment 285 Martin Renvoize 2018-09-04 13:13:02 UTC Comment hidden (obsolete)
Comment 286 Martin Renvoize 2018-09-04 13:13:10 UTC Comment hidden (obsolete)
Comment 287 Martin Renvoize 2018-09-04 13:35:56 UTC Comment hidden (obsolete)
Comment 288 Martin Renvoize 2018-09-04 13:36:05 UTC Comment hidden (obsolete)
Comment 289 Martin Renvoize 2018-09-04 13:36:12 UTC Comment hidden (obsolete)
Comment 290 Martin Renvoize 2018-09-04 13:36:20 UTC Comment hidden (obsolete)
Comment 291 Martin Renvoize 2018-09-04 13:36:27 UTC Comment hidden (obsolete)
Comment 292 Lisette Scheer 2018-09-15 19:11:25 UTC
CONFLICT (content): Merge conflict in Koha/Schema/Result/Branch.pm
Failed to merge in the changes.
Patch failed at 0001 Bug 11897: DO NOT PUSH: Add stock rotation schema files.
The copy of the patch that failed is found in:
   /home/vagrant/kohaclone/.git/rebase-apply/patch
When you have resolved this problem run "git bz apply --continue".
If you would prefer to skip this patch, instead run "git bz apply --skip".
To restore the original branch and stop patching run "git bz apply --abort".
 
Nick recommended skipping the patch, then I got this:
Unstaged changes after reset:
M       Koha/Schema/Result/Item.pm
Applying: Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
Using index info to reconstruct a base tree...
A       Koha/Schema/Result/Stockrotationstage.pm
Falling back to patching base and 3-way merge...
error: refusing to lose untracked file at 'Koha/Schema/Result/Stockrotationstage.pm'
CONFLICT (modify/delete): Koha/Schema/Result/Stockrotationstage.pm deleted in HEAD and modified in Bug 11897: DBIX::Class::Ordered in Stockrotationstage.. Version Bug 11897: DBIX::Class::Ordered in Stockrotationstage. of Koha/Schema/Result/Stockrotationstage.pm left in tree.
Failed to merge in the changes.
Patch failed at 0001 Bug 11897: DBIX::Class::Ordered in Stockrotationstage.
The copy of the patch that failed is found in:
   /home/vagrant/kohaclone/.git/rebase-apply/patch
When you have resolved this problem run "git bz apply --continue".
If you would prefer to skip this patch, instead run "git bz apply --skip".
To restore the original branch and stop patching run "git bz apply --abort".
Patch left in /tmp/Bug-11897-DBIXClassOrdered-in-Stockrotationstage-uoGTy1.patch
 
Nick recommended skipping again and I got this:
Unstaged changes after reset:
M       Koha/Schema/Result/Item.pm
Applying: Bug 11897: Add Boolean handling to dbic classes.
Using index info to reconstruct a base tree...
A       Koha/Schema/Result/Stockrotationitem.pm
A       Koha/Schema/Result/Stockrotationrota.pm
Falling back to patching base and 3-way merge...
error: refusing to lose untracked file at 'Koha/Schema/Result/Stockrotationrota.pm'
error: refusing to lose untracked file at 'Koha/Schema/Result/Stockrotationitem.pm'
CONFLICT (modify/delete): Koha/Schema/Result/Stockrotationrota.pm deleted in HEAD and modified in Bug 11897: Add Boolean handling to dbic classes.. Version Bug 11897: Add Boolean handling to dbic classes. of Koha/Schema/Result/Stockrotationrota.pm left in tree.
CONFLICT (modify/delete): Koha/Schema/Result/Stockrotationitem.pm deleted in HEAD and modified in Bug 11897: Add Boolean handling to dbic classes.. Version Bug 11897: Add Boolean handling to dbic classes. of Koha/Schema/Result/Stockrotationitem.pm left in tree.
Failed to merge in the changes.
Patch failed at 0001 Bug 11897: Add Boolean handling to dbic classes.
The copy of the patch that failed is found in:
   /home/vagrant/kohaclone/.git/rebase-apply/patch
When you have resolved this problem run "git bz apply --continue".
If you would prefer to skip this patch, instead run "git bz apply --skip".
To restore the original branch and stop patching run "git bz apply --abort".
Patch left in /tmp/Bug-11897-Add-Boolean-handling-to-dbic-classes-mwDSBq.patch

Lisette
Comment 293 Martin Renvoize 2018-09-18 12:53:50 UTC Comment hidden (obsolete)
Comment 294 Martin Renvoize 2018-09-18 12:53:58 UTC Comment hidden (obsolete)
Comment 295 Martin Renvoize 2018-09-18 12:54:06 UTC Comment hidden (obsolete)
Comment 296 Martin Renvoize 2018-09-18 12:54:15 UTC Comment hidden (obsolete)
Comment 297 Martin Renvoize 2018-09-18 12:54:23 UTC Comment hidden (obsolete)
Comment 298 Martin Renvoize 2018-09-18 12:56:05 UTC
Rebased on current master.. also remember there are scss changes in here so you'll need to follow https://wiki.koha-community.org/wiki/Working_with_SCSS_in_the_OPAC_and_staff_client to test it fully.
Comment 299 Tomás Cohen Arazi 2018-09-28 18:54:36 UTC
The patches don't apply right now. Some remarks while I keep trying:
- For table names I usually follow the 'table names conventions'[1], which I'm surprised are not on the Coding guidelines
- CHARSET and COLLATE shoul dbe utf8mb4 and utf8mb4_unicode_ci respectively
- I would use a perl atomicupdate (based on skeleton.perl) instead. VERY MINOR

[1] https://wiki.koha-community.org/wiki/Koha_Objects#Database_Table_Conventions
[2] https://wiki.koha-community.org/wiki/Coding_Guidelines#SQL12:_Booleans
Comment 300 Martin Renvoize 2018-10-01 15:45:39 UTC Comment hidden (obsolete)
Comment 301 Martin Renvoize 2018-10-01 15:45:47 UTC Comment hidden (obsolete)
Comment 302 Martin Renvoize 2018-10-01 15:45:55 UTC Comment hidden (obsolete)
Comment 303 Martin Renvoize 2018-10-01 15:46:02 UTC Comment hidden (obsolete)
Comment 304 Martin Renvoize 2018-10-01 15:46:11 UTC Comment hidden (obsolete)
Comment 305 Martin Renvoize 2018-10-01 16:49:33 UTC Comment hidden (obsolete)
Comment 306 Martin Renvoize 2018-10-01 16:49:42 UTC Comment hidden (obsolete)
Comment 307 Martin Renvoize 2018-10-01 16:49:50 UTC Comment hidden (obsolete)
Comment 308 Martin Renvoize 2018-10-01 16:50:00 UTC Comment hidden (obsolete)
Comment 309 Martin Renvoize 2018-10-01 16:50:10 UTC Comment hidden (obsolete)
Comment 310 Tomás Cohen Arazi 2018-10-04 19:59:09 UTC
Created attachment 79964 [details] [review]
Bug 11897: Add Stock Rotation atomic update schema.

* installer/data/mysql/atomicupdate/stockrot_tables.sql: New file.
* installer/data/mysql/kohastructure.sql (stockrotationrotas)
  (stockrotationstages, stockrotationitems): New tables.
* installer/data/mysql/sysprefs.sql: Add Stockrotation sysprefs.
* installer/data/mysql/userflags.sql: Add Stockrotaiton userflag.
* installer/data/mysql/userpermissions.sql: Add Stockrotation
  userpermissions.
* koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref:
  Add Stockrotation menu.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 311 Tomás Cohen Arazi 2018-10-04 19:59:19 UTC
Created attachment 79965 [details] [review]
Bug 11897: DO NOT PUSH: Add stock rotation schema files.

* Koha/Schema/Result/Branch.pm: New file.
* Koha/Schema/Result/Item.pm: New file.
* Koha/Schema/Result/Stockrotationitem.pm: New file.
* Koha/Schema/Result/Stockrotationrota.pm: New file.
* Koha/Schema/Result/Stockrotationstage.pm: New file.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 312 Tomás Cohen Arazi 2018-10-04 19:59:31 UTC
Created attachment 79966 [details] [review]
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.

* Koha/Schema/Result/Stockrotationstage.pm: Load `Ordered`, add
  grouping_column.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 313 Tomás Cohen Arazi 2018-10-04 19:59:40 UTC
Created attachment 79967 [details] [review]
Bug 11897: Add Boolean handling to dbic classes.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 314 Tomás Cohen Arazi 2018-10-04 19:59:52 UTC
Created attachment 79968 [details] [review]
Bug 11897: Stockrotation

The stock rotation feature adds a batch process to automate rotation of
catalgue items with a staff client page under tools to manage rotas/schedules.

Once a rota is configured, and your staff user has the right permissions
to allocate items, then an additional tab will appear on biblio records
allowing the management of of which rota, if any, individual items belong to.

It also includes a cron script to process the items on a daily basis.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Edit: I removed a temporary file
Comment 315 Tomás Cohen Arazi 2018-10-04 20:00:03 UTC
Created attachment 79969 [details] [review]
Bug 11897: (QA follow-up) Remove rebase leftover

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 316 Tomás Cohen Arazi 2018-10-04 20:00:13 UTC
Created attachment 79970 [details] [review]
Bug 11897: (QA follow-up) Fix tests

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 317 Tomás Cohen Arazi 2018-10-04 20:00:28 UTC
Created attachment 79971 [details] [review]
Bug 11897: Remove warnings

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 318 Tomás Cohen Arazi 2018-10-04 20:00:37 UTC
Created attachment 79972 [details] [review]
Bug 11897: Use 'stockrotation' permission for the endpoint

This patch makes the tests for 'authorized' session use the
'stockrotation' permission instead of 'superlibrarian'.

The path x-koha-permission is fixed accordingly.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 319 Tomás Cohen Arazi 2018-10-04 20:00:47 UTC
Created attachment 79973 [details] [review]
Bug 11897: Add sample notices for all languages

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 320 Tomás Cohen Arazi 2018-10-04 20:00:57 UTC
Created attachment 79974 [details] [review]
Bug 11897: (QA follow-up) Template filter fixes

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 321 Tomás Cohen Arazi 2018-10-04 20:02:08 UTC
I'm testing it. Will continue tomorrow. I introduced a problem in one template.
Comment 322 Tomás Cohen Arazi 2018-10-04 20:05:04 UTC
Created attachment 79975 [details] [review]
Bug 11897: (QA follow-up) Template filter fixes

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 323 Tomás Cohen Arazi 2018-10-05 12:46:06 UTC
Created attachment 80068 [details] [review]
Bug 11897: 'superlibrarian' has 'stockrotation' perms

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 324 Martin Renvoize 2018-10-05 14:10:48 UTC
Created attachment 80087 [details] [review]
Bug 11897: Add Stock Rotation atomic update schema.

* installer/data/mysql/atomicupdate/stockrot_tables.sql: New file.
* installer/data/mysql/kohastructure.sql (stockrotationrotas)
  (stockrotationstages, stockrotationitems): New tables.
* installer/data/mysql/sysprefs.sql: Add Stockrotation sysprefs.
* installer/data/mysql/userflags.sql: Add Stockrotaiton userflag.
* installer/data/mysql/userpermissions.sql: Add Stockrotation
  userpermissions.
* koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref:
  Add Stockrotation menu.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 325 Martin Renvoize 2018-10-05 14:10:56 UTC
Created attachment 80088 [details] [review]
Bug 11897: DO NOT PUSH: Add stock rotation schema files.

* Koha/Schema/Result/Branch.pm: New file.
* Koha/Schema/Result/Item.pm: New file.
* Koha/Schema/Result/Stockrotationitem.pm: New file.
* Koha/Schema/Result/Stockrotationrota.pm: New file.
* Koha/Schema/Result/Stockrotationstage.pm: New file.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 326 Martin Renvoize 2018-10-05 14:11:04 UTC
Created attachment 80089 [details] [review]
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.

* Koha/Schema/Result/Stockrotationstage.pm: Load `Ordered`, add
  grouping_column.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 327 Martin Renvoize 2018-10-05 14:11:12 UTC
Created attachment 80090 [details] [review]
Bug 11897: Add Boolean handling to dbic classes.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 328 Martin Renvoize 2018-10-05 14:11:22 UTC
Created attachment 80091 [details] [review]
Bug 11897: Stockrotation

The stock rotation feature adds a batch process to automate rotation of
catalgue items with a staff client page under tools to manage rotas/schedules.

Once a rota is configured, and your staff user has the right permissions
to allocate items, then an additional tab will appear on biblio records
allowing the management of of which rota, if any, individual items belong to.

It also includes a cron script to process the items on a daily basis.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Edit: I removed a temporary file
Comment 329 Martin Renvoize 2018-10-05 14:11:30 UTC
Created attachment 80092 [details] [review]
Bug 11897: (QA follow-up) Remove rebase leftover

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 330 Martin Renvoize 2018-10-05 14:11:38 UTC
Created attachment 80093 [details] [review]
Bug 11897: (QA follow-up) Fix tests

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 331 Martin Renvoize 2018-10-05 14:11:48 UTC
Created attachment 80094 [details] [review]
Bug 11897: Use 'stockrotation' permission for the endpoint

This patch makes the tests for 'authorized' session use the
'stockrotation' permission instead of 'superlibrarian'.

The path x-koha-permission is fixed accordingly.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 332 Martin Renvoize 2018-10-05 14:11:56 UTC
Created attachment 80095 [details] [review]
Bug 11897: Add sample notices for all languages

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 333 Martin Renvoize 2018-10-05 14:12:04 UTC
Created attachment 80096 [details] [review]
Bug 11897: (QA follow-up) Template filter fixes

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 334 Martin Renvoize 2018-10-05 14:12:12 UTC
Created attachment 80097 [details] [review]
Bug 11897: 'superlibrarian' has 'stockrotation' perms

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 335 Martin Renvoize 2018-10-05 14:12:20 UTC
Created attachment 80098 [details] [review]
Bug 11897: (QA follow-up) Fixes for JS12

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 336 Martin Renvoize 2018-10-05 14:12:29 UTC
Created attachment 80099 [details] [review]
Bug 11897: (QA follow-up) Update of tools-menu.js

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 337 Martin Renvoize 2018-10-05 14:16:47 UTC
Created attachment 80100 [details] [review]
Bug 11897: (QA follow-up) Move menu to 'Catalog'

Originally this menu item was placed under the 'Patrons' section of the
tools page, this patch moves it to the more appropriate 'Catalog'
section.
Comment 338 Tomás Cohen Arazi 2018-10-05 14:35:14 UTC
Created attachment 80118 [details] [review]
Bug 11897: Translatability and wrong escaping fix

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 339 Lisette Scheer 2018-10-05 15:10:37 UTC
Is this stock rotation going to work like the current rotating collections where you have to have AutomaticItemReturn syspref set to off? 
We are a 7 district library within a larger consortium and we have the pref set to on so everyone gets their items back after return. As a district we do a lot of rotation (DVD, Audiobook, New Books, larger scale collection rotations to keep things fresh) and would be very interested in being able to automate it some with this. 
Thanks!
Lisette
Comment 340 Kyle M Hall 2018-10-05 15:14:30 UTC
*** Bug 12807 has been marked as a duplicate of this bug. ***
Comment 341 Martin Renvoize 2018-10-05 15:18:01 UTC
I believe it should, in fact, work at it's best with AutomaticItemReturn set to 'On'.

There is nothing here that explicitly takes AutomaticItemReturn into account. What this code does is it changes the 'home' library of the item in question after a given duration of it residing at that home library.

Upon reaching the target length of time at the branch, the home location of the item will be updated and a transfer will be triggered to move the item from it's prior location to the new home location.

It's also specifically designed to work at the item level and not as a collection. Thus, items can be 'put on rotation' at any time and at any location and start rotating by themselves.
Comment 342 Tomás Cohen Arazi 2018-10-05 16:02:05 UTC
The feature works as described. There are some warnings on the cronjob that can be dealt with on a separate report.

Good job!
Comment 343 Nick Clemens 2018-10-09 13:22:26 UTC
Minor conflict, please clear and convert atomic update to perl (as in skeleton.pl) and make sure to use TableExists and ensure update is idempotent
Comment 344 Martin Renvoize 2018-10-09 14:11:31 UTC
Created attachment 80260 [details] [review]
Bug 11897: Add Stock Rotation atomic update schema.

* installer/data/mysql/atomicupdate/stockrot_tables.sql: New file.
* installer/data/mysql/kohastructure.sql (stockrotationrotas)
  (stockrotationstages, stockrotationitems): New tables.
* installer/data/mysql/sysprefs.sql: Add Stockrotation sysprefs.
* installer/data/mysql/userflags.sql: Add Stockrotaiton userflag.
* installer/data/mysql/userpermissions.sql: Add Stockrotation
  userpermissions.
* koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref:
  Add Stockrotation menu.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 345 Martin Renvoize 2018-10-09 14:11:40 UTC
Created attachment 80261 [details] [review]
Bug 11897: DO NOT PUSH: Add stock rotation schema files.

* Koha/Schema/Result/Branch.pm: New file.
* Koha/Schema/Result/Item.pm: New file.
* Koha/Schema/Result/Stockrotationitem.pm: New file.
* Koha/Schema/Result/Stockrotationrota.pm: New file.
* Koha/Schema/Result/Stockrotationstage.pm: New file.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 346 Martin Renvoize 2018-10-09 14:11:49 UTC
Created attachment 80262 [details] [review]
Bug 11897: DBIX::Class::Ordered in Stockrotationstage.

* Koha/Schema/Result/Stockrotationstage.pm: Load `Ordered`, add
  grouping_column.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 347 Martin Renvoize 2018-10-09 14:11:59 UTC
Created attachment 80263 [details] [review]
Bug 11897: Add Boolean handling to dbic classes.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 348 Martin Renvoize 2018-10-09 14:12:10 UTC
Created attachment 80264 [details] [review]
Bug 11897: Stockrotation

The stock rotation feature adds a batch process to automate rotation of
catalgue items with a staff client page under tools to manage rotas/schedules.

Once a rota is configured, and your staff user has the right permissions
to allocate items, then an additional tab will appear on biblio records
allowing the management of of which rota, if any, individual items belong to.

It also includes a cron script to process the items on a daily basis.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Edit: I removed a temporary file
Comment 349 Martin Renvoize 2018-10-09 14:12:19 UTC
Created attachment 80265 [details] [review]
Bug 11897: (QA follow-up) Remove rebase leftover

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 350 Martin Renvoize 2018-10-09 14:12:29 UTC
Created attachment 80266 [details] [review]
Bug 11897: (QA follow-up) Fix tests

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 351 Martin Renvoize 2018-10-09 14:12:37 UTC
Created attachment 80267 [details] [review]
Bug 11897: Use 'stockrotation' permission for the endpoint

This patch makes the tests for 'authorized' session use the
'stockrotation' permission instead of 'superlibrarian'.

The path x-koha-permission is fixed accordingly.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 352 Martin Renvoize 2018-10-09 14:12:47 UTC
Created attachment 80268 [details] [review]
Bug 11897: Add sample notices for all languages

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 353 Martin Renvoize 2018-10-09 14:12:57 UTC
Created attachment 80269 [details] [review]
Bug 11897: (QA follow-up) Template filter fixes

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 354 Martin Renvoize 2018-10-09 14:13:05 UTC
Created attachment 80270 [details] [review]
Bug 11897: 'superlibrarian' has 'stockrotation' perms

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 355 Martin Renvoize 2018-10-09 14:13:16 UTC
Created attachment 80271 [details] [review]
Bug 11897: (QA follow-up) Fixes for JS12

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 356 Martin Renvoize 2018-10-09 14:13:25 UTC
Created attachment 80272 [details] [review]
Bug 11897: (QA follow-up) Update of tools-menu.js

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 357 Martin Renvoize 2018-10-09 14:13:34 UTC
Created attachment 80273 [details] [review]
Bug 11897: (QA follow-up) Move menu to 'Catalog'

Originally this menu item was placed under the 'Patrons' section of the
tools page, this patch moves it to the more appropriate 'Catalog'
section.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 358 Martin Renvoize 2018-10-09 14:13:43 UTC
Created attachment 80274 [details] [review]
Bug 11897: Translatability and wrong escaping fix

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Comment 359 Martin Renvoize 2018-10-09 14:13:52 UTC Comment hidden (obsolete)
Comment 360 Tomás Cohen Arazi 2018-10-09 15:40:24 UTC
Created attachment 80289 [details] [review]
Bug 11897: (QA follow-up) Convert atomic update to perl

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Comment 361 Nick Clemens 2018-10-09 16:28:33 UTC
Awesome work all! (We miss you Alex!)

Pushed to master for 18.11
Comment 362 Jonathan Druart 2018-10-09 17:09:32 UTC
Created attachment 80298 [details] [review]
Bug 11897: (follow-up) Add Stock Rotation atomic update schema

Remove the duplicate entry for RoutingListAddReserves
I guess it has been caused by a bad merge resolution conflict
Comment 363 Jonathan Druart 2018-10-09 17:11:49 UTC
Created attachment 80299 [details] [review]
Bug 11897: Add mising semi-colon to userflags.sql
Comment 364 Jonathan Druart 2018-10-09 17:13:40 UTC
Created attachment 80300 [details] [review]
Bug 11897: Add mising semi-colon to user*.sql
Comment 365 Martin Renvoize 2018-10-15 13:55:16 UTC
New Feature, will not be backported to 18.05.x series.
Comment 366 Jonathan Druart 2018-10-22 18:48:47 UTC
% perl misc/cronjobs/stockrotation.pl --report=email --send-email --execute

ERROR PROCESSING TEMPLATE: file error - parse error - input text line 5: unexpected token (ne)
  [% IF item.reason ne 'in-demand' %] at misc/cronjobs/stockrotation.pl line 343.
Comment 367 Martin Renvoize 2018-10-24 10:26:56 UTC
Rather than adding a followup here, I've added one to bug 21620 to resolve this issue that got missed :(
Comment 368 Martin Renvoize 2018-10-25 08:17:10 UTC
See multiple dependant bugs for fixes.
Comment 369 Jonathan Druart 2018-10-25 12:39:32 UTC
Update DB is failing with strict_sql_modes ON:

DBD::mysql::db do failed: BLOB/TEXT column 'description' can't have a default value [for Statement "                                                                                                         [3/26]
          CREATE TABLE `stockrotationrotas` (
            `rota_id` int(11) auto_increment,         -- Stockrotation rota ID
            `title` varchar(100) NOT NULL,            -- Title for this rota
            `description` text NOT NULL default '',   -- Description for this rota
            `cyclical` tinyint(1) NOT NULL default 0, -- Should items on this rota keep cycling?
            `active` tinyint(1) NOT NULL default 0,   -- Is this rota currently active?
            PRIMARY KEY (`rota_id`),
            CONSTRAINT `stockrotationrotas_title`
            UNIQUE (`title`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
        "] at installer/data/mysql/updatedatabase.pl line 16568.
DBD::mysql::db do failed: Can't create table `koha_kohadev`.`stockrotationstages` (errno: 150 "Foreign key constraint is incorrectly formed") [for Statement "
          CREATE TABLE `stockrotationstages` (
              `stage_id` int(11) auto_increment,     -- Unique stage ID
              `position` int(11) NOT NULL,           -- The position of this stage within its rota
              `rota_id` int(11) NOT NULL,            -- The rota this stage belongs to
              `branchcode_id` varchar(10) NOT NULL,  -- Branch this stage relates to
              `duration` int(11) NOT NULL default 4, -- The number of days items shoud occupy this stage
              PRIMARY KEY (`stage_id`),
              CONSTRAINT `stockrotationstages_rifk`
                FOREIGN KEY (`rota_id`)
                REFERENCES `stockrotationrotas` (`rota_id`)
                ON UPDATE CASCADE ON DELETE CASCADE,
              CONSTRAINT `stockrotationstages_bifk`
                FOREIGN KEY (`branchcode_id`)
                REFERENCES `branches` (`branchcode`)
                ON UPDATE CASCADE ON DELETE CASCADE
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
        "] at installer/data/mysql/updatedatabase.pl line 16583.
DBD::mysql::db do failed: Can't create table `koha_kohadev`.`stockrotationitems` (errno: 150 "Foreign key constraint is incorrectly formed") [for Statement "
          CREATE TABLE `stockrotationitems` (
              `itemnumber_id` int(11) NOT NULL,         -- Itemnumber to link to a stage & rota
              `stage_id` int(11) NOT NULL,              -- stage ID to link the item to
              `indemand` tinyint(1) NOT NULL default 0, -- Should this item be skipped for rotation?
              `fresh` tinyint(1) NOT NULL default 0,    -- Flag showing item is only just added to rota
              PRIMARY KEY (itemnumber_id),
              CONSTRAINT `stockrotationitems_iifk`
                FOREIGN KEY (`itemnumber_id`)
                REFERENCES `items` (`itemnumber`)
                ON UPDATE CASCADE ON DELETE CASCADE,
              CONSTRAINT `stockrotationitems_sifk`
                FOREIGN KEY (`stage_id`)
                REFERENCES `stockrotationstages` (`stage_id`)
                ON UPDATE CASCADE ON DELETE CASCADE
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
        "] at installer/data/mysql/updatedatabase.pl line 16604.


It looks scary but seems easy to fix,
  `description` text NOT NULL default ''
should not have a default value.
Comment 370 Lisette Scheer 2019-02-19 21:05:49 UTC
It looks like this uses the branchtransfers column datearrived to check for duration. Does that mean if an item goes on hold to another branch and then is returned, the duration for that item is reset to be the the full duration again? 
Lisette
Comment 371 Martin Renvoize 2019-02-19 21:30:07 UTC
Must admit, my recollection of this code is somewhat vague... But, I believe the combination of home branch with the date fields prevents that particular issue. However, it would be nice to have a test to prove that hypothesis.. might be worth opening another bug for that?
Comment 372 Lisette Scheer 2019-02-19 22:11:31 UTC
(In reply to Martin Renvoize from comment #371)
> Must admit, my recollection of this code is somewhat vague... But, I believe
> the combination of home branch with the date fields prevents that particular
> issue. However, it would be nice to have a test to prove that hypothesis..
> might be worth opening another bug for that?

Martin, 
I have opened bug 22373 asking for a test to prove it. 
Lisette
Comment 373 Jonathan Druart 2019-02-26 15:24:22 UTC
CREATE TABLE statements do not follow the usual pattern:

  CREATE TABLE IF NOT EXISTS stockrotationitems
vs
 DROP TABLE IF EXISTS `circulation_rules`;
 CREATE TABLE `circulation_rules` (
Comment 374 Jonathan Druart 2019-05-13 01:07:39 UTC
(In reply to Jonathan Druart from comment #373)
> CREATE TABLE statements do not follow the usual pattern:
> 
>   CREATE TABLE IF NOT EXISTS stockrotationitems
> vs
>  DROP TABLE IF EXISTS `circulation_rules`;
>  CREATE TABLE `circulation_rules` (

Has been fixed on bug 22634.
Comment 375 Jonathan Druart 2019-05-13 01:08:42 UTC
(In reply to Jonathan Druart from comment #369)
> Update DB is failing with strict_sql_modes ON:
[...]
> It looks scary but seems easy to fix,
>   `description` text NOT NULL default ''
> should not have a default value.

Has been fixed on bug 21682.