diff --git a/ihatemoney/static/css/main.css b/ihatemoney/static/css/main.css index a646b175..aa266e10 100644 --- a/ihatemoney/static/css/main.css +++ b/ihatemoney/static/css/main.css @@ -320,7 +320,7 @@ footer .footer-left { background: url("../images/see.png") no-repeat right; } -#bill_table, #monthly_stats { +#bill_table, #monthly_stats, #history_table { margin-top: 30px; margin-bottom: 30px; } @@ -356,6 +356,36 @@ footer .footer-left { background: url("../images/see.png") no-repeat right; } +.history_icon > .delete, +.history_icon > .add, +.history_icon > .edit { + font-size: 0px; + display: block; + width: 16px; + height: 16px; + margin: 2px; + margin-right: 10px; + margin-top: 3px; + float: left; +} + +.history_icon > .delete { + background: url("../images/delete.png") no-repeat right; +} + +.history_icon > .edit { + background: url("../images/edit.png") no-repeat right; +} + +.history_icon > .add { + background: url("../images/add.png") no-repeat right; +} + +.history_text { + display: table-cell; +} + + .balance .balance-value { text-align: right; } @@ -516,3 +546,7 @@ footer .icon svg { text-align: right; width: 200px; } + +#history_warnings { + margin-top: 30px; +} diff --git a/ihatemoney/static/images/add.png b/ihatemoney/static/images/add.png new file mode 100644 index 00000000..262891bf Binary files /dev/null and b/ihatemoney/static/images/add.png differ diff --git a/ihatemoney/templates/history.html b/ihatemoney/templates/history.html new file mode 100644 index 00000000..6f6a4de5 --- /dev/null +++ b/ihatemoney/templates/history.html @@ -0,0 +1,235 @@ +{% extends "sidebar_table_layout.html" %} + +{% macro change_to_logging_preference(event) %} +{% if event.val_after == LoggingMode.DISABLED %} + {% if event.val_before == LoggingMode.ENABLED %} + {{ _("Disabled Project History") }} + {% elif event.val_before == LoggingMode.RECORD_IP %} + {{ _("Disabled Project History & IP Address Recording") }} + {% else %} + {{ _("Disabled Project History & IP Address Recording") }} + {% endif %} +{% elif event.val_after == LoggingMode.ENABLED %} + {% if event.val_before == LoggingMode.DISABLED %} + {{ _("Enabled Project History") }} + {% elif event.val_before == LoggingMode.RECORD_IP %} + {{ _("Disabled IP Address Recording") }} + {% else %} + {{ _("Enabled Project History") }} + {% endif %} +{% elif event.val_after == LoggingMode.RECORD_IP %} + {% if event.val_before == LoggingMode.DISABLED %} + {{ _("Enabled Project History & IP Address Recording") }} + {% elif event.val_before == LoggingMode.ENABLED %} + {{ _("Enabled IP Address Recording") }} + {% else %} + {{ _("Enabled Project History & IP Address Recording") }} + {% endif %} +{% else %} + {# Should be unreachable #} + {{ _("History Settings Changed") }} +{% endif %} +{% endmacro %} + +{% macro describe_object(event) %}{{ event.object_type }} {{ event.object_desc }}{% endmacro %} + +{% macro simple_property_change(event, localized_property_name, from=True) %} + {{ describe_object(event) }}: + {{ localized_property_name }} {{ _("changed") }} + {% if from %}{{ _("from") }} {{ event.val_before }} {% endif %} + {{ _("to") }} {{ event.val_after }} +{% endmacro %} + + +{% macro owers_changed(event, add) %} + {{ describe_object(event) }}: {% if add %}{{ _("Added") }}{% else %}{{ _("Removed") }}{% endif %} + {% if event.val_after|length > 1 %} + {% for name in event.val_after %} + {{ name }}{% if event.val_after|length > 2 and loop.index != event.val_after|length %},{% endif %} + {% if loop.index == event.val_after|length - 1 %} {{ _("and") }} {% endif %} + {% endfor %} + {% else %} + {{ event.val_after[0] }} + {% endif %} + {% if add %}{{ _("to") }}{% else %}{{ _("from") }}{% endif %} + {{ _("owers list") }} +{% endmacro %} + +{% block sidebar %} +
{{ _("Who?") }} | +{{ _("Balance") }} | +
---|---|
{{ member.name }} | ++ {% if balance[member.id]|round(2) > 0 %}+{% endif %}{{ "%.2f" | format(balance[member.id]) }} + | +
+ {{ _("This project has history disabled. New actions won't appear below. You can enable history on the") }} + {{ _("settings page") }} +
+ {% if history %} +{{ _("The table below reflects actions recorded prior to disabling project history. You can ") }} + {{ _("clear project history") }} {{ _("to remove them.") }}
+ +{{ _("Some entries below contain IP addresses, even though this project has IP recording disabled. ") }} + {{ _(" Delete stored IP addresses ") }}
+ +{{ _("Time") }} | +{{ _("Event") }} | ++ + {{ _("From IP") }} | +
---|---|---|
{{ momentjs(event.time).calendar() }} | +
+
+
+
+
+ {% if event.operation_type == OperationType.INSERT %}
+ {{ event.object_type }} {{ event.object_desc }} {{ _("added") }}
+ {% elif event.operation_type == OperationType.UPDATE %}
+ {% if event.object_type == _("Project") %}
+ {% if event.prop_changed == "password" %}
+ {{ _("Project private code changed") }}
+ {% elif event.prop_changed == "logging_preference" %}
+ {{ change_to_logging_preference(event) }}
+ {% elif event.prop_changed == "name" %}
+ {{ _("Project renamed to ") }} {{ event.object_desc }}
+ {% elif event.prop_changed == "contact_email" %}
+ {{ _("Project contact email changed to ") }} {{ event.val_after }}
+ {% else %}
+ {{ _("Project settings modified") }}
+ {% endif %}
+ {% elif event.prop_changed == "activated" %}
+ {{ event.object_type }} {{ event.object_desc }}
+ {% if event.val_after == False %}{{ _("deactivated") }}{% else %}{{ _("reactivated") }}{% endif %}
+ {% elif event.prop_changed == "name" or event.prop_changed == "what" %}
+ {{ describe_object(event) }} {{ _("renamed") }} {{ _("to") }} {{ event.val_after }}
+ {% elif event.prop_changed == "weight" %}
+ {{ simple_property_change(event, _("Weight")) }}
+ {% elif event.prop_changed == "external_link" %}
+ {{ describe_object(event) }}: {{ _("External link changed to") }}
+ {{ event.val_after }}
+ {% elif event.prop_changed == "owers_added" %}
+ {{ owers_changed(event, True)}}
+ {% elif event.prop_changed == "owers_removed" %}
+ {{ owers_changed(event, False)}}
+ {% elif event.prop_changed == "payer" %}
+ {{ simple_property_change(event, _("Payer"))}}
+ {% elif event.prop_changed == "amount" %}
+ {{ simple_property_change(event, _("Amount")) }}
+ {% elif event.prop_changed == "date" %}
+ {{ simple_property_change(event, _("Date")) }}
+ {% else %}
+ {{ describe_object(event) }} {{ _("modified") }}
+ {% endif %}
+ {% elif event.operation_type == OperationType.DELETE %}
+ {{ event.object_type }} {{ event.object_desc }} {{ _("removed") }}
+ {% else %}
+ {# Should be unreachable #}
+ {{ describe_object(event) }} {{ _("changed in a unknown way") }}
+ {% endif %}
+
+ |
+ {% if event.ip %}{{ event.ip }}{% else %} -- {% endif %} | +
+ {{ _("Someone probably") }}
+ {{ _("cleared the project history.") }}
+