1
0
mirror of https://gitlab.crans.org/bde/nk20-scripts synced 2025-11-17 11:37:50 +01:00

Compare commits

..

2 Commits

Author SHA1 Message Date
hugoooo
27e619b584 Merge branch 'notes_report' into 'master'
send summary script

See merge request bde/nk20-scripts!5
2025-10-23 11:10:43 +02:00
quark
83fd753200 add price management in steal script 2025-10-21 18:13:55 +02:00

View File

@@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.db import transaction
from django.db.models import Sum from django.db.models import Sum
from note.models import RecurrentTransaction, TransactionTemplate from note.models import RecurrentTransaction, TransactionTemplate
@@ -9,25 +10,40 @@ from note.models import RecurrentTransaction, TransactionTemplate
class Command(BaseCommand): class Command(BaseCommand):
help = """ help = """
Syntax of inventory file:\n Syntax of inventory file:
DATE_START=YYYY-MM-DD HH:MM:SS\n DATE_START=YYYY-MM-DD HH:MM:SS
button_id=quantity\n button_id=quantity
# some comment\n "button_name"=quantity
...\n 'button_name'=quantity
DATE_END=YYYY-MM-DD\n # some comment
button_id=quantity\n ...
...\n DATE_END=YYYY-MM-DD
GROCERY\n button_id=quantity
button_id=quantity\n ...
...\n GROCERY
button_id=quantity
...
Syntax of price file:
button_id;price_ht;TVA
"button_name";price_ht;TVA
'button_name';price_ht;TVA
# some comment
button_name
You don't need to escape internal " or ' in button_name
"=" and ";" aren't allowed in button_name
TVA in % (i.e 5.5, 20)
price_ht in (i.e 0.928, 1.045)
""" """
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument('file', type=str) parser.add_argument('file', type=str)
parser.add_argument('-t', '--type', choices=["weekend", "weekdays"],
default="", help='Type of prices')
parser.add_argument('-d', '--doit', action='store_true',
help='Actually do it')
def handle(self, *args, **kwargs): def handle(self, *args, **kwargs):
if not kwargs['file']: prices_csv = '/var/inventory/prices.csv'
kwargs['file'] = '/var/inventory/current.inv'
file = open(kwargs['file'], 'r', encoding='utf-8') file = open(kwargs['file'], 'r', encoding='utf-8')
inv_start, inv_end, inv_grocery = {}, {}, {} inv_start, inv_end, inv_grocery = {}, {}, {}
@@ -53,6 +69,8 @@ class Command(BaseCommand):
else: else:
add_to_dict(line, inv_grocery) add_to_dict(line, inv_grocery)
file.close()
delta_real = delta_from_inv(inv_start, inv_end, inv_grocery) delta_real = delta_from_inv(inv_start, inv_end, inv_grocery)
delta_th = delta_from_note(date_start, date_end, delta_real.keys()) delta_th = delta_from_note(date_start, date_end, delta_real.keys())
@@ -69,12 +87,52 @@ class Command(BaseCommand):
else: else:
self.stdout.write(self.style.SUCCESS(text)) self.stdout.write(self.style.SUCCESS(text))
change = False
if kwargs['type']:
change = True
prices_dict = {}
prices = open(prices_csv, 'r', encoding='utf-8')
for line in prices:
if line[0] == '#':
continue
b, p, tva = line.split(';')
if b[0] == "\"" or b[0] == "'":
b = TransactionTemplate.objects.get(name=b[1:-1])
else:
b = TransactionTemplate.objects.get(pk=int(b))
prices_dict[b] = float(p) * (1 + float(tva) / 100)
prices.close()
if kwargs['type'] == 'weekdays':
for b in prices_dict:
# people steal on weekdays
prices_dict[b] = prices_dict[b] * (1 + steal_dict[b] / 100)
if change:
with transaction.atomic():
for b in prices_dict:
# dizaine de centime supérieures
# sauf si les pertes sont inférieures à 1 centimes
# 1.299€ -> 1.30€ | 1.2100€ -> 1.30€ | 1.20999€ -> 1.20€
amount = round(int(100*(prices_dict[b] + 0.05)), -1)
if kwargs['verbosity'] > 0:
self.stdout.write(f"""{b.name}:
-Old amount: {b.amount}c
-New amount: {amount}c""")
b.amount = amount
# we don't want to flood price history each week
b._no_signal = True
if kwargs['doit']:
b.save()
return 0 return 0
def add_to_dict(line, d): def add_to_dict(line, d):
pk, quantity = line.split('=') b, quantity = line.split('=')
button = TransactionTemplate.objects.get(pk=pk) if b[0] == "\"" or b[0] == "'":
button = TransactionTemplate.objects.get(name=b[1:-1])
else:
button = TransactionTemplate.objects.get(pk=int(b))
d[button] = int(quantity) d[button] = int(quantity)
return return