move CurrencyField to counter

This commit is contained in:
imperosol 2025-03-14 16:04:16 +01:00
parent 1be3a23200
commit cda824ad56
11 changed files with 55 additions and 53 deletions

View File

@ -4,7 +4,7 @@ import django.core.validators
import django.db.models.deletion import django.db.models.deletion
from django.db import migrations, models from django.db import migrations, models
import accounting.models import counter.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -142,7 +142,7 @@ class Migration(migrations.Migration):
), ),
( (
"amount", "amount",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, decimal_places=2,
default=0, default=0,
verbose_name="amount", verbose_name="amount",
@ -151,7 +151,7 @@ class Migration(migrations.Migration):
), ),
( (
"effective_amount", "effective_amount",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, decimal_places=2,
default=0, default=0,
verbose_name="effective_amount", verbose_name="effective_amount",
@ -176,7 +176,7 @@ class Migration(migrations.Migration):
("number", models.IntegerField(verbose_name="number")), ("number", models.IntegerField(verbose_name="number")),
( (
"amount", "amount",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, max_digits=12, verbose_name="amount" decimal_places=2, max_digits=12, verbose_name="amount"
), ),
), ),

View File

@ -13,7 +13,6 @@
# #
# #
from decimal import Decimal
from django.conf import settings from django.conf import settings
from django.core import validators from django.core import validators
@ -23,34 +22,7 @@ from phonenumber_field.modelfields import PhoneNumberField
from club.models import Club from club.models import Club
from core.models import SithFile from core.models import SithFile
from counter.fields import CurrencyField
class CurrencyField(models.DecimalField):
"""Custom database field used for currency."""
def __init__(self, *args, **kwargs):
kwargs["max_digits"] = 12
kwargs["decimal_places"] = 2
super().__init__(*args, **kwargs)
def to_python(self, value):
try:
return super().to_python(value).quantize(Decimal("0.01"))
except AttributeError:
return None
if settings.TESTING:
from model_bakery import baker
baker.generators.add(
CurrencyField,
lambda: baker.random_gen.gen_decimal(max_digits=8, decimal_places=2),
)
else: # pragma: no cover
# baker is only used in tests, so we don't need coverage for this part
pass
# Accounting classes # Accounting classes

30
counter/fields.py Normal file
View File

@ -0,0 +1,30 @@
from decimal import Decimal
from django.conf import settings
from django.db import models
class CurrencyField(models.DecimalField):
"""Custom database field used for currency."""
def __init__(self, *args, **kwargs):
kwargs["max_digits"] = 12
kwargs["decimal_places"] = 2
super().__init__(*args, **kwargs)
def to_python(self, value):
if value is None:
return None
return super().to_python(value).quantize(Decimal("0.01"))
if settings.TESTING:
from model_bakery import baker
baker.generators.add(
CurrencyField,
lambda: baker.random_gen.gen_decimal(max_digits=8, decimal_places=2),
)
else: # pragma: no cover
# baker is only used in tests, so we don't need coverage for this part
pass

View File

@ -4,7 +4,7 @@ import django.db.models.deletion
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import accounting.models import counter.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -78,7 +78,7 @@ class Migration(migrations.Migration):
), ),
( (
"amount", "amount",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, max_digits=12, verbose_name="amount" decimal_places=2, max_digits=12, verbose_name="amount"
), ),
), ),
@ -145,19 +145,19 @@ class Migration(migrations.Migration):
), ),
( (
"purchase_price", "purchase_price",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, max_digits=12, verbose_name="purchase price" decimal_places=2, max_digits=12, verbose_name="purchase price"
), ),
), ),
( (
"selling_price", "selling_price",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, max_digits=12, verbose_name="selling price" decimal_places=2, max_digits=12, verbose_name="selling price"
), ),
), ),
( (
"special_selling_price", "special_selling_price",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, decimal_places=2,
max_digits=12, max_digits=12,
verbose_name="special selling price", verbose_name="special selling price",
@ -240,7 +240,7 @@ class Migration(migrations.Migration):
), ),
( (
"amount", "amount",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, max_digits=12, verbose_name="amount" decimal_places=2, max_digits=12, verbose_name="amount"
), ),
), ),
@ -324,7 +324,7 @@ class Migration(migrations.Migration):
("label", models.CharField(max_length=64, verbose_name="label")), ("label", models.CharField(max_length=64, verbose_name="label")),
( (
"unit_price", "unit_price",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, max_digits=12, verbose_name="unit price" decimal_places=2, max_digits=12, verbose_name="unit price"
), ),
), ),

View File

@ -4,7 +4,7 @@ import django.db.models.deletion
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import accounting.models import counter.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -67,7 +67,7 @@ class Migration(migrations.Migration):
), ),
( (
"value", "value",
accounting.models.CurrencyField( counter.fields.CurrencyField(
max_digits=12, verbose_name="value", decimal_places=2 max_digits=12, verbose_name="value", decimal_places=2
), ),
), ),

View File

@ -2,7 +2,7 @@
from django.db import migrations from django.db import migrations
import accounting.models import counter.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -14,7 +14,7 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name="customer", model_name="customer",
name="amount", name="amount",
field=accounting.models.CurrencyField( field=counter.fields.CurrencyField(
decimal_places=2, default=0, max_digits=12, verbose_name="amount" decimal_places=2, default=0, max_digits=12, verbose_name="amount"
), ),
), ),

View File

@ -2,7 +2,7 @@
from django.db import migrations, models from django.db import migrations, models
import accounting.models import counter.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -18,7 +18,7 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name="product", model_name="product",
name="purchase_price", name="purchase_price",
field=accounting.models.CurrencyField( field=counter.fields.CurrencyField(
decimal_places=2, decimal_places=2,
help_text="Initial cost of purchasing the product", help_text="Initial cost of purchasing the product",
max_digits=12, max_digits=12,
@ -28,7 +28,7 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name="product", model_name="product",
name="special_selling_price", name="special_selling_price",
field=accounting.models.CurrencyField( field=counter.fields.CurrencyField(
decimal_places=2, decimal_places=2,
help_text="Price for barmen during their permanence", help_text="Price for barmen during their permanence",
max_digits=12, max_digits=12,

View File

@ -38,12 +38,12 @@ from django_countries.fields import CountryField
from ordered_model.models import OrderedModel from ordered_model.models import OrderedModel
from phonenumber_field.modelfields import PhoneNumberField from phonenumber_field.modelfields import PhoneNumberField
from accounting.models import CurrencyField
from club.models import Club from club.models import Club
from core.fields import ResizedImageField from core.fields import ResizedImageField
from core.models import Group, Notification, User from core.models import Group, Notification, User
from core.utils import get_start_of_semester from core.utils import get_start_of_semester
from counter.apps import PAYMENT_METHOD from counter.apps import PAYMENT_METHOD
from counter.fields import CurrencyField
from sith.settings import SITH_MAIN_CLUB from sith.settings import SITH_MAIN_CLUB
from subscription.models import Subscription from subscription.models import Subscription

View File

@ -19,7 +19,7 @@ from django.db.models import F
from django.utils import timezone from django.utils import timezone
from django.views.generic import TemplateView from django.views.generic import TemplateView
from accounting.models import CurrencyField from counter.fields import CurrencyField
from counter.models import Refilling, Selling from counter.models import Refilling, Selling
from counter.views.mixins import CounterAdminMixin, CounterAdminTabsMixin from counter.views.mixins import CounterAdminMixin, CounterAdminTabsMixin

View File

@ -4,7 +4,7 @@ import django.db.models.deletion
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import accounting.models import counter.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -55,7 +55,7 @@ class Migration(migrations.Migration):
("type_id", models.IntegerField(verbose_name="product type id")), ("type_id", models.IntegerField(verbose_name="product type id")),
( (
"product_unit_price", "product_unit_price",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, max_digits=12, verbose_name="unit price" decimal_places=2, max_digits=12, verbose_name="unit price"
), ),
), ),
@ -120,7 +120,7 @@ class Migration(migrations.Migration):
("type_id", models.IntegerField(verbose_name="product type id")), ("type_id", models.IntegerField(verbose_name="product type id")),
( (
"product_unit_price", "product_unit_price",
accounting.models.CurrencyField( counter.fields.CurrencyField(
decimal_places=2, max_digits=12, verbose_name="unit price" decimal_places=2, max_digits=12, verbose_name="unit price"
), ),
), ),

View File

@ -25,8 +25,8 @@ from django.db.models import F, OuterRef, Subquery, Sum
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from accounting.models import CurrencyField
from core.models import User from core.models import User
from counter.fields import CurrencyField
from counter.models import BillingInfo, Counter, Customer, Product, Refilling, Selling from counter.models import BillingInfo, Counter, Customer, Product, Refilling, Selling