-
Buyers and sellers
-
-
Take your time and research items before you bid
-
Set a minimum bid, so your items always sell for what they're worth
-
No need to pack and transport unsold items
-
+
+
+
+
+
Buyers and sellers
+
+
Take your time and research items before you bid
+
Set a minimum bid, so your items always sell for what they're worth
+
No need to pack and transport unsold items
+
+
-
Ready to get started?
diff --git a/auctions/templates/youtube_embed.html b/auctions/templates/youtube_embed.html
new file mode 100755
index 0000000..f1c6798
--- /dev/null
+++ b/auctions/templates/youtube_embed.html
@@ -0,0 +1,69 @@
+
+
+
+
+{% if chapters %}
+
+
Jump to content in this video
+
+ {% for seconds, chapter in chapters %}
+ - {{ chapter }}
+ {% endfor %}
+
+
+{% endif %}
diff --git a/auctions/urls.py b/auctions/urls.py
index a77df16..07cdcb9 100755
--- a/auctions/urls.py
+++ b/auctions/urls.py
@@ -173,6 +173,11 @@
login_required(views.AuctionUsers.as_view()),
name="auction_tos_list",
),
+ path(
+ "auctions/
/help/",
+ login_required(views.AuctionHelp.as_view()),
+ name="auction_help",
+ ),
path(
"auctions//users/bulk-add/",
login_required(views.BulkAddUsers.as_view()),
diff --git a/auctions/views.py b/auctions/views.py
index 10d2b00..3cface2 100755
--- a/auctions/views.py
+++ b/auctions/views.py
@@ -394,7 +394,8 @@ class LotListView(AjaxListView):
model = Lot
template_name = "all_lots.html"
auction = None
- routeByLastAuction = False # to display the banner telling users why they are not seeing lots for all auctions
+ # to display the banner telling users why they are not seeing lots for all auctions
+ routeByLastAuction = False
def get_page_template(self):
try:
@@ -1398,7 +1399,7 @@ def auctionReport(request, slug):
.order_by("createdon")
)
# .annotate(distance_traveled=distance_to(\
- #'`auctions_userdata`.`latitude`', '`auctions_userdata`.`longitude`', \
+ # '`auctions_userdata`.`latitude`', '`auctions_userdata`.`longitude`', \
# lat_field_name='`auctions_pickuplocation`.`latitude`',\
# lng_field_name="`auctions_pickuplocation`.`longitude`",\
# approximate_distance_to=1)\
@@ -2020,6 +2021,24 @@ def get_context_data(self, **kwargs):
return context
+class AuctionHelp(AdminEmailMixin, TemplateView, AuctionPermissionsMixin):
+ template_name = "auction_help.html"
+
+ def dispatch(self, request, *args, **kwargs):
+ self.auction = (
+ Auction.objects.exclude(is_deleted=True)
+ .filter(slug=kwargs.pop("slug"))
+ .first()
+ )
+ self.is_auction_admin
+ return super().dispatch(request, *args, **kwargs)
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context["auction"] = self.auction
+ return context
+
+
class AuctionUsers(SingleTableMixin, FilterView, AuctionPermissionsMixin):
"""List of users (AuctionTOS) associated with an auction"""
@@ -4063,6 +4082,10 @@ class PromoSite(TemplateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["hide_google_login"] = True
+ context["online_tutorial"] = settings.ONLINE_TUTORIAL_YOUTUBE_ID
+ context["in_person_tutorial"] = settings.IN_PERSON_TUTORIAL_YOUTUBE_ID
+ context["in_person_tutorial_chapters"] = settings.IN_PERSON_TUTORIAL_CHAPTERS
+ context["online_tutorial_chapters"] = settings.ONLINE_TUTORIAL_CHAPTERS
return context
@@ -4243,7 +4266,8 @@ class AllLots(LotListView, AuctionPermissionsMixin):
"""Show all lots"""
rewrite_url = (
- None # use JS to rewrite the shown URL. This is used only for auctions.
+ # use JS to rewrite the shown URL. This is used only for auctions.
+ None
)
auction = None
allow_non_admins = True
@@ -4339,7 +4363,8 @@ class InvoiceView(DetailView, FormMixin, AuctionPermissionsMixin):
template_name = "invoice.html"
model = Invoice
# form_class = InvoiceUpdateForm
- form_view = "opened" # expects opened or printed, this field will be set to true when the user the invoice is for opens it
+ # expects opened or printed, this field will be set to true when the user the invoice is for opens it
+ form_view = "opened"
allow_non_admins = True
authorized_by_default = False
@@ -4749,7 +4774,8 @@ def create_labels(self, request, *args, **kwargs):
style,
)
labels_row.append([label_text_cell])
- labels_row.append([Paragraph("", style)]) # margin right cell is empty
+ # margin right cell is empty
+ labels_row.append([Paragraph("", style)])
# Check if the current label is the last label in the current row or the last label in the list
if (i + 1) % num_cols == 0 or i == len(labels) - 1:
@@ -5149,7 +5175,8 @@ def dispatch(self, request, *args, **kwargs):
def get_success_url(self):
data = self.request.GET.copy()
if len(data) == 0:
- data["next"] = reverse("account") # "/users/" + str(self.kwargs['pk'])
+ # "/users/" + str(self.kwargs['pk'])
+ data["next"] = reverse("account")
return data["next"]
@@ -5922,7 +5949,7 @@ def get_data(self):
{
"x": (lot.date_end - self.end_date).total_seconds()
// 60, # minutes after auction start
- #'x': lot.date_end.timestamp() * 1000, # this one gives js timestamps and would need moment.js to convert to date
+ # 'x': lot.date_end.timestamp() * 1000, # this one gives js timestamps and would need moment.js to convert to date
"y": lot.winning_price,
}
for lot in self.lots
diff --git a/fishauctions/settings.py b/fishauctions/settings.py
index ebe3d23..ffe4854 100755
--- a/fishauctions/settings.py
+++ b/fishauctions/settings.py
@@ -90,7 +90,7 @@
"django.contrib.messages",
"django.contrib.staticfiles",
"django_extensions",
- #'site_settings',
+ # 'site_settings',
"crispy_forms",
"django.contrib.sites",
"allauth",
@@ -104,7 +104,7 @@
"post_office",
"location_field",
"channels",
- #'debug_toolbar', # having this enabled is handy for sql queries but silences errors in channels
+ # 'debug_toolbar', # having this enabled is handy for sql queries but silences errors in channels
"markdownfield",
"qr_code",
"django_tables2",
@@ -312,7 +312,7 @@
"": {
"ad": {"size": (250, 150), "crop": False},
"lot_list": {"size": (250, 150), "crop": "smart"},
- #'lot_full': {'size': (600, 600), 'crop': False},
+ # 'lot_full': {'size': (600, 600), 'crop': False},
},
}
THUMBNAIL_DEFAULT_STORAGE_ALIAS = "default"
@@ -377,7 +377,8 @@
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
-SEND_WELCOME_EMAIL = True # when a user adds an unverified email address to their auction, send an email about the site
+# when a user adds an unverified email address to their auction, send an email about the site
+SEND_WELCOME_EMAIL = True
DATA_UPLOAD_MAX_NUMBER_FIELDS = 20000
@@ -442,3 +443,53 @@
"new",
"test",
]
+ONLINE_TUTORIAL_YOUTUBE_ID = "mNcOjAakC4c"
+ONLINE_TUTORIAL_CHAPTERS = (
+ (0, "Intro"),
+ (45, "Account creation"),
+ (1 * 60 + 25, "Auction creation"),
+ (1 * 60 + 49, "Setting the location to exchange lots"),
+ (2 * 60 + 37, "Rules"),
+ (4 * 60 + 2, "Joining the auction"),
+ (5 * 60 + 2, "Adding lots"),
+ (6 * 60 + 30, "Copying lots"),
+ (6 * 60 + 51, "Issues with joining your auction"),
+ (8 * 60 + 58, "Bidding and proxy bidding"),
+ (9 * 60 + 49, "Sniping and the end of the auction"),
+ (11 * 60 + 11, "Invoices"),
+ (12 * 60 + 9, "Paypal Batch Invoicing"),
+ (13 * 60 + 12, "What happens if someone doesn't pay?"),
+ (14 * 60 + 20, "Lot labels"),
+ (15 * 60 + 23, "Stats"),
+ (17 * 60 + 13, "Multi-location auctions"),
+ (19 * 60 + 29, "Help and support"),
+)
+IN_PERSON_TUTORIAL_YOUTUBE_ID = "BXnoMMU_aCQ"
+IN_PERSON_TUTORIAL_CHAPTERS = (
+ (0, "Intro"),
+ (36, "Account creation"),
+ (1 * 60 + 17, "Auction creation"),
+ (1 * 60 + 45, "Rules"),
+ (2 * 60 + 54, "Location"),
+ (3 * 60 + 22, "Joining the auction"),
+ (3 * 60 + 44, "Adding users manually"),
+ (4 * 60 + 31, "Users joining your auction"),
+ (4 * 60 + 47, "Auction administrators"),
+ (5 * 60 + 42, "Adding lots"),
+ (6 * 60 + 10, "Editing lots"),
+ (6 * 60 + 34, "Users adding lots"),
+ (7 * 60 + 38, "Lot labels"),
+ (8 * 60 + 37, "The auction itself: Set lot winners"),
+ (9 * 60 + 50, "Some common issues with selling lots"),
+ (11 * 60 + 1, "Invoices and payments"),
+ (13 * 60 + 3, "Auction hall layout"),
+ (14 * 60 + 5, "Images and lots"),
+ (14 * 60 + 45, "Selling fees discounts for club members"),
+ (15 * 60 + 52, "Changing bidder numbers"),
+ (16 * 60 + 38, "Stats"),
+ (18 * 60 + 54, "Attrition and Buy Now"),
+ (22 * 60 + 50, "Reusing rules in your next auction"),
+ (23 * 60 + 25, "Copying users between auctions"),
+ (24 * 60 + 00, "Advertising"),
+ (24 * 60 + 52, "Help and Support"),
+)