You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
3.8 KiB
73 lines
3.8 KiB
from wtforms import (
|
|
BooleanField,
|
|
validators,
|
|
FloatField
|
|
)
|
|
from wtforms.fields.choices import RadioField
|
|
from wtforms.fields.form import FormField
|
|
from wtforms.form import Form
|
|
from wtforms.validators import ValidationError
|
|
|
|
from changedetectionio.forms import processor_text_json_diff_form
|
|
|
|
|
|
class RestockSettingsForm(Form):
|
|
in_stock_processing = RadioField(label='Re-stock detection', choices=[
|
|
('in_stock_only', "In Stock only (Out Of Stock -> In Stock only)"),
|
|
('all_changes', "Any availability changes"),
|
|
('off', "Off, don't follow availability/restock"),
|
|
], default="in_stock_only")
|
|
|
|
price_change_min = FloatField('Below price to trigger notification', [validators.Optional()],
|
|
render_kw={"placeholder": "No limit", "size": "10"})
|
|
price_change_max = FloatField('Above price to trigger notification', [validators.Optional()],
|
|
render_kw={"placeholder": "No limit", "size": "10"})
|
|
price_change_threshold_percent = FloatField('Threshold in % for price changes since the original price', validators=[
|
|
|
|
validators.Optional(),
|
|
validators.NumberRange(min=0, max=100, message="Should be between 0 and 100"),
|
|
], render_kw={"placeholder": "0%", "size": "5"})
|
|
|
|
follow_price_changes = BooleanField('Follow price changes', default=True)
|
|
|
|
class processor_settings_form(processor_text_json_diff_form):
|
|
restock_settings = FormField(RestockSettingsForm)
|
|
|
|
def extra_tab_content(self):
|
|
return 'Restock & Price Detection'
|
|
|
|
def extra_form_content(self):
|
|
return """
|
|
{% from '_helpers.html' import render_field, render_checkbox_field, render_button %}
|
|
<script>
|
|
$(document).ready(function () {
|
|
toggleOpacity('#restock_settings-follow_price_changes', '.price-change-minmax', true);
|
|
});
|
|
</script>
|
|
|
|
<fieldset id="restock-fieldset-price-group">
|
|
<div class="pure-control-group">
|
|
<fieldset class="pure-group inline-radio">
|
|
{{ render_field(form.restock_settings.in_stock_processing) }}
|
|
</fieldset>
|
|
<fieldset class="pure-group">
|
|
{{ render_checkbox_field(form.restock_settings.follow_price_changes) }}
|
|
<span class="pure-form-message-inline">Changes in price should trigger a notification</span>
|
|
</fieldset>
|
|
<fieldset class="pure-group price-change-minmax">
|
|
{{ render_field(form.restock_settings.price_change_min, placeholder=watch.get('restock', {}).get('price')) }}
|
|
<span class="pure-form-message-inline">Minimum amount, Trigger a change/notification when the price drops <i>below</i> this value.</span>
|
|
</fieldset>
|
|
<fieldset class="pure-group price-change-minmax">
|
|
{{ render_field(form.restock_settings.price_change_max, placeholder=watch.get('restock', {}).get('price')) }}
|
|
<span class="pure-form-message-inline">Maximum amount, Trigger a change/notification when the price rises <i>above</i> this value.</span>
|
|
</fieldset>
|
|
<fieldset class="pure-group price-change-minmax">
|
|
{{ render_field(form.restock_settings.price_change_threshold_percent) }}
|
|
<span class="pure-form-message-inline">Price must change more than this % to trigger a change since the first check.</span><br>
|
|
<span class="pure-form-message-inline">For example, If the product is $1,000 USD originally, <strong>2%</strong> would mean it has to change more than $20 since the first check.</span><br>
|
|
</fieldset>
|
|
</div>
|
|
</fieldset>
|
|
"""
|