Changeset View
Changeset View
Standalone View
Standalone View
looper/admin/models.py
- This file was added.
| """Defines proxy models used by custom admin views, such as reports.""" | |||||
| from django.urls import reverse | |||||
| from django.utils.html import format_html | |||||
| from looper import models | |||||
| from looper.money import Money | |||||
| class EUVatPerCountryReport(models.Order): | |||||
| class Meta: | |||||
| verbose_name_plural = '[Report] EU VAT per country' | |||||
| verbose_name = 'EU VAT' | |||||
| app_label = 'looper' | |||||
| proxy = True | |||||
| managed = False | |||||
| @property | |||||
| def country(self): | |||||
| return self.tax_country.name | |||||
| @property | |||||
| def country_code(self): | |||||
| return self.tax_country.code | |||||
| # Because this is a proxy model, using get-set properties | |||||
| # is the only way to add field-like attributes to it | |||||
| @property | |||||
| def sales(self): | |||||
| return self._sales | |||||
| @sales.setter | |||||
| def sales(self, value): | |||||
| self._sales = value | |||||
| @property | |||||
| def refunds(self): | |||||
| return self._refunds | |||||
| @refunds.setter | |||||
| def refunds(self, value): | |||||
| self._refunds = value | |||||
| @property | |||||
| def vat_charged(self): | |||||
| return self._vat_charged | |||||
| @vat_charged.setter | |||||
| def vat_charged(self, value): | |||||
| self._vat_charged = value | |||||
| @property | |||||
| def vat_refunded(self): | |||||
| return self._vat_refunded | |||||
| @vat_refunded.setter | |||||
| def vat_refunded(self, value): | |||||
| self._vat_refunded = value | |||||
| @property | |||||
| def total_charged(self): | |||||
| return self.sales - self.refunds | |||||
| @property | |||||
| def vat_total(self): | |||||
| return self.vat_charged - self.vat_refunded | |||||
| class OrdersPerVATNumber(models.Order): | |||||
| class Meta: | |||||
| verbose_name_plural = '[Report] Orders per VAT number' | |||||
| verbose_name = 'VAT number' | |||||
| app_label = 'looper' | |||||
| proxy = True | |||||
| managed = False | |||||
| @property | |||||
| def country(self): | |||||
| return self.tax_country.code | |||||
| @property | |||||
| def orders(self): | |||||
| return self._orders | |||||
| @orders.setter | |||||
| def orders(self, value): | |||||
| self._orders = value | |||||
| @property | |||||
| def order_id(self): | |||||
| return format_html( | |||||
| ','.join( | |||||
| '<a href="{}">{}</a>'.format( | |||||
| reverse('admin:looper_order_change', kwargs={'object_id': order.pk}), order.pk | |||||
| ) | |||||
| for order in self.orders | |||||
| ) | |||||
| ) | |||||
| @property | |||||
| def sales(self): | |||||
| return self._sales | |||||
| @sales.setter | |||||
| def sales(self, value): | |||||
| self._sales = value | |||||
| class Sales(models.Order): | |||||
| class Meta: | |||||
| verbose_name_plural = '[Report] Sales by date' | |||||
| verbose_name = 'Sales' | |||||
| app_label = 'looper' | |||||
| proxy = True | |||||
| managed = False | |||||
| @property | |||||
| def gross_sales(self): | |||||
| return self._gross_sales | |||||
| @gross_sales.setter | |||||
| def gross_sales(self, value): | |||||
| self._gross_sales = value | |||||
| @property | |||||
| def avg_daily_gross_sales(self): | |||||
| currency = self.gross_sales.currency | |||||
| if not self.days: | |||||
| return Money(currency, 0) | |||||
| return Money(currency, round(self.gross_sales._cents / self.days)) | |||||
| @property | |||||
| def net_sales(self): | |||||
| return self._net_sales | |||||
| @net_sales.setter | |||||
| def net_sales(self, value): | |||||
| self._net_sales = value | |||||
| @property | |||||
| def avg_daily_net_sales(self): | |||||
| currency = self.net_sales.currency | |||||
| if not self.days: | |||||
| return Money(currency, 0) | |||||
| return Money(currency, round(self.net_sales._cents / self.days)) | |||||
| @property | |||||
| def orders_placed(self): | |||||
| return self._orders_placed | |||||
| @orders_placed.setter | |||||
| def orders_placed(self, value): | |||||
| self._orders_placed = value | |||||
| @property | |||||
| def orders_refunded(self): | |||||
| return self._orders_refunded | |||||
| @orders_refunded.setter | |||||
| def orders_refunded(self, value): | |||||
| self._orders_refunded = value | |||||
| @property | |||||
| def refunds(self): | |||||
| return self._refunds | |||||
| @refunds.setter | |||||
| def refunds(self, value): | |||||
| self._refunds = value | |||||
| @property | |||||
| def days(self): | |||||
| return self._days | |||||
| @days.setter | |||||
| def days(self, value): | |||||
| self._days = value | |||||