Add viewable flag for user

This commit is contained in:
Skia 2016-08-22 18:44:03 +02:00
parent eef5dfd275
commit f2c3c7dc25
6 changed files with 132 additions and 97 deletions

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0007_auto_20160813_0522'),
]
operations = [
migrations.AddField(
model_name='user',
name='is_subscriber_viewable',
field=models.BooleanField(default=True, verbose_name='is subscriber viewable'),
),
]

View File

@ -167,6 +167,7 @@ class User(AbstractBaseUser):
parent_phone = PhoneNumberField(_("parent phone"), null=True, blank=True) parent_phone = PhoneNumberField(_("parent phone"), null=True, blank=True)
address = models.CharField(_("address"), max_length=128, blank=True, default="") address = models.CharField(_("address"), max_length=128, blank=True, default="")
parent_address = models.CharField(_("parent address"), max_length=128, blank=True, default="") parent_address = models.CharField(_("parent address"), max_length=128, blank=True, default="")
is_subscriber_viewable = models.BooleanField(_("is subscriber viewable"), default=True)
objects = UserManager() objects = UserManager()
@ -359,6 +360,9 @@ class User(AbstractBaseUser):
def can_be_edited_by(self, user): def can_be_edited_by(self, user):
return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user.is_root return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user.is_root
def can_be_viewed_by(self, user):
return (user.is_in_group(settings.SITH_MAIN_MEMBERS_GROUP) and self.is_subscriber_viewable) or user.is_root
def get_mini_item(self): def get_mini_item(self):
return """ return """
<div class="mini_profile_link" > <div class="mini_profile_link" >

View File

@ -98,7 +98,7 @@ class UserProfileForm(forms.ModelForm):
fields = ['first_name', 'last_name', 'nick_name', 'email', 'date_of_birth', 'profile_pict', 'avatar_pict', fields = ['first_name', 'last_name', 'nick_name', 'email', 'date_of_birth', 'profile_pict', 'avatar_pict',
'scrub_pict', 'sex', 'second_email', 'address', 'parent_address', 'phone', 'parent_phone', 'scrub_pict', 'sex', 'second_email', 'address', 'parent_address', 'phone', 'parent_phone',
'tshirt_size', 'role', 'department', 'dpt_option', 'semester', 'quote', 'school', 'promo', 'tshirt_size', 'role', 'department', 'dpt_option', 'semester', 'quote', 'school', 'promo',
'forum_signature'] 'forum_signature', 'is_subscriber_viewable']
widgets = { widgets = {
'date_of_birth': SelectDate, 'date_of_birth': SelectDate,
'profile_pict': forms.ClearableFileInput, 'profile_pict': forms.ClearableFileInput,

Binary file not shown.

View File

@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-20 21:11+0200\n" "POT-Creation-Date: 2016-08-22 18:13+0200\n"
"PO-Revision-Date: 2016-07-18\n" "PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia <skia@libskia.so>\n" "Last-Translator: Skia <skia@libskia.so>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n" "Language-Team: AE info <ae.info@utbm.fr>\n"
@ -66,7 +66,7 @@ msgstr "montant effectif"
msgid "number" msgid "number"
msgstr "numéro" msgstr "numéro"
#: accounting/models.py:154 core/models.py:426 core/models.py:702 #: accounting/models.py:154 core/models.py:430 core/models.py:706
#: counter/models.py:215 counter/models.py:261 eboutic/models.py:14 #: counter/models.py:215 counter/models.py:261 eboutic/models.py:14
#: eboutic/models.py:47 #: eboutic/models.py:47
msgid "date" msgid "date"
@ -218,6 +218,7 @@ msgstr "Éditer"
#: accounting/templates/accounting/bank_account_list.jinja:16 #: accounting/templates/accounting/bank_account_list.jinja:16
#: core/templates/core/file_detail.jinja:43 #: core/templates/core/file_detail.jinja:43
#: core/templates/core/group_list.jinja:13 #: core/templates/core/group_list.jinja:13
#: core/templates/core/user_edit.jinja:18
#: launderette/templates/launderette/launderette_admin.jinja:16 #: launderette/templates/launderette/launderette_admin.jinja:16
#: launderette/views.py:146 #: launderette/views.py:146
msgid "Delete" msgid "Delete"
@ -767,120 +768,124 @@ msgstr "téléphone des parents"
msgid "parent address" msgid "parent address"
msgstr "adresse des parents" msgstr "adresse des parents"
#: core/models.py:256 #: core/models.py:170
msgid "is subscriber viewable"
msgstr "profil visible par les cotisants"
#: core/models.py:257
msgid "A user with that username already exists" msgid "A user with that username already exists"
msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
#: core/models.py:372 core/templates/core/macros.jinja:17 #: core/models.py:376 core/templates/core/macros.jinja:17
#: core/templates/core/user_detail.jinja:14 #: core/templates/core/user_detail.jinja:14
#: core/templates/core/user_detail.jinja:16 #: core/templates/core/user_detail.jinja:16
#: core/templates/core/user_edit.jinja:15 #: core/templates/core/user_edit.jinja:16
msgid "Profile" msgid "Profile"
msgstr "Profil" msgstr "Profil"
#: core/models.py:403 #: core/models.py:407
msgid "Visitor" msgid "Visitor"
msgstr "Visiteur" msgstr "Visiteur"
#: core/models.py:408 #: core/models.py:412
msgid "define if we show a users stats" msgid "define if we show a users stats"
msgstr "Definit si l'on montre les statistiques de l'utilisateur" msgstr "Definit si l'on montre les statistiques de l'utilisateur"
#: core/models.py:410 #: core/models.py:414
msgid "Show your account statistics to others" msgid "Show your account statistics to others"
msgstr "Montrez vos statistiques de compte aux autres" msgstr "Montrez vos statistiques de compte aux autres"
#: core/models.py:417 #: core/models.py:421
msgid "file name" msgid "file name"
msgstr "nom du fichier" msgstr "nom du fichier"
#: core/models.py:418 core/models.py:551 #: core/models.py:422 core/models.py:555
msgid "parent" msgid "parent"
msgstr "parent" msgstr "parent"
#: core/models.py:419 core/models.py:429 #: core/models.py:423 core/models.py:433
msgid "file" msgid "file"
msgstr "fichier" msgstr "fichier"
#: core/models.py:420 #: core/models.py:424
msgid "owner" msgid "owner"
msgstr "propriétaire" msgstr "propriétaire"
#: core/models.py:421 core/models.py:557 #: core/models.py:425 core/models.py:561
msgid "edit group" msgid "edit group"
msgstr "groupe d'édition" msgstr "groupe d'édition"
#: core/models.py:422 core/models.py:558 #: core/models.py:426 core/models.py:562
msgid "view group" msgid "view group"
msgstr "groupe de vue" msgstr "groupe de vue"
#: core/models.py:423 #: core/models.py:427
msgid "is folder" msgid "is folder"
msgstr "est un dossier" msgstr "est un dossier"
#: core/models.py:424 #: core/models.py:428
msgid "mime type" msgid "mime type"
msgstr "type mime" msgstr "type mime"
#: core/models.py:425 #: core/models.py:429
msgid "size" msgid "size"
msgstr "taille" msgstr "taille"
#: core/models.py:455 #: core/models.py:459
msgid "Character '/' not authorized in name" msgid "Character '/' not authorized in name"
msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier"
#: core/models.py:458 core/models.py:463 #: core/models.py:462 core/models.py:467
msgid "Loop in folder tree" msgid "Loop in folder tree"
msgstr "Boucle dans l'arborescence des dossiers" msgstr "Boucle dans l'arborescence des dossiers"
#: core/models.py:467 #: core/models.py:471
msgid "You can not make a file be a children of a non folder file" msgid "You can not make a file be a children of a non folder file"
msgstr "" msgstr ""
"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " "Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas "
"un dossier" "un dossier"
#: core/models.py:471 #: core/models.py:475
msgid "Duplicate file" msgid "Duplicate file"
msgstr "Un fichier de ce nom existe déjà" msgstr "Un fichier de ce nom existe déjà"
#: core/models.py:481 #: core/models.py:485
msgid "You must provide a file" msgid "You must provide a file"
msgstr "Vous devez fournir un fichier" msgstr "Vous devez fournir un fichier"
#: core/models.py:506 #: core/models.py:510
msgid "Folder: " msgid "Folder: "
msgstr "Dossier : " msgstr "Dossier : "
#: core/models.py:508 #: core/models.py:512
msgid "File: " msgid "File: "
msgstr "Fichier : " msgstr "Fichier : "
#: core/models.py:550 core/models.py:554 #: core/models.py:554 core/models.py:558
msgid "page name" msgid "page name"
msgstr "nom de la page" msgstr "nom de la page"
#: core/models.py:555 #: core/models.py:559
msgid "owner group" msgid "owner group"
msgstr "groupe propriétaire" msgstr "groupe propriétaire"
#: core/models.py:586 #: core/models.py:590
msgid "Duplicate page" msgid "Duplicate page"
msgstr "Une page de ce nom existe déjà" msgstr "Une page de ce nom existe déjà"
#: core/models.py:592 #: core/models.py:596
msgid "Loop in page tree" msgid "Loop in page tree"
msgstr "Boucle dans l'arborescence des pages" msgstr "Boucle dans l'arborescence des pages"
#: core/models.py:699 #: core/models.py:703
msgid "revision" msgid "revision"
msgstr "révision" msgstr "révision"
#: core/models.py:700 #: core/models.py:704
msgid "page title" msgid "page title"
msgstr "titre de la page" msgstr "titre de la page"
#: core/models.py:701 #: core/models.py:705
msgid "page content" msgid "page content"
msgstr "contenu de la page" msgstr "contenu de la page"
@ -970,7 +975,7 @@ msgstr "Confirmation"
#: core/templates/core/delete_confirm.jinja:14 #: core/templates/core/delete_confirm.jinja:14
#: core/templates/core/file_delete_confirm.jinja:14 #: core/templates/core/file_delete_confirm.jinja:14
#: counter/templates/counter/counter_click.jinja:83 #: counter/templates/counter/counter_click.jinja:73
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
@ -1039,7 +1044,7 @@ msgid "Edit group"
msgstr "Éditer le groupe" msgstr "Éditer le groupe"
#: core/templates/core/group_edit.jinja:9 #: core/templates/core/group_edit.jinja:9
#: core/templates/core/user_edit.jinja:24 #: core/templates/core/user_edit.jinja:36
#: core/templates/core/user_group.jinja:8 #: core/templates/core/user_group.jinja:8
msgid "Update" msgid "Update"
msgstr "Mettre à jour" msgstr "Mettre à jour"
@ -1347,35 +1352,39 @@ msgstr "Éditer le profil de l'utilisateur"
msgid "Current profile: " msgid "Current profile: "
msgstr "Profil actuel : " msgstr "Profil actuel : "
#: core/templates/core/user_edit.jinja:17 #: core/templates/core/user_edit.jinja:24
msgid "Take picture"
msgstr ""
#: core/templates/core/user_edit.jinja:29
msgid "Current avatar: " msgid "Current avatar: "
msgstr "Avatar actuel : " msgstr "Avatar actuel : "
#: core/templates/core/user_edit.jinja:18 #: core/templates/core/user_edit.jinja:30
msgid "Avatar" msgid "Avatar"
msgstr "Avatar" msgstr "Avatar"
#: core/templates/core/user_edit.jinja:20 #: core/templates/core/user_edit.jinja:32
msgid "Current scrub: " msgid "Current scrub: "
msgstr "Blouse actuelle : " msgstr "Blouse actuelle : "
#: core/templates/core/user_edit.jinja:21 #: core/templates/core/user_edit.jinja:33
msgid "Scrub" msgid "Scrub"
msgstr "Blouse" msgstr "Blouse"
#: core/templates/core/user_edit.jinja:25 #: core/templates/core/user_edit.jinja:37
msgid "Username: " msgid "Username: "
msgstr "Nom d'utilisateur : " msgstr "Nom d'utilisateur : "
#: core/templates/core/user_edit.jinja:27 #: core/templates/core/user_edit.jinja:39
msgid "Account number: " msgid "Account number: "
msgstr "Numero de compte : " msgstr "Numero de compte : "
#: core/templates/core/user_edit.jinja:30 #: core/templates/core/user_edit.jinja:42
msgid "Change my password" msgid "Change my password"
msgstr "Changer mon mot de passe" msgstr "Changer mon mot de passe"
#: core/templates/core/user_edit.jinja:32 #: core/templates/core/user_edit.jinja:44
msgid "Change user password" msgid "Change user password"
msgstr "Changer le mot de passe" msgstr "Changer le mot de passe"
@ -1414,7 +1423,7 @@ msgstr "Gestion de Sith"
msgid "Subscriptions" msgid "Subscriptions"
msgstr "Cotisations" msgstr "Cotisations"
#: core/templates/core/user_tools.jinja:22 counter/views.py:468 #: core/templates/core/user_tools.jinja:22 counter/views.py:470
msgid "Counters" msgid "Counters"
msgstr "Comptoirs" msgstr "Comptoirs"
@ -1451,7 +1460,7 @@ msgstr "Ajouter un nouveau dossier"
msgid "Error creating folder %(folder_name)s: %(msg)s" msgid "Error creating folder %(folder_name)s: %(msg)s"
msgstr "Erreur de création du dossier %(folder_name)s : %(msg)s" msgstr "Erreur de création du dossier %(folder_name)s : %(msg)s"
#: core/views/files.py:62 core/views/forms.py:168 core/views/forms.py:172 #: core/views/files.py:61 core/views/forms.py:152 core/views/forms.py:156
#, python-format #, python-format
msgid "Error uploading file %(file_name)s: %(msg)s" msgid "Error uploading file %(file_name)s: %(msg)s"
msgstr "Erreur d'envoie du fichier %(file_name)s : %(msg)s" msgstr "Erreur d'envoie du fichier %(file_name)s : %(msg)s"
@ -1464,7 +1473,7 @@ msgstr "Choisir un fichier"
msgid "Choose user" msgid "Choose user"
msgstr "Choisir un utilisateur" msgstr "Choisir un utilisateur"
#: core/views/forms.py:127 #: core/views/forms.py:111
msgid "" msgid ""
"Profile: you need to be visible on the picture, in order to be recognized (e." "Profile: you need to be visible on the picture, in order to be recognized (e."
"g. by the barmen)" "g. by the barmen)"
@ -1472,18 +1481,22 @@ msgstr ""
"Photo de profil: vous devez être visible sur la photo afin d'être reconnu " "Photo de profil: vous devez être visible sur la photo afin d'être reconnu "
"(par exemple par les barmen)" "(par exemple par les barmen)"
#: core/views/forms.py:128 #: core/views/forms.py:112
msgid "Avatar: used on the forum" msgid "Avatar: used on the forum"
msgstr "Avatar : utilisé sur le forum" msgstr "Avatar : utilisé sur le forum"
#: core/views/forms.py:129 #: core/views/forms.py:113
msgid "Scrub: let other know how your scrub looks like!" msgid "Scrub: let other know how your scrub looks like!"
msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !"
#: core/views/forms.py:173 #: core/views/forms.py:157
msgid "Bad image format, only jpeg, png, and gif are accepted" msgid "Bad image format, only jpeg, png, and gif are accepted"
msgstr "Mauvais format d'image, seuls les jpeg, png, et gif sont acceptés" msgstr "Mauvais format d'image, seuls les jpeg, png, et gif sont acceptés"
#: core/views/user.py:178
msgid "User already has a profile picture"
msgstr ""
#: counter/models.py:24 #: counter/models.py:24
msgid "account id" msgid "account id"
msgstr "numéro de compte" msgstr "numéro de compte"
@ -1496,7 +1509,7 @@ msgstr "client"
msgid "customers" msgid "customers"
msgstr "clients" msgstr "clients"
#: counter/models.py:44 counter/templates/counter/counter_click.jinja:53 #: counter/models.py:44 counter/templates/counter/counter_click.jinja:43
msgid "Not enough money" msgid "Not enough money"
msgstr "Solde insuffisant" msgstr "Solde insuffisant"
@ -1610,49 +1623,45 @@ msgstr "permanence"
msgid "Customer" msgid "Customer"
msgstr "Client" msgstr "Client"
#: counter/templates/counter/counter_click.jinja:35 #: counter/templates/counter/counter_click.jinja:34
msgid "Refilling" #: launderette/templates/launderette/launderette_admin.jinja:8
msgstr "Rechargement" msgid "Selling"
msgstr "Vente"
#: counter/templates/counter/counter_click.jinja:37
msgid "Too young for that product"
msgstr "Trop jeune pour ce produit"
#: counter/templates/counter/counter_click.jinja:40 #: counter/templates/counter/counter_click.jinja:40
#: counter/templates/counter/counter_click.jinja:59 msgid "Not allowed for that product"
msgstr "Non autorisé pour ce produit"
#: counter/templates/counter/counter_click.jinja:49
#: counter/templates/counter/counter_click.jinja:83
#: launderette/templates/launderette/launderette_admin.jinja:35 #: launderette/templates/launderette/launderette_admin.jinja:35
#: launderette/templates/launderette/launderette_click.jinja:14 #: launderette/templates/launderette/launderette_click.jinja:14
msgid "Go" msgid "Go"
msgstr "Valider" msgstr "Valider"
#: counter/templates/counter/counter_click.jinja:45 #: counter/templates/counter/counter_click.jinja:51
#: launderette/templates/launderette/launderette_admin.jinja:8
msgid "Selling"
msgstr "Vente"
#: counter/templates/counter/counter_click.jinja:47
msgid "Too young for that product"
msgstr "Trop jeune pour ce produit"
#: counter/templates/counter/counter_click.jinja:50
msgid "Not allowed for that product"
msgstr "Non autorisé pour ce produit"
#: counter/templates/counter/counter_click.jinja:61
#: eboutic/templates/eboutic/eboutic_main.jinja:27 #: eboutic/templates/eboutic/eboutic_main.jinja:27
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11 #: eboutic/templates/eboutic/eboutic_makecommand.jinja:11
msgid "Basket: " msgid "Basket: "
msgstr "Panier : " msgstr "Panier : "
#: counter/templates/counter/counter_click.jinja:74 #: counter/templates/counter/counter_click.jinja:64
#: counter/templates/counter/counter_main.jinja:28 #: counter/templates/counter/counter_main.jinja:28
#: eboutic/templates/eboutic/eboutic_main.jinja:34 #: eboutic/templates/eboutic/eboutic_main.jinja:34
msgid "Total: " msgid "Total: "
msgstr "Total : " msgstr "Total : "
#: counter/templates/counter/counter_click.jinja:78 #: counter/templates/counter/counter_click.jinja:68
msgid "Finish" msgid "Finish"
msgstr "Terminer" msgstr "Terminer"
#: counter/templates/counter/counter_click.jinja:85 #: counter/templates/counter/counter_click.jinja:77
msgid "Products: " msgid "Refilling"
msgstr "Produits : " msgstr "Rechargement"
#: counter/templates/counter/counter_list.jinja:4 #: counter/templates/counter/counter_list.jinja:4
#: counter/templates/counter/counter_list.jinja:10 #: counter/templates/counter/counter_list.jinja:10
@ -1752,23 +1761,23 @@ msgstr "Mauvais identifiants"
msgid "User is not subscriber" msgid "User is not subscriber"
msgstr "L'utilisateur n'est pas cotisant." msgstr "L'utilisateur n'est pas cotisant."
#: counter/views.py:253 #: counter/views.py:257
msgid "END" msgid "END"
msgstr "FIN" msgstr "FIN"
#: counter/views.py:255 #: counter/views.py:259
msgid "CAN" msgid "CAN"
msgstr "ANN" msgstr "ANN"
#: counter/views.py:285 #: counter/views.py:289
msgid "You have not enough money to buy all the basket" msgid "You have not enough money to buy all the basket"
msgstr "Vous n'avez pas assez d'argent pour acheter le panier" msgstr "Vous n'avez pas assez d'argent pour acheter le panier"
#: counter/views.py:465 #: counter/views.py:467
msgid "Parent product" msgid "Parent product"
msgstr "Produit parent" msgstr "Produit parent"
#: counter/views.py:466 #: counter/views.py:468
msgid "Buying groups" msgid "Buying groups"
msgstr "Groupes d'achat" msgstr "Groupes d'achat"
@ -1831,7 +1840,7 @@ msgstr "Le paiement a été effectué"
msgid "Return to eboutic" msgid "Return to eboutic"
msgstr "Retourner à l'eboutic" msgstr "Retourner à l'eboutic"
#: eboutic/views.py:136 #: eboutic/views.py:138
msgid "You do not have enough money to buy the basket" msgid "You do not have enough money to buy the basket"
msgstr "Vous n'avez pas assez d'argent pour acheter le panier" msgstr "Vous n'avez pas assez d'argent pour acheter le panier"
@ -2117,14 +2126,17 @@ msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période"
msgid "You are trying to create a subscription without member" msgid "You are trying to create a subscription without member"
msgstr "Vous essayez de créer une cotisation sans membre" msgstr "Vous essayez de créer une cotisation sans membre"
#: subscription/views.py:52 #: subscription/views.py:51
msgid "A user with that email address already exists" msgid "A user with that email address already exists"
msgstr "Un utilisateur avec cette adresse email existe déjà" msgstr "Un utilisateur avec cette adresse email existe déjà"
#: subscription/views.py:67 #: subscription/views.py:66
msgid "You must either choose an existing user or create a new one properly" msgid "You must either choose an existing user or create a new one properly"
msgstr "" msgstr ""
"Vous devez soit choisir un utilisateur existant, ou en créer un proprement." "Vous devez soit choisir un utilisateur existant, ou en créer un proprement."
#~ msgid "Products: "
#~ msgstr "Produits : "
#~ msgid "Club: " #~ msgid "Club: "
#~ msgstr "Club : " #~ msgstr "Club : "

View File

@ -132,6 +132,7 @@ def migrate_users():
parent_address=(to_unicode(u['adresse_parents']) + ", " + to_unicode(u['cpostal_parents']) + " " + to_unicode(u['ville_parents'])), parent_address=(to_unicode(u['adresse_parents']) + ", " + to_unicode(u['cpostal_parents']) + " " + to_unicode(u['ville_parents'])),
phone=u['tel_portable_utl'] or "", phone=u['tel_portable_utl'] or "",
parent_phone=u['tel_parents'] or "", parent_phone=u['tel_parents'] or "",
is_subscriber_viewable=bool(u['publique_utl']),
) )
new.generate_username() new.generate_username()
new.save() new.save()
@ -602,24 +603,23 @@ def migrate_permanencies():
cur.close() cur.close()
def main(): def main():
# migrate_users() migrate_users()
# migrate_profile_pict() migrate_profile_pict()
# migrate_clubs() migrate_clubs()
# migrate_club_memberships() migrate_club_memberships()
# migrate_subscriptions() migrate_subscriptions()
# update_customer_account() update_customer_account()
# migrate_counters() migrate_counters()
# migrate_permanencies() migrate_permanencies()
# migrate_typeproducts() migrate_typeproducts()
# migrate_products() migrate_products()
# migrate_product_pict() migrate_product_pict()
# migrate_products_to_counter() migrate_products_to_counter()
# reset_customer_amount() # reset_customer_amount()
# migrate_invoices() migrate_invoices()
# migrate_refillings() migrate_refillings()
# migrate_sellings() migrate_sellings()
reset_index('core') reset_index('core', 'club', 'subscription', 'accounting', 'eboutic', 'launderette', 'counter')
# reset_index('core', 'club', 'subscription', 'accounting', 'eboutic', 'launderette', 'counter')
if __name__ == "__main__": if __name__ == "__main__":
main() main()