aa-buybackprogram 2.3.4__tar.gz → 3.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/PKG-INFO +136 -5
  2. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/README.md +132 -1
  3. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/__init__.py +1 -1
  4. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/admin.py +7 -1
  5. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/app_settings.py +20 -0
  6. aa_buybackprogram-3.0.0/buybackprogram/auth_hooks.py +83 -0
  7. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/constants.py +1 -0
  8. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/forms.py +136 -4
  9. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/helpers.py +212 -9
  10. aa_buybackprogram-3.0.0/buybackprogram/migrations/0018_structurenamecache_alter_general_options_and_more.py +566 -0
  11. aa_buybackprogram-3.0.0/buybackprogram/models.py +2656 -0
  12. aa_buybackprogram-3.0.0/buybackprogram/notes.py +218 -0
  13. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/notification.py +39 -0
  14. aa_buybackprogram-3.0.0/buybackprogram/providers.py +11 -0
  15. aa_buybackprogram-3.0.0/buybackprogram/static/buybackprogram/css/style_dark.css +915 -0
  16. aa_buybackprogram-3.0.0/buybackprogram/static/buybackprogram/css/style_light.css +865 -0
  17. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/static/buybackprogram/js/autocomplete.js +6 -0
  18. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/tasks.py +178 -22
  19. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/base.html +38 -0
  20. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/bundles/buybackprogram-css-light.html +6 -0
  21. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/contract_details.html +150 -0
  22. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/faq.html +1 -1
  23. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/index.html +168 -0
  24. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/leaderboards.html +119 -0
  25. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/location_add.html +2 -2
  26. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/page.html +1 -1
  27. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/base/menu-management.html +37 -0
  28. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/base/menu-reverse-management.html +27 -0
  29. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/base/menu-reverse.html +53 -0
  30. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/base/menu.html +92 -0
  31. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/calculate/calculation_success.html +32 -0
  32. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/calculate/contract_settings.html +31 -0
  33. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/calculate/invoice.html +50 -0
  34. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/details/contract-info.html +4 -0
  35. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/details/tabs/tabs-navigation.html +21 -0
  36. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/stats/tabs/finished.html +50 -0
  37. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/stats/tabs/outstanding.html +50 -0
  38. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/stats/tabs/untracked.html +48 -0
  39. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/partials/stats/tabs/wallet_overview.html +36 -0
  40. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/performance.html +248 -0
  41. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/program_add.html +59 -0
  42. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/program_calculate.html +91 -0
  43. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/program_edit.html +65 -0
  44. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/program_edit_item.html +43 -0
  45. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/program_edit_marketgroup.html +43 -0
  46. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/program_edit_static_price.html +43 -0
  47. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/program_edit_watchlist.html +46 -0
  48. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/program_special_taxes.html +205 -0
  49. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/reverse_program/reverse_calculate.html +424 -0
  50. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/reverse_program/reverse_contract_details.html +138 -0
  51. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/reverse_program/reverse_index.html +152 -0
  52. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/reverse_program/reverse_program_add.html +59 -0
  53. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/reverse_program/reverse_program_edit.html +64 -0
  54. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/reverse_program/reverse_program_stats.html +171 -0
  55. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/reverse_program/reverse_stats.html +167 -0
  56. aa_buybackprogram-3.0.0/buybackprogram/templates/buybackprogram/stats.html +88 -0
  57. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/user_settings.html +2 -2
  58. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templatetags/program_settings.py +78 -0
  59. aa_buybackprogram-3.0.0/buybackprogram/tests/test_data_migrations.log +2 -0
  60. aa_buybackprogram-3.0.0/buybackprogram/tests/test_helpers.py +68 -0
  61. aa_buybackprogram-3.0.0/buybackprogram/tests/test_models.py +492 -0
  62. aa_buybackprogram-3.0.0/buybackprogram/tests/test_reverse_buyback.py +501 -0
  63. aa_buybackprogram-3.0.0/buybackprogram/tests/test_reverse_contract_notifications.py +474 -0
  64. aa_buybackprogram-3.0.0/buybackprogram/tests/test_views.py +330 -0
  65. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/tests/testdata/factories.py +131 -12
  66. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/urls.py +80 -0
  67. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/utils.py +21 -0
  68. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/views/calculate.py +232 -8
  69. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/views/common.py +80 -41
  70. aa_buybackprogram-3.0.0/buybackprogram/views/programs.py +591 -0
  71. aa_buybackprogram-3.0.0/buybackprogram/views/special_taxes.py +372 -0
  72. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/views/stats.py +306 -14
  73. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/pyproject.toml +3 -3
  74. aa_buybackprogram-2.3.4/buybackprogram/auth_hooks.py +0 -35
  75. aa_buybackprogram-2.3.4/buybackprogram/models.py +0 -1450
  76. aa_buybackprogram-2.3.4/buybackprogram/notes.py +0 -215
  77. aa_buybackprogram-2.3.4/buybackprogram/providers.py +0 -16
  78. aa_buybackprogram-2.3.4/buybackprogram/static/buybackprogram/css/style_dark.css +0 -623
  79. aa_buybackprogram-2.3.4/buybackprogram/static/buybackprogram/css/style_light.css +0 -628
  80. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/base.html +0 -28
  81. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/bundles/buybackprogram-css-light.html +0 -2
  82. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/contract_details.html +0 -76
  83. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/index.html +0 -91
  84. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/leaderboards.html +0 -93
  85. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/base/menu-management.html +0 -19
  86. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/base/menu.html +0 -44
  87. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/calculate/calculation_success.html +0 -2
  88. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/calculate/contract_settings.html +0 -40
  89. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/calculate/invoice.html +0 -43
  90. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/details/tabs/tabs-navigation.html +0 -30
  91. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/stats/tabs/finished.html +0 -53
  92. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/stats/tabs/outstanding.html +0 -53
  93. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/partials/stats/tabs/untracked.html +0 -55
  94. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/performance.html +0 -293
  95. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/program_add.html +0 -27
  96. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/program_calculate.html +0 -94
  97. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/program_edit.html +0 -33
  98. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/program_edit_item.html +0 -35
  99. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/program_edit_marketgroup.html +0 -35
  100. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/program_special_taxes.html +0 -65
  101. aa_buybackprogram-2.3.4/buybackprogram/templates/buybackprogram/stats.html +0 -52
  102. aa_buybackprogram-2.3.4/buybackprogram/tests/test_helpers.py +0 -31
  103. aa_buybackprogram-2.3.4/buybackprogram/tests/test_models.py +0 -340
  104. aa_buybackprogram-2.3.4/buybackprogram/views/programs.py +0 -281
  105. aa_buybackprogram-2.3.4/buybackprogram/views/special_taxes.py +0 -213
  106. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/LICENSE +0 -0
  107. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/apps.py +0 -0
  108. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/decorators.py +0 -0
  109. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/management/__init__.py +0 -0
  110. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/management/commands/__init__.py +0 -0
  111. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/management/commands/buybackprogram_generate_test_data.py +0 -0
  112. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/management/commands/buybackprogram_link_contracts.py +0 -0
  113. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/management/commands/buybackprogram_load_data.py +0 -0
  114. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/management/commands/buybackprogram_load_prices.py +0 -0
  115. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/management/commands/generate_dummy_data.py +0 -0
  116. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0001_initial.py +0 -0
  117. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0002_contractnotification.py +0 -0
  118. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0003_statics_performance_increase.py +0 -0
  119. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0004_auto_20220323_1331.py +0 -0
  120. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0005_program_compression_price_dencity_modifier.py +0 -0
  121. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0006_program_bonds_npc_price_and_more.py +0 -0
  122. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0007_program_expiration.py +0 -0
  123. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0008_alter_general_options_alter_program_refining_rate.py +0 -0
  124. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0009_contract_location_name.py +0 -0
  125. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0010_contract_no_tracking_alter_tracking_tracking_number.py +0 -0
  126. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0011_delete_duplicated_contracts.py +0 -0
  127. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0012_make_contract_id_unique.py +0 -0
  128. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0013_program_discord_show_item_list.py +0 -0
  129. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0014_program_price_type.py +0 -0
  130. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0015_faq_contractnotification_header_and_more.py +0 -0
  131. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0016_alter_program_compression_price_dencity_modifier.py +0 -0
  132. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/0017_alter_contract_price_alter_contract_volume_and_more.py +0 -0
  133. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/migrations/__init__.py +0 -0
  134. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/static/buybackprogram/css/billboards_dark.css +0 -0
  135. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/static/buybackprogram/css/billboards_light.css +0 -0
  136. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/static/buybackprogram/images/help.png +0 -0
  137. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/static/buybackprogram/js/bootstrap-autocomplete.min.js +0 -0
  138. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/swagger.json +0 -0
  139. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/calculate/accepted_locations.html +0 -0
  140. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/calculate/item_details.html +0 -0
  141. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/details/accepted-locations.html +0 -0
  142. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/details/invoice.html +0 -0
  143. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/details/tabs/contract-items.html +0 -0
  144. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/details/tabs/original-items.html +0 -0
  145. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/details/warning.html +0 -0
  146. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/stats/summary.html +0 -0
  147. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/stats/tabs/tabs-navigation.html +0 -0
  148. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templates/buybackprogram/partials/stats/warning.html +0 -0
  149. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templatetags/__init__.py +0 -0
  150. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templatetags/bs_tab_color_class.py +0 -0
  151. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templatetags/help_icons.py +0 -0
  152. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/templatetags/price_formats.py +0 -0
  153. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/tests/__init__.py +0 -0
  154. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/tests/test_data_migrations.py +0 -0
  155. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/tests/testdata/__init__.py +0 -0
  156. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/tests/testdata/create_eveuniverse.py +0 -0
  157. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/tests/testdata/eveuniverse.json +0 -0
  158. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/tests/testdata/load_eveuniverse.py +0 -0
  159. {aa_buybackprogram-2.3.4 → aa_buybackprogram-3.0.0}/buybackprogram/views/__init__.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aa-buybackprogram
3
- Version: 2.3.4
3
+ Version: 3.0.0
4
4
  Summary: Buyback program plugin app for Alliance Auth.
5
5
  Author-email: Ikarus Cesaille <contact@eve-linknet.com>
6
- Requires-Python: >=3.8
6
+ Requires-Python: >=3.10
7
7
  Description-Content-Type: text/markdown
8
8
  Classifier: Environment :: Web Environment
9
9
  Classifier: Framework :: Django
@@ -20,8 +20,8 @@ Classifier: Topic :: Internet :: WWW/HTTP
20
20
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
21
21
  License-File: LICENSE
22
22
  Requires-Dist: allianceauth-app-utils>=1.18.0
23
- Requires-Dist: allianceauth<5.0.0,>=4
24
- Requires-Dist: django-eveuniverse>=1.0.0
23
+ Requires-Dist: allianceauth>=4.6.0,<6.0.0
24
+ Requires-Dist: django-eveuniverse >= 2.0.0
25
25
  Project-URL: Homepage, https://gitlab.com/paulipa/allianceauth-buyback-program
26
26
 
27
27
  # Buyback Program
@@ -50,6 +50,7 @@ An Alliance Auth app for creating buyback programs and to allow users calculate
50
50
 
51
51
  ## Features
52
52
 
53
+ - Authenticated or Public access*
53
54
  - Multiple programs with their own settings
54
55
  - Multiple owners
55
56
  - Supports corporation and character owners
@@ -62,6 +63,9 @@ An Alliance Auth app for creating buyback programs and to allow users calculate
62
63
  - Hauling fuel cost
63
64
  - Dynamic low price density tax
64
65
  - NPC price for NPC buy orders
66
+ - Static prices per item
67
+ - Manual review watchlist for items or groups
68
+ - Use refined rate for meta 1-4 items
65
69
  - Best price variant for ore:
66
70
  - Supports raw, compressed, refined and any combination of the 3.
67
71
  - Will calculate price by the best available pricing method
@@ -95,6 +99,18 @@ An Alliance Auth app for creating buyback programs and to allow users calculate
95
99
  - Notifications for new contracts
96
100
  - For [aa-discordbot](https://github.com/pvyParts/allianceauth-discordbot)
97
101
  - For [discordproxy](https://gitlab.com/ErikKalkoken/discordproxy)
102
+ - Reverse buyback programs:
103
+ - Owner lists items available for purchase from their hangar
104
+ - Players submit buy requests and receive a tracking number
105
+ - Stock automatically synced from ESI corporation assets
106
+ - Supports public access without login
107
+ - Restrict visibility to groups and states (same as normal programs)
108
+ - Manager program statistics page showing all buy requests
109
+ - Individual contract detail pages with item comparison and notifications
110
+ - Security:
111
+ - Tracking detail pages restricted to issuer and managers by default
112
+ - Group and state visibility restrictions on all program types
113
+ - Ownership checks on all management actions
98
114
 
99
115
  ## Installation
100
116
 
@@ -119,6 +135,9 @@ Update the Eve Online API app used for authentication in your AA installation to
119
135
  - `esi-contracts.read_character_contracts.v1`
120
136
  - `esi-contracts.read_corporation_contracts.v1`
121
137
  - `esi-universe.read_structures.v1`
138
+ - `esi-wallet.read_corporation_wallets.v1`
139
+ - `esi-corporations.read_divisions.v1`
140
+ - `esi-assets.read_corporation_assets.v1`
122
141
 
123
142
  ### Step 4 - Data Preload
124
143
 
@@ -166,6 +185,17 @@ CELERYBEAT_SCHEDULE['buybackprogram_update_program_performance'] = {
166
185
  'task': 'buybackprogram.tasks.update_program_performance',
167
186
  'schedule': crontab(minute=0, hour='0'),
168
187
  }
188
+
189
+ # Buybackprogram wallet sync, updates wallet balances and names every hour
190
+ CELERYBEAT_SCHEDULE['buybackprogram_update_all_wallets'] = {
191
+ 'task': 'buybackprogram.update_all_wallets',
192
+ 'schedule': crontab(minute=0),
193
+ }
194
+ # Buybackprogram hangar stock sync, updates reverse buyback stock every 30 minutes
195
+ CELERYBEAT_SCHEDULE['buybackprogram_update_all_hangars'] = {
196
+ 'task': 'buybackprogram.tasks.update_all_hangars',
197
+ 'schedule': crontab(minute='*/30'),
198
+ }
169
199
  ```
170
200
 
171
201
  #### Additional settings
@@ -174,6 +204,9 @@ You may change the following settings by adding the lines in your `local.py` set
174
204
 
175
205
  Name | Description | Default | Options
176
206
  -- | -- | -- | --
207
+ BUYBACKPROGRAM_ENABLE_REVERSE_BUYBACK | Enable or disable the reverse buyback feature entirely. When disabled the menu item will not appear. | True | `True`, `False`
208
+ BUYBACKPROGRAM_DISALLOW_CONTRACTS_WITH_ANY_DISALLOWED_ITEMS | Prevents price calculations if there are any disallowed items in the parsed list | False | `True`, `False`
209
+ BUYBACKPROGRAM_SHOW_LOCATION_COUNT | How many locations we will show on buyback index page before we change it to a pop-up show all locations button | 4 | Integer
177
210
  BUYBACKPROGRAM_TRACKING_PREFILL | This is the prefill tag you will have on the tracking description for your contracts | aa-bbp. | Free text input
178
211
  BUYBACKPROGRAM_PRICE_SOURCE_ID | Station ID for fetching base prices. Supports IDs listed on [Fuzzwork API](https://market.fuzzwork.co.uk/api/). Does not work with Janice API!| 60003760 | See ID list
179
212
  BUYBACKPROGRAM_PRICE_SOURCE_NAME | Display name of your price source. Has no effect on the actual price fetch which uses the ID. | Jita | Free text input
@@ -183,6 +216,7 @@ BUYBACKPROGRAM_PRICE_INSTANT_PRICES | On default we use top 5% average prices. S
183
216
  BUYBACKPROGRAM_PRICE_JANICE_API_KEY | The API key to access Janice API. | `null` | `G9KwKq3465588VPd6747t95Zh94q3W2E`
184
217
  BUYBACKPROGRAM_UNUSED_TRACKING_PURGE_LIMIT | Time limit to remove unlinked tracking objects from the database. Set to 0 to never purge any tracking objects. | 48 | Any number in hours
185
218
  BUYBACKPROGRAM_TRACK_PREFILL_CONTRACTS | Determines if we will track and store contracts that starts with the prefill phrase but do not have any actual tracking hits in database | True | `True`, `False`
219
+ BUYBACKPROGRAM_RESTRICT_TRACKING_DETAILS | When True, only the contract issuer and managers can view tracking detail pages via direct URL. Set to False to allow any authenticated basic_access user to view any tracking detail. | False | `True`, `False`
186
220
 
187
221
  Note: If you change your price source for an old install you need to wait for the price update task to run or manually run it to update your current database prices.
188
222
 
@@ -199,6 +233,7 @@ manage_programs | Can create new locations and buyback programs and manage their
199
233
  see_leaderboard | Can see the leaderboard stats for the programs that are visible for the user | Member State
200
234
  see_performance | Can see the performance stats for the programs that are visible to the user | Member / Managers
201
235
  see_all_statics | Can see all statistics in all buyback programs | Leadership
236
+ manage_all_programs | Can manage any program | Leadership
202
237
 
203
238
  ### Step 7 - Program Setup
204
239
 
@@ -368,12 +403,39 @@ You can send notifications about new contracts directly into the discord channel
368
403
 
369
404
  > :information_source: Requires the [aa-discordbot plugin](https://github.com/pvyParts/allianceauth-discordbot) or [discordproxy app](https://gitlab.com/ErikKalkoken/discordproxy) to work
370
405
 
371
- ### Step 9 - Special Taxes
406
+ #### Program wallet
407
+ This wallet information will be displayed on the tracking page allowing you to see your selected wallet balance when checking on outstanding contracts.
408
+
409
+ #### Use reprocessed value for T1/Named (Meta 1-4)
410
+
411
+ You can value T1 (meta 1-4 items) with refined output instead of the actual item price.
412
+
413
+ #### T1 Material refining yeld
414
+
415
+ Similar to ore reprocessing yield you determine the T1 (meta 1-4) item refining yield. This only applies if the `Use reprocessed value for T1/Named (Meta 1-4)` option is selected.
416
+
417
+ #### Public Program
418
+
419
+ If you want to allow unauthenticated users (people without an Alliance Auth account) to view and use this buyback program, tick the **Public program** box.
420
+
421
+ Public programs will be visible on the buyback index page without login and can be used to calculate prices without authentication. A tracking number is still generated for public submissions so that contracts can be linked to the calculation — the issuer will simply show as an anonymous user in the statistics page.
422
+
423
+ > :warning: Public programs bypass all group and state restrictions. Any person with access to your Alliance Auth URL will be able to see and use the program. Do not use this together with group or state restrictions.
424
+
425
+ > :information_source: Enabling public programs requires a one-time server configuration by your Alliance Auth administrator. Add the following to your `local.py`:
426
+ > ```python
427
+ > APPS_WITH_PUBLIC_VIEWS = ["buybackprogram"]
428
+ > ```
429
+ > Without this setting, the public view will not be accessible even if the program is marked as public.
430
+
431
+ ### Step 9 - Special Prices
372
432
 
373
433
  You can modify individual item settings or allow items for a program that has set `allow all items = False` via the `special taxes` menu for each program.
374
434
 
375
435
  Set a item specific tax for each item. The tax wil be applied on top of the default tax for the program. You can also disallow an item from being accepted in the contract completely.
376
436
 
437
+ You can also set **static prices**. Items with static prices are absolute prices and have no taxes or price dencity costs added on them.
438
+
377
439
  > :information_source: The item specific tax can also be a negative value allowing you to decrease taxes on certain items.
378
440
 
379
441
  To adjust individual item taxes inside a program click on the `Special taxes` button next to your program.
@@ -394,6 +456,31 @@ Market group `Minerals` is the bottom market group that includes the standard mi
394
456
 
395
457
  Market group `Standard ores` is a parent category and there are no direct items under this category. However this category has child categories such as Veldspar, Jaspet, Scordite which each includes multiple variations of the ores. Adding the `Standard ores` category will add each ore type to the special tax section.
396
458
 
459
+ ### Step 10 - Manual Review Watchlist
460
+
461
+ To protect your buyback program from market manipulation or extremely low-velocity items (such as Officer Modules or rare Abyssal items), you can utilize the Manual Review Watchlist.
462
+
463
+ The Watchlist allows you to flag specific items or entire EVE Market Groups. When a user pastes an inventory containing a watchlisted item into the buyback calculator, the system will automatically:
464
+
465
+ 1. Display a purple `fa-search` warning icon next to the item on the user's appraisal result.
466
+ 2. Flag the generated tracking object.
467
+ 3. Automatically attach a "Suspicious Contract" warning to the manager's Dashboard for that specific contract, ensuring the item is manually reviewed before the contract is accepted.
468
+
469
+ #### Adding Watchlist Rules
470
+
471
+ To manage your watchlist, click the **Special Taxes** button next to your program, and scroll down to the **Manual Review Watchlist** section. Click **Add to Watchlist** to create a new rule.
472
+
473
+ You have two options when adding a rule:
474
+
475
+ * **Item Type:** Start typing to search for a specific EVE item (e.g., "Estamel's Modified Invulnerability Field"). Only that exact item will trigger the warning.
476
+ * **EVE Group:** Start typing to search for a broader EVE item group (e.g., "Officer Modules"). *Any* item that belongs to this group will trigger the warning.
477
+
478
+ > :information_source: **Note:** You can only specify *either* an Item Type *or* an EVE Group for a single rule. You cannot fill out both fields at the same time.
479
+
480
+ #### Deleting Watchlist Rules
481
+
482
+ To remove an item or group from the watchlist, simply click the **Delete** button next to the rule on the Special Taxes dashboard. The change takes effect immediately for all future calculations.
483
+
397
484
  #### Most Common Groups
398
485
 
399
486
  Name | Includes | Items
@@ -404,3 +491,47 @@ Ice Ores | Ores from ice mining | Blue Ice, Dark Glitter, Compressed Blue Ice ..
404
491
  Minerals | Contains materials for refining Standard Ore | Tritanium, Pyerite ....
405
492
  Salvage Materials | Salvage from loot | Armor Plates, Trigger Unit, Ancient Radar Decorrelator ...
406
493
 
494
+ ### Step 11 - Reverse Buyback Programs
495
+
496
+ Reverse buyback programs allow you to sell items from your corporation hangar directly to players. Players submit a buy request, receive a tracking number, and you create a contract to them with the requested items.
497
+
498
+ #### Creating a Reverse Program
499
+
500
+ Click **Reverse Buyback** in the navigation menu, then click **1. Create Reverse Program**.
501
+
502
+ #### Settings
503
+
504
+ ##### Name
505
+ A display name for the reverse program.
506
+
507
+ ##### Manager
508
+ The character or corporation used as the contract issuer.
509
+
510
+ ##### Is Corporation
511
+ If ticked, contracts will be issued from the manager's corporation.
512
+
513
+ ##### Location
514
+ The structure where stock is held and contracts will be created. The structure ID must be set on the location for hangar sync to work.
515
+
516
+ ##### Price Type
517
+ The base price type used to value items. Default: Sell.
518
+
519
+ ##### Sell Markup %
520
+ A markup percentage added on top of the base price.
521
+
522
+ ##### Expiration
523
+ Expiration time for contracts created by the owner.
524
+
525
+ ##### Public Program
526
+ If enabled, the program is visible and usable without login. Requires `APPS_WITH_PUBLIC_VIEWS = ["buybackprogram"]` in `local.py`.
527
+
528
+ #### Syncing Stock
529
+
530
+ Once your program is created, click **Refresh Stock** in the management menu to pull current hangar contents from ESI. Stock will also update automatically every 30 minutes if the celery beat task is configured.
531
+
532
+ > :information_source: Only items located at a structure with a configured Structure ID will be synced. Make sure your location has a structure ID set.
533
+
534
+ #### How it works for players
535
+
536
+ Players navigate to **Reverse Buyback**, click **Buy** on a program, paste a list of items they want, and submit. The calculator checks availability against current stock and generates a price and tracking number. The player then waits for the owner to create a contract to them using the tracking number as the contract title.
537
+
@@ -24,6 +24,7 @@ An Alliance Auth app for creating buyback programs and to allow users calculate
24
24
 
25
25
  ## Features
26
26
 
27
+ - Authenticated or Public access*
27
28
  - Multiple programs with their own settings
28
29
  - Multiple owners
29
30
  - Supports corporation and character owners
@@ -36,6 +37,9 @@ An Alliance Auth app for creating buyback programs and to allow users calculate
36
37
  - Hauling fuel cost
37
38
  - Dynamic low price density tax
38
39
  - NPC price for NPC buy orders
40
+ - Static prices per item
41
+ - Manual review watchlist for items or groups
42
+ - Use refined rate for meta 1-4 items
39
43
  - Best price variant for ore:
40
44
  - Supports raw, compressed, refined and any combination of the 3.
41
45
  - Will calculate price by the best available pricing method
@@ -69,6 +73,18 @@ An Alliance Auth app for creating buyback programs and to allow users calculate
69
73
  - Notifications for new contracts
70
74
  - For [aa-discordbot](https://github.com/pvyParts/allianceauth-discordbot)
71
75
  - For [discordproxy](https://gitlab.com/ErikKalkoken/discordproxy)
76
+ - Reverse buyback programs:
77
+ - Owner lists items available for purchase from their hangar
78
+ - Players submit buy requests and receive a tracking number
79
+ - Stock automatically synced from ESI corporation assets
80
+ - Supports public access without login
81
+ - Restrict visibility to groups and states (same as normal programs)
82
+ - Manager program statistics page showing all buy requests
83
+ - Individual contract detail pages with item comparison and notifications
84
+ - Security:
85
+ - Tracking detail pages restricted to issuer and managers by default
86
+ - Group and state visibility restrictions on all program types
87
+ - Ownership checks on all management actions
72
88
 
73
89
  ## Installation
74
90
 
@@ -93,6 +109,9 @@ Update the Eve Online API app used for authentication in your AA installation to
93
109
  - `esi-contracts.read_character_contracts.v1`
94
110
  - `esi-contracts.read_corporation_contracts.v1`
95
111
  - `esi-universe.read_structures.v1`
112
+ - `esi-wallet.read_corporation_wallets.v1`
113
+ - `esi-corporations.read_divisions.v1`
114
+ - `esi-assets.read_corporation_assets.v1`
96
115
 
97
116
  ### Step 4 - Data Preload
98
117
 
@@ -140,6 +159,17 @@ CELERYBEAT_SCHEDULE['buybackprogram_update_program_performance'] = {
140
159
  'task': 'buybackprogram.tasks.update_program_performance',
141
160
  'schedule': crontab(minute=0, hour='0'),
142
161
  }
162
+
163
+ # Buybackprogram wallet sync, updates wallet balances and names every hour
164
+ CELERYBEAT_SCHEDULE['buybackprogram_update_all_wallets'] = {
165
+ 'task': 'buybackprogram.update_all_wallets',
166
+ 'schedule': crontab(minute=0),
167
+ }
168
+ # Buybackprogram hangar stock sync, updates reverse buyback stock every 30 minutes
169
+ CELERYBEAT_SCHEDULE['buybackprogram_update_all_hangars'] = {
170
+ 'task': 'buybackprogram.tasks.update_all_hangars',
171
+ 'schedule': crontab(minute='*/30'),
172
+ }
143
173
  ```
144
174
 
145
175
  #### Additional settings
@@ -148,6 +178,9 @@ You may change the following settings by adding the lines in your `local.py` set
148
178
 
149
179
  Name | Description | Default | Options
150
180
  -- | -- | -- | --
181
+ BUYBACKPROGRAM_ENABLE_REVERSE_BUYBACK | Enable or disable the reverse buyback feature entirely. When disabled the menu item will not appear. | True | `True`, `False`
182
+ BUYBACKPROGRAM_DISALLOW_CONTRACTS_WITH_ANY_DISALLOWED_ITEMS | Prevents price calculations if there are any disallowed items in the parsed list | False | `True`, `False`
183
+ BUYBACKPROGRAM_SHOW_LOCATION_COUNT | How many locations we will show on buyback index page before we change it to a pop-up show all locations button | 4 | Integer
151
184
  BUYBACKPROGRAM_TRACKING_PREFILL | This is the prefill tag you will have on the tracking description for your contracts | aa-bbp. | Free text input
152
185
  BUYBACKPROGRAM_PRICE_SOURCE_ID | Station ID for fetching base prices. Supports IDs listed on [Fuzzwork API](https://market.fuzzwork.co.uk/api/). Does not work with Janice API!| 60003760 | See ID list
153
186
  BUYBACKPROGRAM_PRICE_SOURCE_NAME | Display name of your price source. Has no effect on the actual price fetch which uses the ID. | Jita | Free text input
@@ -157,6 +190,7 @@ BUYBACKPROGRAM_PRICE_INSTANT_PRICES | On default we use top 5% average prices. S
157
190
  BUYBACKPROGRAM_PRICE_JANICE_API_KEY | The API key to access Janice API. | `null` | `G9KwKq3465588VPd6747t95Zh94q3W2E`
158
191
  BUYBACKPROGRAM_UNUSED_TRACKING_PURGE_LIMIT | Time limit to remove unlinked tracking objects from the database. Set to 0 to never purge any tracking objects. | 48 | Any number in hours
159
192
  BUYBACKPROGRAM_TRACK_PREFILL_CONTRACTS | Determines if we will track and store contracts that starts with the prefill phrase but do not have any actual tracking hits in database | True | `True`, `False`
193
+ BUYBACKPROGRAM_RESTRICT_TRACKING_DETAILS | When True, only the contract issuer and managers can view tracking detail pages via direct URL. Set to False to allow any authenticated basic_access user to view any tracking detail. | False | `True`, `False`
160
194
 
161
195
  Note: If you change your price source for an old install you need to wait for the price update task to run or manually run it to update your current database prices.
162
196
 
@@ -173,6 +207,7 @@ manage_programs | Can create new locations and buyback programs and manage their
173
207
  see_leaderboard | Can see the leaderboard stats for the programs that are visible for the user | Member State
174
208
  see_performance | Can see the performance stats for the programs that are visible to the user | Member / Managers
175
209
  see_all_statics | Can see all statistics in all buyback programs | Leadership
210
+ manage_all_programs | Can manage any program | Leadership
176
211
 
177
212
  ### Step 7 - Program Setup
178
213
 
@@ -342,12 +377,39 @@ You can send notifications about new contracts directly into the discord channel
342
377
 
343
378
  > :information_source: Requires the [aa-discordbot plugin](https://github.com/pvyParts/allianceauth-discordbot) or [discordproxy app](https://gitlab.com/ErikKalkoken/discordproxy) to work
344
379
 
345
- ### Step 9 - Special Taxes
380
+ #### Program wallet
381
+ This wallet information will be displayed on the tracking page allowing you to see your selected wallet balance when checking on outstanding contracts.
382
+
383
+ #### Use reprocessed value for T1/Named (Meta 1-4)
384
+
385
+ You can value T1 (meta 1-4 items) with refined output instead of the actual item price.
386
+
387
+ #### T1 Material refining yeld
388
+
389
+ Similar to ore reprocessing yield you determine the T1 (meta 1-4) item refining yield. This only applies if the `Use reprocessed value for T1/Named (Meta 1-4)` option is selected.
390
+
391
+ #### Public Program
392
+
393
+ If you want to allow unauthenticated users (people without an Alliance Auth account) to view and use this buyback program, tick the **Public program** box.
394
+
395
+ Public programs will be visible on the buyback index page without login and can be used to calculate prices without authentication. A tracking number is still generated for public submissions so that contracts can be linked to the calculation — the issuer will simply show as an anonymous user in the statistics page.
396
+
397
+ > :warning: Public programs bypass all group and state restrictions. Any person with access to your Alliance Auth URL will be able to see and use the program. Do not use this together with group or state restrictions.
398
+
399
+ > :information_source: Enabling public programs requires a one-time server configuration by your Alliance Auth administrator. Add the following to your `local.py`:
400
+ > ```python
401
+ > APPS_WITH_PUBLIC_VIEWS = ["buybackprogram"]
402
+ > ```
403
+ > Without this setting, the public view will not be accessible even if the program is marked as public.
404
+
405
+ ### Step 9 - Special Prices
346
406
 
347
407
  You can modify individual item settings or allow items for a program that has set `allow all items = False` via the `special taxes` menu for each program.
348
408
 
349
409
  Set a item specific tax for each item. The tax wil be applied on top of the default tax for the program. You can also disallow an item from being accepted in the contract completely.
350
410
 
411
+ You can also set **static prices**. Items with static prices are absolute prices and have no taxes or price dencity costs added on them.
412
+
351
413
  > :information_source: The item specific tax can also be a negative value allowing you to decrease taxes on certain items.
352
414
 
353
415
  To adjust individual item taxes inside a program click on the `Special taxes` button next to your program.
@@ -368,6 +430,31 @@ Market group `Minerals` is the bottom market group that includes the standard mi
368
430
 
369
431
  Market group `Standard ores` is a parent category and there are no direct items under this category. However this category has child categories such as Veldspar, Jaspet, Scordite which each includes multiple variations of the ores. Adding the `Standard ores` category will add each ore type to the special tax section.
370
432
 
433
+ ### Step 10 - Manual Review Watchlist
434
+
435
+ To protect your buyback program from market manipulation or extremely low-velocity items (such as Officer Modules or rare Abyssal items), you can utilize the Manual Review Watchlist.
436
+
437
+ The Watchlist allows you to flag specific items or entire EVE Market Groups. When a user pastes an inventory containing a watchlisted item into the buyback calculator, the system will automatically:
438
+
439
+ 1. Display a purple `fa-search` warning icon next to the item on the user's appraisal result.
440
+ 2. Flag the generated tracking object.
441
+ 3. Automatically attach a "Suspicious Contract" warning to the manager's Dashboard for that specific contract, ensuring the item is manually reviewed before the contract is accepted.
442
+
443
+ #### Adding Watchlist Rules
444
+
445
+ To manage your watchlist, click the **Special Taxes** button next to your program, and scroll down to the **Manual Review Watchlist** section. Click **Add to Watchlist** to create a new rule.
446
+
447
+ You have two options when adding a rule:
448
+
449
+ * **Item Type:** Start typing to search for a specific EVE item (e.g., "Estamel's Modified Invulnerability Field"). Only that exact item will trigger the warning.
450
+ * **EVE Group:** Start typing to search for a broader EVE item group (e.g., "Officer Modules"). *Any* item that belongs to this group will trigger the warning.
451
+
452
+ > :information_source: **Note:** You can only specify *either* an Item Type *or* an EVE Group for a single rule. You cannot fill out both fields at the same time.
453
+
454
+ #### Deleting Watchlist Rules
455
+
456
+ To remove an item or group from the watchlist, simply click the **Delete** button next to the rule on the Special Taxes dashboard. The change takes effect immediately for all future calculations.
457
+
371
458
  #### Most Common Groups
372
459
 
373
460
  Name | Includes | Items
@@ -377,3 +464,47 @@ Moon Ores | Ores from moon mining | Cobaltite, Loparite, Pollucite
377
464
  Ice Ores | Ores from ice mining | Blue Ice, Dark Glitter, Compressed Blue Ice ....
378
465
  Minerals | Contains materials for refining Standard Ore | Tritanium, Pyerite ....
379
466
  Salvage Materials | Salvage from loot | Armor Plates, Trigger Unit, Ancient Radar Decorrelator ...
467
+
468
+ ### Step 11 - Reverse Buyback Programs
469
+
470
+ Reverse buyback programs allow you to sell items from your corporation hangar directly to players. Players submit a buy request, receive a tracking number, and you create a contract to them with the requested items.
471
+
472
+ #### Creating a Reverse Program
473
+
474
+ Click **Reverse Buyback** in the navigation menu, then click **1. Create Reverse Program**.
475
+
476
+ #### Settings
477
+
478
+ ##### Name
479
+ A display name for the reverse program.
480
+
481
+ ##### Manager
482
+ The character or corporation used as the contract issuer.
483
+
484
+ ##### Is Corporation
485
+ If ticked, contracts will be issued from the manager's corporation.
486
+
487
+ ##### Location
488
+ The structure where stock is held and contracts will be created. The structure ID must be set on the location for hangar sync to work.
489
+
490
+ ##### Price Type
491
+ The base price type used to value items. Default: Sell.
492
+
493
+ ##### Sell Markup %
494
+ A markup percentage added on top of the base price.
495
+
496
+ ##### Expiration
497
+ Expiration time for contracts created by the owner.
498
+
499
+ ##### Public Program
500
+ If enabled, the program is visible and usable without login. Requires `APPS_WITH_PUBLIC_VIEWS = ["buybackprogram"]` in `local.py`.
501
+
502
+ #### Syncing Stock
503
+
504
+ Once your program is created, click **Refresh Stock** in the management menu to pull current hangar contents from ESI. Stock will also update automatically every 30 minutes if the celery beat task is configured.
505
+
506
+ > :information_source: Only items located at a structure with a configured Structure ID will be synced. Make sure your location has a structure ID set.
507
+
508
+ #### How it works for players
509
+
510
+ Players navigate to **Reverse Buyback**, click **Buy** on a program, paste a list of items they want, and submit. The calculator checks availability against current stock and generates a price and tracking number. The player then waits for the owner to create a contract to them using the tracking number as the contract title.
@@ -2,5 +2,5 @@
2
2
 
3
3
  default_app_config = "buybackprogram.apps.BuybackProgramConfig"
4
4
 
5
- __version__ = "2.3.4"
5
+ __version__ = "3.0.0"
6
6
  __title__ = "Buyback Program"
@@ -1,6 +1,6 @@
1
1
  from django.contrib import admin
2
2
 
3
- from .models import Contract, Faq, Location, Owner, Program
3
+ from .models import Contract, Faq, Location, Owner, Program, StaticItemPrice
4
4
 
5
5
  # Register your models here.
6
6
 
@@ -45,6 +45,12 @@ class FaqAdmin(admin.ModelAdmin):
45
45
  )
46
46
 
47
47
 
48
+ @admin.register(StaticItemPrice)
49
+ class StaticItemPriceAdmin(admin.ModelAdmin):
50
+ list_display = ("program", "eve_type", "price")
51
+ search_fields = ("program__name", "eve_type__name")
52
+
53
+
48
54
  admin.site.register(Program, ProgramAdmin)
49
55
 
50
56
  admin.site.register(Owner)
@@ -58,6 +58,26 @@ BUYBACKPROGRAM_PRICE_JANICE_API_KEY = clean_setting(
58
58
  "BUYBACKPROGRAM_PRICE_JANICE_API_KEY", ""
59
59
  )
60
60
 
61
+ BUYBACKPROGRAM_SHOW_LOCATION_COUNT = clean_setting(
62
+ "BUYBACKPROGRAM_SHOW_LOCATION_COUNT", 4
63
+ )
64
+
65
+ # Disallow the creation of tracking numbers if the pasted text contains ANY forbidden items
66
+ BUYBACKPROGRAM_DISALLOW_CONTRACTS_WITH_ANY_DISALLOWED_ITEMS = clean_setting(
67
+ "BUYBACKPROGRAM_DISALLOW_CONTRACTS_WITH_ANY_DISALLOWED_ITEMS", False
68
+ )
69
+
70
+ BUYBACKPROGRAM_ENABLE_REVERSE_BUYBACK = clean_setting(
71
+ "BUYBACKPROGRAM_ENABLE_REVERSE_BUYBACK", True
72
+ )
73
+
74
+ # When True (default), only the contract issuer and managers can view tracking
75
+ # detail pages. Set to False to allow any authenticated basic_access user to
76
+ # view any tracking detail by direct URL.
77
+ BUYBACKPROGRAM_RESTRICT_TRACKING_DETAILS = clean_setting(
78
+ "BUYBACKPROGRAM_RESTRICT_TRACKING_DETAILS", False
79
+ )
80
+
61
81
 
62
82
  def allianceauth_discordbot_active():
63
83
  """
@@ -0,0 +1,83 @@
1
+ from django.utils.translation import gettext_lazy as _
2
+
3
+ from allianceauth import hooks
4
+ from allianceauth.services.hooks import MenuItemHook, UrlHook
5
+
6
+ from . import urls
7
+ from .app_settings import BUYBACKPROGRAM_ENABLE_REVERSE_BUYBACK
8
+
9
+
10
+ class BuybackProgramMenuItem(MenuItemHook):
11
+ def __init__(self):
12
+ MenuItemHook.__init__(
13
+ self,
14
+ _("Buyback Program"),
15
+ "fa-solid fa-store",
16
+ "buybackprogram:index",
17
+ navactive=[
18
+ "buybackprogram:index",
19
+ "buybackprogram:faq",
20
+ "buybackprogram:setup",
21
+ "buybackprogram:my_stats",
22
+ "buybackprogram:contract_details",
23
+ "buybackprogram:program_",
24
+ "buybackprogram:location_",
25
+ "buybackprogram:remove_static_price",
26
+ "buybackprogram:remove_watchlist_item",
27
+ "buybackprogram:manual_contract_sync",
28
+ "buybackprogram:trigger_price_update",
29
+ "buybackprogram:user_settings_edit",
30
+ "buybackprogram:item_autocomplete",
31
+ "buybackprogram:solarsystem_autocomplete",
32
+ "buybackprogram:marketgroup_autocomplete",
33
+ "buybackprogram:wallet_autocomplete",
34
+ "buybackprogram:group_autocomplete",
35
+ ],
36
+ )
37
+
38
+ def render(self, request):
39
+ if request.user.has_perm("buybackprogram.basic_access"):
40
+ return MenuItemHook.render(self, request)
41
+ return ""
42
+
43
+
44
+ class ReverseBuybackMenuItem(MenuItemHook):
45
+ def __init__(self):
46
+ MenuItemHook.__init__(
47
+ self,
48
+ _("Reverse Buyback"),
49
+ "fa-solid fa-exchange-alt",
50
+ "buybackprogram:reverse_index",
51
+ navactive=["buybackprogram:reverse_"],
52
+ )
53
+
54
+ def render(self, request):
55
+ if request.user.has_perm("buybackprogram.basic_access"):
56
+ return MenuItemHook.render(self, request)
57
+ return ""
58
+
59
+
60
+ @hooks.register("menu_item_hook")
61
+ def register_menu():
62
+ return BuybackProgramMenuItem()
63
+
64
+
65
+ @hooks.register("menu_item_hook")
66
+ def register_reverse_menu():
67
+ if BUYBACKPROGRAM_ENABLE_REVERSE_BUYBACK:
68
+ return ReverseBuybackMenuItem()
69
+
70
+
71
+ @hooks.register("url_hook")
72
+ def register_urls():
73
+ return UrlHook(
74
+ urls,
75
+ "buybackprogram",
76
+ r"^buybackprogram/",
77
+ excluded_views=[
78
+ "buybackprogram.views.common.index",
79
+ "buybackprogram.views.calculate.program_calculate",
80
+ "buybackprogram.views.programs.reverse_index",
81
+ "buybackprogram.views.calculate.reverse_program_calculate",
82
+ ],
83
+ )
@@ -55,4 +55,5 @@ BLUE_LOOT_TYPE_IDS = [
55
55
  RED_LOOT_TYPE_IDS = [
56
56
  48121,
57
57
  60459,
58
+ 91773,
58
59
  ]