Models
User
¶
Bases: AbstractUser
Defines the base user class, useable in every app.
This is almost the same as the auth module AbstractUser since it inherits from it, but some fields are required, and the username is generated automatically with the name of the user (see generate_username()).
Added field: nick_name, date_of_birth Required fields: email, first_name, last_name, date_of_birth
is_in_group(*, pk=None, name=None)
¶
Check if this user is in the given group. Either a group id or a group name must be provided. If both are passed, only the id will be considered.
The group will be fetched using the given parameter. If no group is found, return False. If a group is found, check if this user is in the latter.
Returns:
| Type | Description |
|---|---|
bool
|
True if the user is the group, else False |
Source code in core/models.py
all_groups()
¶
Get the list of groups this user is in.
Source code in core/models.py
age()
¶
Return the age this user has the day the method is called. If the user has not filled his age, return 0.
Source code in core/models.py
get_short_name()
¶
get_display_name()
¶
Returns the display name of the user.
A nickname if possible, otherwise, the full name.
get_family(godfathers_depth=4, godchildren_depth=4)
¶
Get the family of the user, with the given depth.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
godfathers_depth
|
NonNegativeInt
|
The number of generations of godfathers to fetch |
4
|
godchildren_depth
|
NonNegativeInt
|
The number of generations of godchildren to fetch |
4
|
Returns:
| Type | Description |
|---|---|
set[through]
|
A list of family relationships in this user's family |
Source code in core/models.py
email_user(subject, message, from_email=None, **kwargs)
¶
Sends an email to this User.
generate_username()
¶
Generates a unique username based on the first and last names.
For example: Guy Carlier gives gcarlier, and gcarlier1 if the first one exists.
Returns:
| Type | Description |
|---|---|
str
|
The generated username. |
Source code in core/models.py
is_owner(obj)
¶
Determine if the object is owned by the user.
Source code in core/models.py
can_edit(obj)
¶
Determine if the object can be edited by the user.
Source code in core/models.py
can_view(obj)
¶
Determine if the object can be viewed by the user.
Source code in core/models.py
can_be_viewed_by(user)
¶
Check if the given user can be viewed by this user.
Given users A and B. A can be viewed by B if :
- A and B are the same user
- or B has the permission to view hidden users
- or B can view users in general and A didn't hide its profile
- or B is in A's whitelist.
Source code in core/models.py
clubs_with_rights()
¶
The list of clubs where the user has rights
CurrencyField(*args, **kwargs)
¶
BillingInfo
¶
Bases: Model
Represent the billing information of a user, which are required by the 3D-Secure v2 system used by the etransaction module.
to_3dsv2_xml()
¶
Convert the data from this model into a xml usable
by the online paying service of the Crédit Agricole bank.
see : https://www.ca-moncommerce.com/espace-client-mon-commerce/up2pay-e-transactions/ma-documentation/manuel-dintegration-focus-3ds-v2/principes-generaux/#integration-3dsv2-developpeur-webmaster.
Source code in counter/models.py
Customer
¶
Bases: Model
Customer data of a User.
It adds some basic customers' information, such as the account ID, and is used by other accounting classes as reference to the customer, rather than using User.
can_buy
property
¶
Check if whether this customer has the right to purchase any item.
save(*args, allow_negative=False, **kwargs)
¶
is_selling : tell if the current action is a selling allow_negative : ignored if not a selling. Allow a selling to put the account in negative Those two parameters avoid blocking the save method of a customer if his account is negative.
Source code in counter/models.py
update_returnable_balance()
¶
Update all returnable balances of this user to their real amount.
Source code in counter/models.py
get_or_create(user)
classmethod
¶
Work in pretty much the same way as the usual get_or_create method, but with the default field replaced by some under the hood.
If the user has an account, return it as is. Else create a new account with no money on it and a new unique account id
Example : ::
user = User.objects.get(pk=1)
account, created = Customer.get_or_create(user)
if created:
print(f"created a new account with id {account.id}")
else:
print(f"user has already an account, with {account.id} € on it"
Source code in counter/models.py
Price
¶
Bases: Model
Product
¶
Bases: Model
A product, with all its related information.
is_owned_by(user)
¶
Method to see if that object can be edited by the given user.
Source code in counter/models.py
Refilling
¶
Bases: Model
Handle the refilling.
Selling
¶
Bases: Model
Handle the sellings.
save(*args, allow_negative=False, **kwargs)
¶
allow_negative : Allow this selling to use more money than available for this user.
Source code in counter/models.py
928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 | |
BillingInfoState
¶
Bases: Enum
Basket
¶
Bases: Model
Basket is built when the user connects to an eboutic page.
generate_sales(counter, seller, payment_method)
¶
Generate a list of sold items corresponding to the items of this basket WITHOUT saving them NOR deleting the basket.
Example
counter = Counter.objects.get(name="Eboutic")
user = User.objects.get(username="bibou")
sales = basket.generate_sales(counter, user, Selling.PaymentMethod.SITH_ACCOUNT)
# here the basket is in the same state as before the method call
with transaction.atomic():
for sale in sales:
sale.save()
basket.delete()
# all the basket items are deleted by the on_delete=CASCADE relation
# thus only the sales remain
Source code in eboutic/models.py
InvoiceQueryset
¶
Bases: QuerySet
annotate_total()
¶
Annotate the queryset with the total amount of each invoice.
The total amount is the sum of (unit_price * quantity) for all items related to the invoice.
Source code in eboutic/models.py
Invoice
¶
Bases: Model
Invoices are generated once the payment has been validated.
AbstractBaseItem
¶
Bases: Model
BasketItem
¶
Bases: AbstractBaseItem
from_price(price, quantity, basket)
classmethod
¶
Create a BasketItem with the same characteristics as the product price passed in parameters, with the specified quantity.
Source code in eboutic/models.py
InvoiceItem
¶
Bases: AbstractBaseItem