mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-10-31 17:13:08 +00:00 
			
		
		
		
	Improve counter app and migrate products/producttypes/refillings/sellings
This commit is contained in:
		| @@ -22,7 +22,7 @@ | ||||
|     {% for i in customer.refillings.all() %} | ||||
|         <tr> | ||||
|         <td>{{ i.date|localtime|date(DATETIME_FORMAT) }} - {{ i.date|localtime|time(DATETIME_FORMAT) }}</td> | ||||
|         <td>{{ i.operator }}</td> | ||||
|         <td><a href="{{ i.operator.get_absolute_url() }}">{{ i.operator.get_display_name() }}</a></td> | ||||
|         <td>{{ i.amount }} €</td> | ||||
|     </tr> | ||||
| {% endfor %} | ||||
|   | ||||
							
								
								
									
										29
									
								
								counter/migrations/0004_auto_20160817_1655.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								counter/migrations/0004_auto_20160817_1655.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     dependencies = [ | ||||
|         ('counter', '0003_auto_20160814_1634'), | ||||
|     ] | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.AlterField( | ||||
|             model_name='counter', | ||||
|             name='type', | ||||
|             field=models.CharField(choices=[('BAR', 'Bar'), ('OFFICE', 'Office'), ('EBOUTIC', 'Eboutic')], verbose_name='counter type', max_length=255), | ||||
|         ), | ||||
|         migrations.AlterField( | ||||
|             model_name='refilling', | ||||
|             name='bank', | ||||
|             field=models.CharField(default='OTHER', choices=[('OTHER', 'Autre'), ('SOCIETE-GENERALE', 'Société générale'), ('BANQUE-POPULAIRE', 'Banque populaire'), ('BNP', 'BNP'), ('CAISSE-EPARGNE', "Caisse d'épargne"), ('CIC', 'CIC'), ('CREDIT-AGRICOLE', 'Crédit Agricole'), ('CREDIT-MUTUEL', 'Credit Mutuel'), ('CREDIT-LYONNAIS', 'Credit Lyonnais'), ('LA-POSTE', 'La Poste')], verbose_name='bank', max_length=255), | ||||
|         ), | ||||
|         migrations.AlterField( | ||||
|             model_name='refilling', | ||||
|             name='payment_method', | ||||
|             field=models.CharField(default='CASH', choices=[('CHECK', 'Check'), ('CASH', 'Cash')], verbose_name='payment method', max_length=255), | ||||
|         ), | ||||
|     ] | ||||
							
								
								
									
										24
									
								
								counter/migrations/0005_auto_20160817_2251.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								counter/migrations/0005_auto_20160817_2251.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     dependencies = [ | ||||
|         ('counter', '0004_auto_20160817_1655'), | ||||
|     ] | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.AlterField( | ||||
|             model_name='product', | ||||
|             name='code', | ||||
|             field=models.CharField(verbose_name='code', max_length=10, blank=True), | ||||
|         ), | ||||
|         migrations.AlterField( | ||||
|             model_name='product', | ||||
|             name='name', | ||||
|             field=models.CharField(verbose_name='name', max_length=64), | ||||
|         ), | ||||
|     ] | ||||
							
								
								
									
										19
									
								
								counter/migrations/0006_auto_20160817_2253.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								counter/migrations/0006_auto_20160817_2253.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     dependencies = [ | ||||
|         ('counter', '0005_auto_20160817_2251'), | ||||
|     ] | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.AlterField( | ||||
|             model_name='product', | ||||
|             name='code', | ||||
|             field=models.CharField(blank=True, max_length=16, verbose_name='code'), | ||||
|         ), | ||||
|     ] | ||||
							
								
								
									
										21
									
								
								counter/migrations/0007_selling_club.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								counter/migrations/0007_selling_club.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     dependencies = [ | ||||
|         ('club', '0004_auto_20160813_1551'), | ||||
|         ('counter', '0006_auto_20160817_2253'), | ||||
|     ] | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.AddField( | ||||
|             model_name='selling', | ||||
|             name='club', | ||||
|             field=models.ForeignKey(default=1, related_name='sellings', to='club.Club'), | ||||
|             preserve_default=False, | ||||
|         ), | ||||
|     ] | ||||
							
								
								
									
										19
									
								
								counter/migrations/0008_auto_20160818_0231.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								counter/migrations/0008_auto_20160818_0231.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     dependencies = [ | ||||
|         ('counter', '0007_selling_club'), | ||||
|     ] | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.AlterField( | ||||
|             model_name='selling', | ||||
|             name='label', | ||||
|             field=models.CharField(max_length=64, verbose_name='label'), | ||||
|         ), | ||||
|     ] | ||||
| @@ -74,10 +74,10 @@ class Product(models.Model): | ||||
|     """ | ||||
|     This describes a product, with all its related informations | ||||
|     """ | ||||
|     name = models.CharField(_('name'), max_length=30) | ||||
|     name = models.CharField(_('name'), max_length=64) | ||||
|     description = models.TextField(_('description'), blank=True) | ||||
|     product_type = models.ForeignKey(ProductType, related_name='products', null=True, blank=True) | ||||
|     code = models.CharField(_('code'), max_length=10) | ||||
|     code = models.CharField(_('code'), max_length=16, blank=True) | ||||
|     purchase_price = CurrencyField(_('purchase price')) | ||||
|     selling_price = CurrencyField(_('selling price')) | ||||
|     special_selling_price = CurrencyField(_('special selling price')) | ||||
| @@ -105,7 +105,7 @@ class Counter(models.Model): | ||||
|     name = models.CharField(_('name'), max_length=30) | ||||
|     club = models.ForeignKey(Club, related_name="counters") | ||||
|     products = models.ManyToManyField(Product, related_name="counters", blank=True) | ||||
|     type = models.CharField(_('subscription type'), | ||||
|     type = models.CharField(_('counter type'), | ||||
|             max_length=255, | ||||
|             choices=[('BAR',_('Bar')), ('OFFICE',_('Office')), ('EBOUTIC',_('Eboutic'))]) | ||||
|     sellers = models.ManyToManyField(Subscriber, verbose_name=_('sellers'), related_name='counters', blank=True) | ||||
| @@ -208,9 +208,9 @@ class Refilling(models.Model): | ||||
|     customer = models.ForeignKey(Customer, related_name="refillings", blank=False) | ||||
|     date = models.DateTimeField(_('date'), auto_now=True) | ||||
|     payment_method = models.CharField(_('payment method'), max_length=255, | ||||
|             choices=settings.SITH_COUNTER_PAYMENT_METHOD, default='cash') | ||||
|             choices=settings.SITH_COUNTER_PAYMENT_METHOD, default='CASH') | ||||
|     bank = models.CharField(_('bank'), max_length=255, | ||||
|             choices=settings.SITH_COUNTER_BANK, default='other') | ||||
|             choices=settings.SITH_COUNTER_BANK, default='OTHER') | ||||
|     is_validated = models.BooleanField(_('is validated'), default=False) | ||||
|  | ||||
|     class Meta: | ||||
| @@ -234,9 +234,10 @@ class Selling(models.Model): | ||||
|     """ | ||||
|     Handle the sellings | ||||
|     """ | ||||
|     label = models.CharField(_("label"), max_length=30) | ||||
|     label = models.CharField(_("label"), max_length=64) | ||||
|     product = models.ForeignKey(Product, related_name="sellings", null=True, blank=True) | ||||
|     counter = models.ForeignKey(Counter, related_name="sellings", blank=False) | ||||
|     club = models.ForeignKey(Club, related_name="sellings", blank=False) | ||||
|     unit_price = CurrencyField(_('unit price')) | ||||
|     quantity = models.IntegerField(_('quantity')) | ||||
|     seller = models.ForeignKey(User, related_name="sellings_as_operator", blank=False) | ||||
|   | ||||
| @@ -1,13 +0,0 @@ | ||||
| {% extends "core/base.jinja" %} | ||||
|  | ||||
| {% block content %} | ||||
| <h2>{% trans %}Edit counter{% endtrans %}</h2> | ||||
| <form action="" method="post"> | ||||
|     {% csrf_token %} | ||||
|     {{ form.as_p() }} | ||||
|     <p><input type="submit" value="{% trans %}Save{% endtrans %}" /></p> | ||||
| </form> | ||||
| {% endblock %} | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -242,7 +242,7 @@ class CounterClick(DetailView): | ||||
|                 if uprice * infos['qty'] > self.customer.amount: | ||||
|                     raise DataError(_("You have not enough money to buy all the basket")) | ||||
|                 request.session['last_basket'].append("%d x %s" % (infos['qty'], p.name)) | ||||
|                 s = Selling(label=p.name, product=p, counter=self.object, unit_price=uprice, | ||||
|                 s = Selling(label=p.name, product=p, club=p.club, counter=self.object, unit_price=uprice, | ||||
|                        quantity=infos['qty'], seller=self.operator, customer=self.customer) | ||||
|                 s.save() | ||||
|             request.session['last_customer'] = self.customer.user.get_display_name() | ||||
| @@ -336,7 +336,7 @@ class CounterEditView(CanEditPropMixin, UpdateView): | ||||
|                 'products':CheckboxSelectMultiple, | ||||
|                 'sellers':CheckboxSelectMultiple}) | ||||
|     pk_url_kwarg = "counter_id" | ||||
|     template_name = 'counter/counter_edit.jinja' | ||||
|     template_name = 'core/edit.jinja' | ||||
|  | ||||
| class CounterCreateView(CanEditMixin, CreateView): | ||||
|     """ | ||||
| @@ -345,7 +345,7 @@ class CounterCreateView(CanEditMixin, CreateView): | ||||
|     model = Counter | ||||
|     form_class = modelform_factory(Counter, fields=['name', 'club', 'type', 'products'], | ||||
|             widgets={'products':CheckboxSelectMultiple}) | ||||
|     template_name = 'counter/counter_edit.jinja' | ||||
|     template_name = 'core/create.jinja' | ||||
|  | ||||
| class CounterDeleteView(CanEditMixin, DeleteView): | ||||
|     """ | ||||
|   | ||||
| @@ -291,7 +291,7 @@ class ClickTokenForm(forms.BaseForm): | ||||
|                     t.borrow_date = datetime.now().replace(tzinfo=pytz.UTC) | ||||
|                     t.save() | ||||
|                     price = settings.SITH_LAUNDERETTE_PRICES[t.type] | ||||
|                     s = Selling(label="Jeton "+t.get_type_display()+" N°"+t.name, product=None, counter=counter, unit_price=price, | ||||
|                     s = Selling(label="Jeton "+t.get_type_display()+" N°"+t.name, club=counter.club, product=None, counter=counter, unit_price=price, | ||||
|                             quantity=1, seller=operator, customer=customer) | ||||
|                     s.save() | ||||
|                     total += price | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| @@ -6,7 +6,7 @@ | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2016-08-14 16:36+0200\n" | ||||
| "POT-Creation-Date: 2016-08-15 21:41+0200\n" | ||||
| "PO-Revision-Date: 2016-07-18\n" | ||||
| "Last-Translator: Skia <skia@libskia.so>\n" | ||||
| "Language-Team: AE info <ae.info@utbm.fr>\n" | ||||
| @@ -444,11 +444,11 @@ msgstr "Éditer le club" | ||||
|  | ||||
| #: club/templates/club/club_edit.jinja:8 | ||||
| #: club/templates/club/club_edit_prop.jinja:8 | ||||
| #: core/templates/core/create.jinja:8 core/templates/core/edit.jinja:12 | ||||
| #: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:12 | ||||
| #: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8 | ||||
| #: core/templates/core/pagerev_edit.jinja:24 | ||||
| #: counter/templates/counter/counter_edit.jinja:8 | ||||
| #: subscription/templates/subscription/subscription.jinja:12 | ||||
| #: subscription/templates/subscription/subscription.jinja:22 | ||||
| msgid "Save" | ||||
| msgstr "Sauver" | ||||
|  | ||||
| @@ -929,11 +929,11 @@ msgstr "Clubs" | ||||
| msgid "Services" | ||||
| msgstr "Services" | ||||
|  | ||||
| #: core/templates/core/base.jinja:55 | ||||
| #: core/templates/core/base.jinja:56 | ||||
| msgid "Site made by good people" | ||||
| msgstr "Site réalisé par des gens bons" | ||||
|  | ||||
| #: core/templates/core/create.jinja:4 | ||||
| #: core/templates/core/create.jinja:4 core/templates/core/create.jinja.py:8 | ||||
| #, python-format | ||||
| msgid "Create %(name)s" | ||||
| msgstr "Créer %(name)s" | ||||
| @@ -1274,10 +1274,12 @@ msgstr "Profil de %(user_name)s" | ||||
|  | ||||
| #: core/templates/core/user_detail.jinja:12 | ||||
| #: core/templates/core/user_edit.jinja:15 | ||||
| #: core/templates/core/user_mini.jinja:4 | ||||
| msgid "Profile" | ||||
| msgstr "Profil" | ||||
|  | ||||
| #: core/templates/core/user_detail.jinja:21 | ||||
| #: core/templates/core/user_mini.jinja:12 | ||||
| msgid "Born: " | ||||
| msgstr "Né le : " | ||||
|  | ||||
| @@ -1286,6 +1288,7 @@ msgid "Option: " | ||||
| msgstr "Filière : " | ||||
|  | ||||
| #: core/templates/core/user_detail.jinja:32 | ||||
| #: core/templates/core/user_mini.jinja:16 | ||||
| msgid "Promo: " | ||||
| msgstr "Promo : " | ||||
|  | ||||
| @@ -1476,9 +1479,9 @@ msgstr "prix de vente spécial" | ||||
| msgid "product" | ||||
| msgstr "produit" | ||||
|  | ||||
| #: counter/models.py:108 subscription/models.py:29 | ||||
| msgid "subscription type" | ||||
| msgstr "type d'inscription" | ||||
| #: counter/models.py:108 | ||||
| msgid "counter type" | ||||
| msgstr "type de comptoir" | ||||
|  | ||||
| #: counter/models.py:110 | ||||
| msgid "Bar" | ||||
| @@ -1999,6 +2002,10 @@ msgstr "Mauvais type de cotisation" | ||||
| msgid "Bad payment method" | ||||
| msgstr "Mauvais type de paiement" | ||||
|  | ||||
| #: subscription/models.py:29 | ||||
| msgid "subscription type" | ||||
| msgstr "type d'inscription" | ||||
|  | ||||
| #: subscription/models.py:32 | ||||
| msgid "subscription start" | ||||
| msgstr "début de la cotisation" | ||||
|   | ||||
							
								
								
									
										200
									
								
								migrate.py
									
									
									
									
									
								
							
							
						
						
									
										200
									
								
								migrate.py
									
									
									
									
									
								
							| @@ -3,6 +3,7 @@ import os | ||||
| import django | ||||
| import random | ||||
| from io import StringIO | ||||
| from pytz import timezone | ||||
|  | ||||
| os.environ["DJANGO_SETTINGS_MODULE"] = "sith.settings" | ||||
| os.environ['DJANGO_COLORS'] = 'nocolor' | ||||
| @@ -12,11 +13,12 @@ from django.db import IntegrityError | ||||
| from django.conf import settings | ||||
| from django.core.management import call_command | ||||
| from django.db import connection | ||||
| from django.forms import ValidationError | ||||
|  | ||||
|  | ||||
| from core.models import User, SithFile | ||||
| from club.models import Club, Membership | ||||
| from counter.models import Customer | ||||
| from counter.models import Customer, Counter, Selling, Refilling, Product, ProductType | ||||
| from subscription.models import Subscription, Subscriber | ||||
|  | ||||
| db = MySQLdb.connect( | ||||
| @@ -85,7 +87,7 @@ def migrate_users(): | ||||
|             email = "no_email_%s@git.an" % random.randrange(4000, 40000) | ||||
|         return email | ||||
|  | ||||
|     c = db.cursor(MySQLdb.cursors.DictCursor) | ||||
|     c = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     c.execute(""" | ||||
|     SELECT * | ||||
|     FROM utilisateurs utl | ||||
| @@ -97,7 +99,7 @@ def migrate_users(): | ||||
|     ON uxtra.id_utilisateur = utl.id_utilisateur | ||||
|     LEFT JOIN loc_ville ville | ||||
|     ON utl.id_ville = ville.id_ville | ||||
|     -- WHERE utl.id_utilisateur = 9248 | ||||
|     -- WHERE utl.id_utilisateur = 9360 | ||||
|     """) | ||||
|     User.objects.filter(id__gt=0).delete() | ||||
|     print("Users deleted") | ||||
| @@ -178,7 +180,7 @@ def migrate_profile_pict(): | ||||
|                 print(repr(e)) | ||||
|  | ||||
| def migrate_clubs(): | ||||
|     cur = db.cursor(MySQLdb.cursors.DictCursor) | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM asso asso | ||||
| @@ -213,7 +215,7 @@ def migrate_clubs(): | ||||
|     cur.close() | ||||
|  | ||||
| def migrate_club_memberships(): | ||||
|     cur = db.cursor(MySQLdb.cursors.DictCursor) | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM asso_membre | ||||
| @@ -268,7 +270,7 @@ def migrate_subscriptions(): | ||||
|             5: "EBOUTIC", | ||||
|             0: "OTHER", | ||||
|             } | ||||
|     cur = db.cursor(MySQLdb.cursors.DictCursor) | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM ae_cotisations | ||||
| @@ -297,7 +299,7 @@ def migrate_subscriptions(): | ||||
|     cur.close() | ||||
|  | ||||
| def update_customer_account(): | ||||
|     cur = db.cursor(MySQLdb.cursors.DictCursor) | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM ae_carte carte | ||||
| @@ -314,13 +316,185 @@ def update_customer_account(): | ||||
|                 print("FAIL to update customer account for %s: %s" % (r['id_cotisation'], repr(e))) | ||||
|     cur.close() | ||||
|  | ||||
| def migrate_counters(): | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM cpt_comptoir | ||||
|     """) | ||||
|     Counter.objects.all().delete() | ||||
|     for r in cur.fetchall(): | ||||
|         try: | ||||
|             club = Club.objects.filter(id=r['id_assocpt']).first() | ||||
|             new = Counter( | ||||
|                     id=r['id_comptoir'], | ||||
|                     name=to_unicode(r['nom_cpt']), | ||||
|                     club=club, | ||||
|                     type="OFFICE", | ||||
|                     ) | ||||
|             new.save() | ||||
|         except Exception as e: | ||||
|                 print("FAIL to migrate counter %s: %s" % (r['id_comptoir'], repr(e))) | ||||
|     cur.close() | ||||
|  | ||||
| def migrate_refillings(): | ||||
|     BANK = { | ||||
|             0: "OTHER", | ||||
|             1: "SOCIETE-GENERALE", | ||||
|             2: "BANQUE-POPULAIRE", | ||||
|             3: "BNP", | ||||
|             4: "CAISSE-EPARGNE", | ||||
|             5: "CIC", | ||||
|             6: "CREDIT-AGRICOLE", | ||||
|             7: "CREDIT-MUTUEL", | ||||
|             8: "CREDIT-LYONNAIS", | ||||
|             9: "LA-POSTE", | ||||
|             100: "OTHER", | ||||
|             None: "OTHER", | ||||
|             } | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM cpt_rechargements | ||||
|     """) | ||||
|     Refilling.objects.all().delete() | ||||
|     print("Refillings deleted") | ||||
|     for c in Customer.objects.all(): | ||||
|         c.amount = 0 | ||||
|         c.save() | ||||
|     print("Customer amount reset") | ||||
|     fail = 100 | ||||
|     root_cust = Customer.objects.filter(user__id=0).first() | ||||
|     mde = Counter.objects.filter(id=1).first() | ||||
|     for r in cur.fetchall(): | ||||
|         try: | ||||
|             cust = Customer.objects.filter(user__id=r['id_utilisateur']).first() | ||||
|             user = User.objects.filter(id=r['id_utilisateur']).first() | ||||
|             if not cust: | ||||
|                 if not user: | ||||
|                     cust = root_cust | ||||
|                 else: | ||||
|                     cust = Customer(user=user, amount=0, account_id=Customer.generate_account_id(fail)) | ||||
|                     cust.save() | ||||
|                     fail += 1 | ||||
|             op = User.objects.filter(id=r['id_utilisateur_operateur']).first() | ||||
|             counter = Counter.objects.filter(id=r['id_comptoir']).first() | ||||
|             new = Refilling( | ||||
|                     id=r['id_rechargement'], | ||||
|                     counter=counter or mde, | ||||
|                     customer=cust, | ||||
|                     operator=op or root_cust.user, | ||||
|                     amount=r['montant_rech']/100, | ||||
|                     bank=BANK[r['banque_rech']], | ||||
|                     ) | ||||
|             for f in new._meta.local_fields: | ||||
|                 if f.name == "date": | ||||
|                     f.auto_now = False | ||||
|             new.date = r['date_rech'].replace(tzinfo=timezone('Europe/Paris')) | ||||
|             new.save() | ||||
|         except Exception as e: | ||||
|                 print("FAIL to migrate refilling %s for %s: %s" % (r['id_rechargement'], r['id_utilisateur'], repr(e))) | ||||
|     cur.close() | ||||
|  | ||||
| def migrate_typeproducts(): | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM cpt_type_produit | ||||
|     """) | ||||
|     ProductType.objects.all().delete() | ||||
|     print("Product types deleted") | ||||
|     for r in cur.fetchall(): | ||||
|         try: | ||||
|             new = ProductType( | ||||
|                     id=r['id_typeprod'], | ||||
|                     name=to_unicode(r['nom_typeprod']), | ||||
|                     description=to_unicode(r['description_typeprod']), | ||||
|                     ) | ||||
|             new.save() | ||||
|         except Exception as e: | ||||
|                 print("FAIL to migrate product type %s: %s" % (r['nom_typeprod'], repr(e))) | ||||
|     cur.close() | ||||
|  | ||||
| def migrate_products(): | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM cpt_produits | ||||
|     """) | ||||
|     Product.objects.all().delete() | ||||
|     print("Product deleted") | ||||
|     for r in cur.fetchall(): | ||||
|         try: | ||||
|             type = ProductType.objects.filter(id=r['id_typeprod']).first() | ||||
|             club = Club.objects.filter(id=r['id_assocpt']).first() | ||||
|             new = Product( | ||||
|                     id=r['id_produit'], | ||||
|                     product_type=type, | ||||
|                     name=to_unicode(r['nom_prod']), | ||||
|                     description=to_unicode(r['description_prod']), | ||||
|                     code=to_unicode(r['cbarre_prod']), | ||||
|                     purchase_price=r['prix_achat_prod'], | ||||
|                     selling_price=r['prix_vente_prod'], | ||||
|                     special_selling_price=r['prix_vente_barman_prod'], | ||||
|                     club=club, | ||||
|                     ) | ||||
|             new.save() | ||||
|         except Exception as e: | ||||
|                 print("FAIL to migrate product %s: %s" % (r['nom_prod'], repr(e))) | ||||
|     cur.close() | ||||
|  | ||||
| def migrate_sellings(): | ||||
|     cur = db.cursor(MySQLdb.cursors.SSDictCursor) | ||||
|     cur.execute(""" | ||||
|     SELECT * | ||||
|     FROM cpt_vendu ven | ||||
|     LEFT JOIN cpt_debitfacture fac | ||||
|     ON ven.id_facture = fac.id_facture | ||||
|     WHERE fac.mode_paiement = 'AE' | ||||
|     """) | ||||
|     Selling.objects.all().delete() | ||||
|     print("Selling deleted") | ||||
|     for r in cur: | ||||
|         try: | ||||
|             product = Product.objects.filter(id=r['id_produit']).first() | ||||
|             club = Club.objects.filter(id=r['id_assocpt']).first() | ||||
|             counter = Counter.objects.filter(id=r['id_comptoir']).first() | ||||
|             op = User.objects.filter(id=r['id_utilisateur']).first() | ||||
|             customer = Customer.objects.filter(user__id=r['id_utilisateur_client']).first() | ||||
|             new = Selling( | ||||
|                     label=product.name, | ||||
|                     counter=counter, | ||||
|                     club=club, | ||||
|                     product=product, | ||||
|                     seller=op, | ||||
|                     customer=customer, | ||||
|                     unit_price=r['prix_unit']/100, | ||||
|                     quantity=r['quantite'], | ||||
|                     ) | ||||
|             for f in new._meta.local_fields: | ||||
|                 if f.name == "date": | ||||
|                     f.auto_now = False | ||||
|             new.date = r['date_facture'].replace(tzinfo=timezone('Europe/Paris')) | ||||
|             new.save() | ||||
|         except ValidationError as e: | ||||
|             print(repr(e) + " for %s (%s)" % (customer, customer.user.id)) | ||||
|         except Exception as e: | ||||
|             print("FAIL to migrate selling %s: %s" % (r['id_facture'], repr(e))) | ||||
|     cur.close() | ||||
|  | ||||
| def main(): | ||||
|     migrate_users() | ||||
|     migrate_profile_pict() | ||||
|     migrate_clubs() | ||||
|     migrate_club_memberships() | ||||
|     migrate_subscriptions() | ||||
|     update_customer_account() | ||||
|     # migrate_users() | ||||
|     # migrate_profile_pict() | ||||
|     # migrate_clubs() | ||||
|     # migrate_club_memberships() | ||||
|     # migrate_subscriptions() | ||||
|     # update_customer_account() | ||||
|     # migrate_counters() | ||||
|     migrate_refillings() | ||||
|     migrate_typeproducts() | ||||
|     migrate_products() | ||||
|     migrate_sellings() | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
|   | ||||
| @@ -273,9 +273,9 @@ SITH_SUBSCRIPTION_LOCATIONS = [ | ||||
|         ] | ||||
|  | ||||
| SITH_COUNTER_BARS = [ | ||||
|         (1, "Foyer"), | ||||
|         (2, "MDE"), | ||||
|         (3, "La Gommette"), | ||||
|         (1, "MDE"), | ||||
|         (2, "Foyer"), | ||||
|         (35, "La Gommette"), | ||||
|         ] | ||||
|  | ||||
| SITH_COUNTER_PAYMENT_METHOD = [ | ||||
| @@ -285,9 +285,15 @@ SITH_COUNTER_PAYMENT_METHOD = [ | ||||
|  | ||||
| SITH_COUNTER_BANK = [ | ||||
|         ('OTHER', 'Autre'), | ||||
|         ('LA-POSTE', 'La Poste'), | ||||
|         ('CREDIT-AGRICOLE', 'Credit Agricole'), | ||||
|         ('SOCIETE-GENERALE', 'Société générale'), | ||||
|         ('BANQUE-POPULAIRE', 'Banque populaire'), | ||||
|         ('BNP', 'BNP'), | ||||
|         ('CAISSE-EPARGNE', 'Caisse d\'épargne'), | ||||
|         ('CIC', 'CIC'), | ||||
|         ('CREDIT-AGRICOLE', 'Crédit Agricole'), | ||||
|         ('CREDIT-MUTUEL', 'Credit Mutuel'), | ||||
|         ('CREDIT-LYONNAIS', 'Credit Lyonnais'), | ||||
|         ('LA-POSTE', 'La Poste'), | ||||
|         ] | ||||
|  | ||||
| # Subscription durations are in semestres | ||||
|   | ||||
		Reference in New Issue
	
	Block a user