ob-dj-store 0.0.21__tar.gz → 0.0.21.2__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 (203) hide show
  1. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/PKG-INFO +1 -1
  2. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/stores/filters.py +12 -0
  3. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/stores/rest/serializers/serializers.py +38 -0
  4. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/stores/urls.py +2 -0
  5. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/stores/views.py +47 -6
  6. ob_dj_store-0.0.21.2/ob_dj_store/core/stores/migrations/0109_wallettransaction_cashback_type.py +27 -0
  7. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_product.py +13 -0
  8. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_wallet.py +8 -1
  9. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store.egg-info/PKG-INFO +1 -1
  10. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store.egg-info/SOURCES.txt +1 -0
  11. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/.github/dependabot.yml +0 -0
  12. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/.github/workflows/docs.yml +0 -0
  13. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/.github/workflows/pre-release.yml +0 -0
  14. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/.github/workflows/release.yml +0 -0
  15. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/.github/workflows/test-build.yml +0 -0
  16. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/.gitignore +0 -0
  17. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/.isort.cfg +0 -0
  18. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/.pre-commit-config.yaml +0 -0
  19. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/Dockerfile +0 -0
  20. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/MANIFEST.in +0 -0
  21. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/Makefile +0 -0
  22. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/Pipfile +0 -0
  23. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/Pipfile.lock +0 -0
  24. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/README.md +0 -0
  25. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/config/__init__.py +0 -0
  26. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/config/settings.py +0 -0
  27. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/config/urls.py +0 -0
  28. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/config/wsgi.py +0 -0
  29. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docker-compose.env +0 -0
  30. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docker-compose.yml +0 -0
  31. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docs/Makefile +0 -0
  32. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docs/make.bat +0 -0
  33. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docs/source/admin.rst +0 -0
  34. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docs/source/conf.py +0 -0
  35. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docs/source/index.rst +0 -0
  36. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docs/source/installation.rst +0 -0
  37. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docs/source/models.rst +0 -0
  38. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/docs/source/rest_endpoints.rst +0 -0
  39. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/fixtures/initial_users.yaml +0 -0
  40. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/fixtures/stores.yaml +0 -0
  41. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/manage.py +0 -0
  42. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/__init__.py +0 -0
  43. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/__init__.py +0 -0
  44. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/stores/__init__.py +0 -0
  45. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/tap/__init__.py +0 -0
  46. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/tap/serializers.py +0 -0
  47. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/tap/urls.py +0 -0
  48. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/apis/tap/views.py +0 -0
  49. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/__init__.py +0 -0
  50. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/__init__.py +0 -0
  51. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/admin.py +0 -0
  52. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/admin_inlines.py +0 -0
  53. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/apps.py +0 -0
  54. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/__init__.py +0 -0
  55. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/__init__.py +0 -0
  56. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/admin.py +0 -0
  57. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/apps.py +0 -0
  58. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/managers.py +0 -0
  59. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/0001_initial.py +0 -0
  60. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/0002_auto_20220815_1610.py +0 -0
  61. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/0003_auto_20220818_1938.py +0 -0
  62. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/0004_tapcustomer.py +0 -0
  63. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/0005_alter_tappayment_payment_url.py +0 -0
  64. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/0006_alter_tappayment_source.py +0 -0
  65. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/0007_alter_tappayment_source.py +0 -0
  66. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/0008_alter_tappayment_user.py +0 -0
  67. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/migrations/__init__.py +0 -0
  68. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/models.py +0 -0
  69. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/gateway/tap/utils.py +0 -0
  70. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/managers.py +0 -0
  71. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0001_initial.py +0 -0
  72. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0002_auto_20220422_0205.py +0 -0
  73. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0003_openinghours.py +0 -0
  74. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0004_auto_20220422_2326.py +0 -0
  75. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0005_auto_20220425_2119.py +0 -0
  76. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0005_auto_20220427_1729.py +0 -0
  77. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0006_auto_20220428_0100.py +0 -0
  78. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0007_cart_cartitem_order_orderitem.py +0 -0
  79. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0008_order_status.py +0 -0
  80. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0009_auto_20220508_2142.py +0 -0
  81. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0010_auto_20220509_1633.py +0 -0
  82. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0011_favorite.py +0 -0
  83. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0012_auto_20220514_0633.py +0 -0
  84. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0013_auto_20220518_1539.py +0 -0
  85. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0014_auto_20220519_0018.py +0 -0
  86. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0015_inventory_inventoryoperations.py +0 -0
  87. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0016_productvariant_preparation_time.py +0 -0
  88. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0017_auto_20220524_0912.py +0 -0
  89. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0018_auto_20220524_1613.py +0 -0
  90. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0019_product_is_featured.py +0 -0
  91. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0020_orderhistory.py +0 -0
  92. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0021_auto_20220531_1849.py +0 -0
  93. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0022_order_pickup_time.py +0 -0
  94. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0023_feedback_feedbackattribute_feedbackconfig.py +0 -0
  95. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0024_auto_20220609_1552.py +0 -0
  96. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0025_productvariant_is_primary.py +0 -0
  97. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0026_auto_20220630_1913.py +0 -0
  98. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0027_auto_20220713_1759.py +0 -0
  99. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0028_phonecontact.py +0 -0
  100. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0029_auto_20220726_1750.py +0 -0
  101. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0030_category_parent.py +0 -0
  102. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0031_auto_20220811_1733.py +0 -0
  103. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0032_auto_20220812_1951.py +0 -0
  104. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0033_auto_20220815_0133.py +0 -0
  105. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0034_auto_20220815_1528.py +0 -0
  106. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0035_auto_20220818_1938.py +0 -0
  107. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0036_productattribute_is_mandatory.py +0 -0
  108. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0037_auto_20220825_1736.py +0 -0
  109. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0038_cartitem_extra_infos.py +0 -0
  110. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0039_auto_20220831_1521.py +0 -0
  111. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0040_auto_20220902_1806.py +0 -0
  112. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0041_auto_20220912_1506.py +0 -0
  113. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0042_wallet_wallettransaction.py +0 -0
  114. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0043_auto_20220919_1854.py +0 -0
  115. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0044_remove_productvariant_has_inventory.py +0 -0
  116. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0045_shippingmethod_type.py +0 -0
  117. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0046_auto_20221014_1720.py +0 -0
  118. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0047_auto_20221018_1433.py +0 -0
  119. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0048_auto_20221026_1933.py +0 -0
  120. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0049_auto_20221029_1524.py +0 -0
  121. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0050_favoriteextra.py +0 -0
  122. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0051_order_car_id.py +0 -0
  123. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0052_auto_20221129_1732.py +0 -0
  124. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0053_inventory_plu.py +0 -0
  125. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0054_auto_20221230_1501.py +0 -0
  126. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0055_store_image.py +0 -0
  127. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0056_auto_20230213_2224.py +0 -0
  128. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0057_auto_20230214_1724.py +0 -0
  129. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0058_attributechoice_is_default.py +0 -0
  130. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0059_auto_20230217_2006.py +0 -0
  131. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0060_alter_orderitem_product_variant.py +0 -0
  132. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0061_auto_20230223_1435.py +0 -0
  133. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0062_auto_20230226_2005.py +0 -0
  134. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0063_alter_store_payment_methods.py +0 -0
  135. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0064_auto_20230228_1814.py +0 -0
  136. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0065_auto_20230228_1932.py +0 -0
  137. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0066_auto_20230304_1532.py +0 -0
  138. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0067_auto_20230309_2014.py +0 -0
  139. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0068_auto_20230309_2251.py +0 -0
  140. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0069_alter_cartitem_options.py +0 -0
  141. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0070_auto_20230323_1628.py +0 -0
  142. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0071_auto_20230328_1825.py +0 -0
  143. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0072_alter_order_extra_infos.py +0 -0
  144. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0073_wallettransaction_is_cashback.py +0 -0
  145. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0074_productvariant_label.py +0 -0
  146. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0075_auto_20230419_0259.py +0 -0
  147. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0076_auto_20230421_1343.py +0 -0
  148. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0077_auto_20230502_2005.py +0 -0
  149. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0078_auto_20230503_1259.py +0 -0
  150. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0079_auto_20230504_1919.py +0 -0
  151. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0080_productvariant_description.py +0 -0
  152. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0081_storeattributechoice.py +0 -0
  153. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0082_auto_20230613_1424.py +0 -0
  154. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0083_productvariant_is_special.py +0 -0
  155. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0084_payment_result.py +0 -0
  156. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0085_auto_20230726_1528.py +0 -0
  157. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0086_wallet_is_active.py +0 -0
  158. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0087_auto_20230828_2138.py +0 -0
  159. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0088_alter_paymentmethod_payment_provider.py +0 -0
  160. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0089_discount_partner_partnerauthinfo_partneremaildomain_partnerotpauth.py +0 -0
  161. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0090_auto_20231006_1356.py +0 -0
  162. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0091_auto_20231010_1740.py +0 -0
  163. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0092_auto_20231012_1339.py +0 -0
  164. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0093_auto_20231017_2033.py +0 -0
  165. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0094_countrypaymentmethod.py +0 -0
  166. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0095_auto_20231101_1531.py +0 -0
  167. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0096_discount_discount_pos_id.py +0 -0
  168. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0097_auto_20231108_1939.py +0 -0
  169. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0098_alter_discount_discount_rate.py +0 -0
  170. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0099_alter_product_name_arabic.py +0 -0
  171. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0100_remove_shippingmethod_type_arabic.py +0 -0
  172. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0101_store_is_digital.py +0 -0
  173. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0102_partner_name_arabic.py +0 -0
  174. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0103_alter_paymentmethod_payment_provider.py +0 -0
  175. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0104_wallettransaction_is_redeemed.py +0 -0
  176. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0105_store_is_open_after_midnight.py +0 -0
  177. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0106_alter_paymentmethod_payment_provider.py +0 -0
  178. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0107_auto_20250425_2059.py +0 -0
  179. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/0108_alter_paymentmethod_payment_provider.py +0 -0
  180. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/migrations/__init__.py +0 -0
  181. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/__init__.py +0 -0
  182. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_address.py +0 -0
  183. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_cart.py +0 -0
  184. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_favorite.py +0 -0
  185. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_feedback.py +0 -0
  186. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_inventory.py +0 -0
  187. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_order.py +0 -0
  188. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_partner.py +0 -0
  189. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_payment.py +0 -0
  190. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/models/_store.py +0 -0
  191. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/receivers.py +0 -0
  192. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/settings_validation.py +0 -0
  193. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/core/stores/utils.py +0 -0
  194. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/utils/__init__.py +0 -0
  195. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/utils/helpers.py +0 -0
  196. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/utils/model.py +0 -0
  197. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store/utils/utils.py +0 -0
  198. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store.egg-info/dependency_links.txt +0 -0
  199. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store.egg-info/requires.txt +0 -0
  200. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/ob_dj_store.egg-info/top_level.txt +0 -0
  201. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/pytest.ini +0 -0
  202. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/setup.cfg +0 -0
  203. {ob_dj_store-0.0.21 → ob_dj_store-0.0.21.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ob-dj-store
3
- Version: 0.0.21
3
+ Version: 0.0.21.2
4
4
  Summary: OBytes django application for managing ecommerce stores.
5
5
  Home-page: https://www.obytes.com/
6
6
  Author: OBytes
@@ -87,6 +87,7 @@ class ProductFilter(filters.FilterSet):
87
87
  """Product filters"""
88
88
 
89
89
  category = filters.CharFilter(method="by_category")
90
+ q = filters.CharFilter(method="filter_search")
90
91
 
91
92
  class Meta:
92
93
  model = Product
@@ -99,6 +100,17 @@ class ProductFilter(filters.FilterSet):
99
100
  def by_category(self, queryset, name, value):
100
101
  return queryset.filter(category__name__iexact=value)
101
102
 
103
+ def filter_search(self, queryset, name, value):
104
+ language = self.request.META.get("HTTP_LANGUAGE", "").strip().upper()
105
+ if language == "AR":
106
+ query = Q(name_arabic__icontains=value) | Q(
107
+ description_arabic__icontains=value
108
+ )
109
+ else:
110
+ query = Q(name__icontains=value) | Q(description__icontains=value)
111
+ qs = queryset.filter(query).distinct()[:5]
112
+ return qs
113
+
102
114
 
103
115
  class VariantFilter(filters.FilterSet):
104
116
  """Variant filters"""
@@ -947,6 +947,44 @@ class ProductSerializer(ArabicFieldsMixin, FavoriteMixin, serializers.ModelSeria
947
947
  return data
948
948
 
949
949
 
950
+ class ProductSearchSerializer(
951
+ ArabicFieldsMixin, FavoriteMixin, serializers.ModelSerializer
952
+ ):
953
+ is_snoozed = serializers.SerializerMethodField()
954
+ is_available = serializers.SerializerMethodField()
955
+
956
+ class Meta:
957
+ model = Product
958
+ fields = (
959
+ "id",
960
+ "name",
961
+ "name_arabic",
962
+ "slug",
963
+ "description",
964
+ "description_arabic",
965
+ "is_snoozed",
966
+ "is_available",
967
+ )
968
+
969
+ def get_store_id(self):
970
+ return self.context["request"].query_params.get("store")
971
+
972
+ def get_inventory_for_store(self, store_id):
973
+ if hasattr(self, "get_inventory"):
974
+ return self.get_inventory(store_id)
975
+ return None
976
+
977
+ def get_is_snoozed(self, obj):
978
+ store_id = self.get_store_id()
979
+ inventory = self.get_inventory_for_store(store_id)
980
+ return obj.is_snoozed(store_id=store_id) if inventory else False
981
+
982
+ def get_is_available(self, obj):
983
+ store_id = self.get_store_id()
984
+ inventory = self.get_inventory_for_store(store_id)
985
+ return bool(inventory and inventory.quantity)
986
+
987
+
950
988
  class ProductListSerializer(ArabicFieldsMixin, serializers.ModelSerializer):
951
989
  product_images = ProductMediaSerializer(many=True, source="images")
952
990
 
@@ -20,6 +20,7 @@ from ob_dj_store.apis.stores.views import (
20
20
  TaxViewSet,
21
21
  TransactionsViewSet,
22
22
  VariantView,
23
+ WalletV2ViewSet,
23
24
  WalletViewSet,
24
25
  )
25
26
 
@@ -43,6 +44,7 @@ router.register(r"cart", CartView, basename="cart")
43
44
  router.register(r"cart-item", CartItemView, basename="cart-item")
44
45
  router.register(r"favorite", FavoriteViewSet, basename="favorite")
45
46
  router.register(r"wallet", WalletViewSet, basename="wallet")
47
+ router.register(r"wallet_v2", WalletV2ViewSet, basename="wallet_v2")
46
48
  router.register(r"payment-method", PaymentMethodViewSet, basename="payment-method")
47
49
  router.register(r"order", ReorderViewSet, basename="re-order")
48
50
  router.register(r"partner/auth", PartnerAuthInfoViewSet, basename="auth")
@@ -51,6 +51,7 @@ from ob_dj_store.apis.stores.rest.serializers.serializers import (
51
51
  PaymentMethodSerializer,
52
52
  PaymentSerializer,
53
53
  ProductListSerializer,
54
+ ProductSearchSerializer,
54
55
  ProductSerializer,
55
56
  ProductVariantSerializer,
56
57
  ReorderSerializer,
@@ -61,6 +62,7 @@ from ob_dj_store.apis.stores.rest.serializers.serializers import (
61
62
  WalletSerializer,
62
63
  WalletTopUpSerializer,
63
64
  WalletTransactionListSerializer,
65
+ WalletTransactionSerializer,
64
66
  )
65
67
  from ob_dj_store.core.stores.gateway.tap.utils import TapException
66
68
  from ob_dj_store.core.stores.models import (
@@ -575,6 +577,11 @@ class ProductView(
575
577
  filterset_class = ProductFilter
576
578
  queryset = Product.objects.active()
577
579
 
580
+ def get_serializer_class(self):
581
+ if self.request.query_params.get("q"):
582
+ return ProductSearchSerializer
583
+ return ProductSerializer
584
+
578
585
  def apply_prefetch(self, queryset):
579
586
 
580
587
  qs = queryset.prefetch_related(
@@ -1103,13 +1110,19 @@ class WalletViewSet(
1103
1110
  methods=["GET"],
1104
1111
  detail=True,
1105
1112
  url_path="transactions",
1106
- serializer_class=WalletTransactionListSerializer,
1113
+ serializer_class=WalletTransactionSerializer,
1107
1114
  )
1108
- def transactions(self, request, *args, **kwargs):
1109
- wallet = self.get_object()
1110
- queryset = wallet.transactions.all().order_by("-created_at")
1111
- serializer = WalletTransactionListSerializer(queryset, many=True)
1112
- return Response({"results": serializer.data})
1115
+ def transactions(
1116
+ self, request: Request, *args: typing.Any, **kwargs: typing.Any
1117
+ ) -> Response:
1118
+ queryset = self.get_object().transactions.all().order_by("-created_at")
1119
+ page = self.paginate_queryset(queryset)
1120
+ if page is not None:
1121
+ serializer = self.get_serializer(page, many=True)
1122
+ return self.get_paginated_response(serializer.data)
1123
+
1124
+ serializer = self.get_serializer(queryset, many=True)
1125
+ return Response(serializer.data)
1113
1126
 
1114
1127
  @swagger_auto_schema(
1115
1128
  operation_summary="List Wallet selection images",
@@ -1137,6 +1150,34 @@ class WalletViewSet(
1137
1150
  return Response(serializer.data)
1138
1151
 
1139
1152
 
1153
+ class WalletV2ViewSet(
1154
+ mixins.ListModelMixin, viewsets.GenericViewSet,
1155
+ ):
1156
+ def get_queryset(self):
1157
+ return Wallet.objects.filter(
1158
+ user=self.request.user, is_active=True
1159
+ ).select_related("media_image")
1160
+
1161
+ @swagger_auto_schema(
1162
+ operation_summary="List Wallet's transactions",
1163
+ operation_description="""
1164
+ list user's wallet transactions(debit,credit)
1165
+ """,
1166
+ tags=["Wallet",],
1167
+ )
1168
+ @action(
1169
+ methods=["GET"],
1170
+ detail=True,
1171
+ url_path="transactions",
1172
+ serializer_class=WalletTransactionListSerializer,
1173
+ )
1174
+ def transactions(self, request, *args, **kwargs):
1175
+ wallet = self.get_object()
1176
+ queryset = wallet.transactions.all().order_by("-created_at")
1177
+ serializer = WalletTransactionListSerializer(queryset, many=True)
1178
+ return Response({"results": serializer.data})
1179
+
1180
+
1140
1181
  class PartnerAuthInfoViewSet(
1141
1182
  mixins.CreateModelMixin,
1142
1183
  mixins.RetrieveModelMixin,
@@ -0,0 +1,27 @@
1
+ # Generated by Django 3.2.8 on 2025-07-31 16:12
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("stores", "0108_alter_paymentmethod_payment_provider"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name="wallettransaction",
15
+ name="cashback_type",
16
+ field=models.CharField(
17
+ blank=True,
18
+ choices=[
19
+ ("BY_ORDER", "By Order"),
20
+ ("BY_OFFER", "By Offer"),
21
+ ("BY_STREAK", "By Streak"),
22
+ ],
23
+ max_length=100,
24
+ null=True,
25
+ ),
26
+ ),
27
+ ]
@@ -248,6 +248,19 @@ class Product(DjangoModelCleanMixin, models.Model):
248
248
  def __str__(self):
249
249
  return f"Product {self.name} (PK={self.pk})"
250
250
 
251
+ def get_inventory(self, store_id):
252
+ try:
253
+ inventory = self.product_variants.inventories.get(store=store_id)
254
+ except ObjectDoesNotExist:
255
+ return None
256
+
257
+ def is_snoozed(self, store_id):
258
+ try:
259
+ inventory = self.product_variants.inventories.get(store=store_id)
260
+ except ObjectDoesNotExist:
261
+ return False
262
+ return inventory.is_snoozed
263
+
251
264
 
252
265
  # TODO: must remove, redundunt
253
266
  class Attribute(DjangoModelCleanMixin, models.Model):
@@ -136,6 +136,11 @@ class WalletTransaction(models.Model):
136
136
  CREDIT = "CREDIT", _("credit")
137
137
  DEBIT = "DEBIT", _("debit")
138
138
 
139
+ class CashBackType(models.TextChoices):
140
+ BY_ORDER = "BY_ORDER", _("By Order")
141
+ BY_OFFER = "BY_OFFER", _("By Offer")
142
+ BY_STREAK = "BY_STREAK", _("By Streak")
143
+
139
144
  wallet = models.ForeignKey(
140
145
  "stores.Wallet", on_delete=models.CASCADE, related_name="transactions",
141
146
  )
@@ -150,7 +155,9 @@ class WalletTransaction(models.Model):
150
155
  is_cashback = models.BooleanField(default=False)
151
156
  is_refund = models.BooleanField(default=False)
152
157
  is_redeemed = models.BooleanField(default=False)
153
-
158
+ cashback_type = models.CharField(
159
+ max_length=100, choices=CashBackType.choices, blank=True, null=True
160
+ )
154
161
  objects = WalletTransactionManager()
155
162
 
156
163
  # Audit
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ob-dj-store
3
- Version: 0.0.21
3
+ Version: 0.0.21.2
4
4
  Summary: OBytes django application for managing ecommerce stores.
5
5
  Home-page: https://www.obytes.com/
6
6
  Author: OBytes
@@ -182,6 +182,7 @@ ob_dj_store/core/stores/migrations/0105_store_is_open_after_midnight.py
182
182
  ob_dj_store/core/stores/migrations/0106_alter_paymentmethod_payment_provider.py
183
183
  ob_dj_store/core/stores/migrations/0107_auto_20250425_2059.py
184
184
  ob_dj_store/core/stores/migrations/0108_alter_paymentmethod_payment_provider.py
185
+ ob_dj_store/core/stores/migrations/0109_wallettransaction_cashback_type.py
185
186
  ob_dj_store/core/stores/migrations/__init__.py
186
187
  ob_dj_store/core/stores/models/__init__.py
187
188
  ob_dj_store/core/stores/models/_address.py
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes