Compare commits

...

3 commits

3 changed files with 118 additions and 152 deletions

View file

@ -593,7 +593,7 @@ def setup_paddle_callback(app: Flask):
sub.next_bill_date = sub.next_bill_date - relativedelta(months=1)
LOG.d("next_bill_date is %s", sub.next_bill_date)
Session.commit()
elif plan_id == PADDLE_YEARLY_PRODUCT_IDS:
elif plan_id in PADDLE_YEARLY_PRODUCT_IDS:
LOG.d("subtract 1 year from next_bill_date %s", sub.next_bill_date)
sub.next_bill_date = sub.next_bill_date - relativedelta(years=1)
LOG.d("next_bill_date is %s", sub.next_bill_date)

View file

@ -1,163 +1,128 @@
{% extends "default.html" %}
{% set active_page = "dashboard" %}
{% block head %}
<style>
{# https://bootsnipp.com/snippets/rljEW#}
.card-counter {
box-shadow: 2px 2px 10px #DADADA;
margin: 5px;
padding: 20px 10px;
background-color: #fff;
height: 100px;
border-radius: 5px;
transition: .3s linear all;
}
.card-counter:hover {
box-shadow: 4px 4px 20px #DADADA;
transition: .3s linear all;
}
.card-counter.primary {
background-color: #007bff;
color: #FFF;
}
.card-counter.danger {
background-color: #ef5350;
color: #FFF;
}
.card-counter.success {
background-color: #66bb6a;
color: #FFF;
}
.card-counter.info {
background-color: #26c6da;
color: #FFF;
}
.card-counter i {
font-size: 2em;
opacity: 0.2;
}
.card-counter .count-numbers {
position: absolute;
right: 35px;
top: 20px;
font-size: 32px;
display: block;
}
.card-counter .count-name {
position: absolute;
right: 35px;
top: 65px;
text-transform: capitalize;
opacity: 0.5;
display: block;
font-size: 18px;
}
</style>
{% endblock %}
{% block title %}Alias Activity{% endblock %}
{% block default_content %}
<h1 class="h3">{{ alias.email }}</h1>
<div class="row">
<div class="col-md-3 col-sm-6">
<div class="card-counter primary">
<i class="fa fa-at"></i>
<span class="count-numbers">{{ total }}</span>
<span class="count-name">Email Handled</span>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="card-counter primary">
<i class="fa fa-paper-plane"></i>
<span class="count-numbers">{{ email_forwarded }}</span>
<span class="count-name">Email Forwarded</span>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="card-counter primary">
<i class="fa fa-reply"></i>
<span class="count-numbers">{{ email_replied }}</span>
<span class="count-name">Email Replied</span>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="card-counter danger">
<i class="fa fa-ban"></i>
<span class="count-numbers">{{ email_blocked }}</span>
<span class="count-name">Email Blocked</span>
</div>
</div>
</div>
<div class="row mt-4">
{% for log in logs %}
<h1 class="h3">{{ alias.email }}</h1>
<!-- Stats -->
<div class="row">
<div class="col-12 col-md-6 col-lg-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="subheader">Total</div>
<div class="text-muted"
style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div>
</div>
<div class="h1 m-0">{{ total }}</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="subheader">Forwards</div>
<div class="text-muted"
style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div>
</div>
<div class="h1 m-0">{{ email_forwarded }}</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="subheader">Replies/Sent</div>
<div class="text-muted"
style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div>
</div>
<div class="h1 m-0">{{ email_replied }}</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="subheader">Blocks</div>
<div class="text-muted"
style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div>
</div>
<div class="h1 m-0">{{ email_blocked }}</div>
</div>
</div>
</div>
</div>
<!-- END Stats -->
<div class="row mt-4">
{% for log in logs %}
<div class="col-lg-6">
<div class="my-2 p-2 card border-light">
<div class="font-weight-bold">
{{ log.when | dt }}
<div class="float-right pr-3">
{% if log.bounced %}
<div class="col-lg-6">
<div class="my-2 p-2 card border-light">
<div class="font-weight-bold">
{{ log.when | dt }}
<div class="float-right pr-3">
{% if log.bounced %}
⚠️
{% else %}
{% if log.is_reply %}
⚠️
{% else %}
{% if log.is_reply %}
<i class="fa fa-reply"></i>
{% elif log.blocked %}
<i class="fa fa-ban text-danger"></i>
{% else %}
<i class="fa fa-paper-plane"></i>
{% endif %}
{% endif %}
</div>
</div>
{% if log.bounced and not log.is_reply %}
<i class="fa fa-reply"></i>
{% elif log.blocked %}
<i class="fa fa-ban text-danger"></i>
{% else %}
<i class="fa fa-paper-plane"></i>
{% endif %}
{% endif %}
</div>
</div>
{% if log.bounced and not log.is_reply %}
<div>
<span class="mr-2">{{ log.website_email }}</span>
<img src="{{ url_for('static', filename='arrows/forward-arrow.svg') }}" class="arrow">
<span class="ml-2">{{ log.alias }}</span>
<img src="{{ url_for('static', filename='arrows/blocked-arrow.svg') }}" class="arrow">
<span class="ml-2">{{ log.email_log.bounced_mailbox() }}</span>
</div>
{% elif log.bounced and log.is_reply %}
<div>
<span class="ml-2">{{ log.email_log.bounced_mailbox() }}</span>
<img src="{{ url_for('static', filename='arrows/forward-arrow.svg') }}" class="arrow">
<span class="ml-2">{{ log.alias }}</span>
<img src="{{ url_for('static', filename='arrows/blocked-arrow.svg') }}" class="arrow">
<span class="mr-2">{{ log.website_email }}</span>
</div>
{% else %}
<div>{{ log.website_email }}</div>
{% endif %}
</div>
</div>
{% endfor %}
</div>
<nav aria-label="Alias log navigation">
<ul class="pagination">
<li class="page-item">
<a class="btn btn-outline-secondary {% if page_id == 0 %}disabled{% endif %}" href="{{ url_for('dashboard.alias_log', alias_id=alias_id, page_id=page_id-1) }}">
Previous
</a>
</li>
<li class="page-item">
<a class="btn btn-outline-secondary {% if last_page %}disabled{% endif %}" href="{{ url_for('dashboard.alias_log', alias_id=alias_id, page_id=page_id+1) }}">
Next
</a>
</li>
</ul>
</nav>
<div>
<span class="mr-2">{{ log.website_email }}</span>
<img src="{{ url_for('static', filename='arrows/forward-arrow.svg') }}"
class="arrow">
<span class="ml-2">{{ log.alias }}</span>
<img src="{{ url_for('static', filename='arrows/blocked-arrow.svg') }}"
class="arrow">
<span class="ml-2">{{ log.email_log.bounced_mailbox() }}</span>
</div>
{% elif log.bounced and log.is_reply %}
<div>
<span class="ml-2">{{ log.email_log.bounced_mailbox() }}</span>
<img src="{{ url_for('static', filename='arrows/forward-arrow.svg') }}"
class="arrow">
<span class="ml-2">{{ log.alias }}</span>
<img src="{{ url_for('static', filename='arrows/blocked-arrow.svg') }}"
class="arrow">
<span class="mr-2">{{ log.website_email }}</span>
</div>
{% else %}
<div>{{ log.website_email }}</div>
{% endif %}
</div>
</div>
{% endfor %}
</div>
<nav aria-label="Alias log navigation">
<ul class="pagination">
<li class="page-item">
<a class="btn btn-outline-secondary {% if page_id == 0 %}disabled{% endif %}"
href="{{ url_for('dashboard.alias_log', alias_id=alias_id, page_id=page_id-1) }}">
Previous
</a>
</li>
<li class="page-item">
<a class="btn btn-outline-secondary {% if last_page %}disabled{% endif %}"
href="{{ url_for('dashboard.alias_log', alias_id=alias_id, page_id=page_id+1) }}">
Next
</a>
</li>
</ul>
</nav>
{% endblock %}
{% block script %}{% endblock %}

View file

@ -350,6 +350,7 @@ Alias description
<span class="alias-activity">{{ alias_info.nb_forward }}</span> forwards,
<span class="alias-activity">{{ alias_info.nb_blocked }}</span> blocks,
<span class="alias-activity">{{ alias_info.nb_reply }}</span> sents
in the last 14 days
<a href="{{ url_for('dashboard.alias_log', alias_id=alias.id) }}"
class="btn btn-sm btn-link">
See All &nbsp;