mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 22:23:23 +00:00
Merge branch 'bilanTresorerie' into 'master'
Accounting tests See merge request !37
This commit is contained in:
commit
0280a65623
@ -3,9 +3,11 @@ from django.core.urlresolvers import reverse
|
|||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from datetime import date, datetime
|
||||||
|
|
||||||
from core.models import User
|
from core.models import User
|
||||||
from counter.models import Counter
|
from counter.models import Counter
|
||||||
|
from accounting.models import GeneralJournal, Operation, Label, AccountingType, SimplifiedAccountingType
|
||||||
|
|
||||||
|
|
||||||
class RefoundAccountTest(TestCase):
|
class RefoundAccountTest(TestCase):
|
||||||
@ -17,7 +19,7 @@ class RefoundAccountTest(TestCase):
|
|||||||
self.skia.customer.save()
|
self.skia.customer.save()
|
||||||
|
|
||||||
def test_permission_denied(self):
|
def test_permission_denied(self):
|
||||||
self.client.login(useername='guy', password='plop')
|
self.client.login(username='guy', password='plop')
|
||||||
response_post = self.client.post(reverse("accounting:refound_account"),
|
response_post = self.client.post(reverse("accounting:refound_account"),
|
||||||
{"user": self.skia.id})
|
{"user": self.skia.id})
|
||||||
response_get = self.client.get(reverse("accounting:refound_account"))
|
response_get = self.client.get(reverse("accounting:refound_account"))
|
||||||
@ -45,3 +47,153 @@ class RefoundAccountTest(TestCase):
|
|||||||
self.assertTrue('<form action="" method="post">' in str(response_get.content))
|
self.assertTrue('<form action="" method="post">' in str(response_get.content))
|
||||||
self.assertFalse(response_post.status_code == 403)
|
self.assertFalse(response_post.status_code == 403)
|
||||||
self.assertTrue(self.skia.customer.amount == 0)
|
self.assertTrue(self.skia.customer.amount == 0)
|
||||||
|
|
||||||
|
class JournalTest(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
call_command("populate")
|
||||||
|
self.journal = GeneralJournal.objects.filter(id = 1).first()
|
||||||
|
|
||||||
|
def test_permission_granted(self):
|
||||||
|
self.client.login(username='comptable', password='plop')
|
||||||
|
response_get = self.client.get(reverse("accounting:journal_details", args=[self.journal.id]))
|
||||||
|
|
||||||
|
self.assertTrue(response_get.status_code == 200)
|
||||||
|
self.assertTrue('<td>M\\xc3\\xa9thode de paiement</td>' in str(response_get.content))
|
||||||
|
|
||||||
|
def test_permission_not_granted(self):
|
||||||
|
self.client.login(username='skia', password='plop')
|
||||||
|
response_get = self.client.get(reverse("accounting:journal_details", args=[self.journal.id]))
|
||||||
|
|
||||||
|
self.assertTrue(response_get.status_code == 403)
|
||||||
|
self.assertFalse('<td>M\xc3\xa9thode de paiement</td>' in str(response_get.content))
|
||||||
|
|
||||||
|
class OperationTest(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
call_command("populate")
|
||||||
|
self.journal = GeneralJournal.objects.filter(id = 1).first()
|
||||||
|
self.skia = User.objects.filter(username='skia').first()
|
||||||
|
at = AccountingType(code='443', label="Ce code n'existe pas", movement_type='CREDIT')
|
||||||
|
at.save()
|
||||||
|
l = Label(club_account= self.journal.club_account, name='bob')
|
||||||
|
l.save()
|
||||||
|
self.client.login(username='comptable', password='plop')
|
||||||
|
self.op1 = Operation(journal=self.journal, date=date.today(), amount=1,
|
||||||
|
remark="Test bilan", mode='CASH', done=True, label=l,
|
||||||
|
accounting_type=at, target_type='USER', target_id=self.skia.id)
|
||||||
|
self.op1.save()
|
||||||
|
self.op2 = Operation(journal=self.journal, date=date.today(), amount=2,
|
||||||
|
remark="Test bilan", mode='CASH', done=True, label=l,
|
||||||
|
accounting_type=at, target_type='USER', target_id=self.skia.id)
|
||||||
|
self.op2.save()
|
||||||
|
|
||||||
|
def test_new_operation(self):
|
||||||
|
self.client.login(username='comptable', password='plop')
|
||||||
|
at = AccountingType.objects.filter(code = '604').first()
|
||||||
|
response = self.client.post(reverse('accounting:op_new',
|
||||||
|
args=[self.journal.id]),
|
||||||
|
{'amount': 30,
|
||||||
|
'remark' : "Un gros test",
|
||||||
|
'journal' : self.journal.id,
|
||||||
|
'target_type' : 'OTHER',
|
||||||
|
'target_id' : '',
|
||||||
|
'target_label' : "Le fantome de la nuit",
|
||||||
|
'date' : '04/12/2020',
|
||||||
|
'mode' : 'CASH',
|
||||||
|
'cheque_number' : '',
|
||||||
|
'invoice' : '',
|
||||||
|
'simpleaccounting_type' : '',
|
||||||
|
'accounting_type': at.id,
|
||||||
|
'label' : '',
|
||||||
|
'done' : False,
|
||||||
|
})
|
||||||
|
self.assertFalse(response.status_code == 403)
|
||||||
|
self.assertTrue(self.journal.operations.filter(target_label = "Le fantome de la nuit").exists())
|
||||||
|
response_get = self.client.get(reverse("accounting:journal_details", args=[self.journal.id]))
|
||||||
|
self.assertTrue('<td>Le fantome de la nuit</td>' in str(response_get.content))
|
||||||
|
|
||||||
|
def test_bad_new_operation(self):
|
||||||
|
self.client.login(username='comptable', password='plop')
|
||||||
|
at = AccountingType.objects.filter(code = '604').first()
|
||||||
|
response = self.client.post(reverse('accounting:op_new',
|
||||||
|
args=[self.journal.id]),
|
||||||
|
{'amount': 30,
|
||||||
|
'remark' : "Un gros test",
|
||||||
|
'journal' : self.journal.id,
|
||||||
|
'target_type' : 'OTHER',
|
||||||
|
'target_id' : '',
|
||||||
|
'target_label' : "Le fantome de la nuit",
|
||||||
|
'date' : '04/12/2020',
|
||||||
|
'mode' : 'CASH',
|
||||||
|
'cheque_number' : '',
|
||||||
|
'invoice' : '',
|
||||||
|
'simpleaccounting_type' : '',
|
||||||
|
'accounting_type': '',
|
||||||
|
'label' : '',
|
||||||
|
'done' : False,
|
||||||
|
})
|
||||||
|
self.assertTrue('Vous devez fournir soit un type comptable simplifi\\xc3\\xa9 ou un type comptable standard' in str(response.content))
|
||||||
|
|
||||||
|
def test_new_operation_not_authorized(self):
|
||||||
|
self.client.login(username='skia', password='plop')
|
||||||
|
at = AccountingType.objects.filter(code = '604').first()
|
||||||
|
response = self.client.post(reverse('accounting:op_new',
|
||||||
|
args=[self.journal.id]),
|
||||||
|
{'amount': 30,
|
||||||
|
'remark' : "Un gros test",
|
||||||
|
'journal' : self.journal.id,
|
||||||
|
'target_type' : 'OTHER',
|
||||||
|
'target_id' : '',
|
||||||
|
'target_label' : "Le fantome du jour",
|
||||||
|
'date' : '04/12/2020',
|
||||||
|
'mode' : 'CASH',
|
||||||
|
'cheque_number' : '',
|
||||||
|
'invoice' : '',
|
||||||
|
'simpleaccounting_type' : '',
|
||||||
|
'accounting_type': at.id,
|
||||||
|
'label' : '',
|
||||||
|
'done' : False,
|
||||||
|
})
|
||||||
|
self.assertTrue(response.status_code == 403)
|
||||||
|
self.assertFalse(self.journal.operations.filter(target_label = "Le fantome du jour").exists())
|
||||||
|
|
||||||
|
def test__operation_simple_accounting(self):
|
||||||
|
self.client.login(username='comptable', password='plop')
|
||||||
|
sat = SimplifiedAccountingType.objects.all().first()
|
||||||
|
response = self.client.post(reverse('accounting:op_new',
|
||||||
|
args=[self.journal.id]),
|
||||||
|
{'amount': 23,
|
||||||
|
'remark' : "Un gros test",
|
||||||
|
'journal' : self.journal.id,
|
||||||
|
'target_type' : 'OTHER',
|
||||||
|
'target_id' : '',
|
||||||
|
'target_label' : "Le fantome de l'aurore",
|
||||||
|
'date' : '04/12/2020',
|
||||||
|
'mode' : 'CASH',
|
||||||
|
'cheque_number' : '',
|
||||||
|
'invoice' : '',
|
||||||
|
'simpleaccounting_type' : sat.id,
|
||||||
|
'accounting_type': '',
|
||||||
|
'label' : '',
|
||||||
|
'done' : False,
|
||||||
|
})
|
||||||
|
self.assertFalse(response.status_code == 403)
|
||||||
|
self.assertTrue(self.journal.operations.filter(amount=23).exists())
|
||||||
|
response_get = self.client.get(reverse("accounting:journal_details", args=[self.journal.id]))
|
||||||
|
self.assertTrue("<td>Le fantome de l'aurore</td>" in str(response_get.content))
|
||||||
|
self.assertTrue(self.journal.operations.filter(amount=23).values('accounting_type').first()['accounting_type'] == AccountingType.objects.filter(code=6).values('id').first()['id'])
|
||||||
|
|
||||||
|
def test_nature_statement(self):
|
||||||
|
self.client.login(username='comptable', password='plop')
|
||||||
|
response_get = self.client.get(reverse("accounting:journal_nature_statement", args=[self.journal.id]))
|
||||||
|
self.assertTrue("bob (Troll Pench\\xc3\\xa9) : 3.00" in str(response_get.content))
|
||||||
|
|
||||||
|
def test_person_statement(self):
|
||||||
|
self.client.login(username='comptable', password='plop')
|
||||||
|
response_get = self.client.get(reverse("accounting:journal_person_statement", args=[self.journal.id]))
|
||||||
|
self.assertTrue("S' Kia</a></td>\\n \\n <td>3.00</td>" in str(response_get.content))
|
||||||
|
|
||||||
|
|
||||||
|
def test_accounting_statement(self):
|
||||||
|
self.client.login(username='comptable', password='plop')
|
||||||
|
response_get = self.client.get(reverse("accounting:journal_accounting_statement", args=[self.journal.id]))
|
||||||
|
self.assertTrue("<td>443 - Cr\\xc3\\xa9dit - Ce code n'existe pas</td>\\n <td>3.00</td>" in str(response_get.content))
|
@ -10,7 +10,7 @@ from django.contrib.sites.models import Site
|
|||||||
|
|
||||||
|
|
||||||
from core.models import Group, User, Page, PageRev, SithFile
|
from core.models import Group, User, Page, PageRev, SithFile
|
||||||
from accounting.models import GeneralJournal, BankAccount, ClubAccount, Operation, AccountingType, Company
|
from accounting.models import GeneralJournal, BankAccount, ClubAccount, Operation, AccountingType, SimplifiedAccountingType, Company
|
||||||
from club.models import Club, Membership
|
from club.models import Club, Membership
|
||||||
from subscription.models import Subscription
|
from subscription.models import Subscription
|
||||||
from counter.models import Customer, ProductType, Product, Counter
|
from counter.models import Customer, ProductType, Product, Counter
|
||||||
@ -295,22 +295,39 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site.
|
|||||||
ca.save()
|
ca.save()
|
||||||
gj = GeneralJournal(name="A16", start_date=date.today(), club_account=ca)
|
gj = GeneralJournal(name="A16", start_date=date.today(), club_account=ca)
|
||||||
gj.save()
|
gj.save()
|
||||||
credit = AccountingType(code='74', label="Someone gave us money", movement_type='CREDIT')
|
credit = AccountingType(code='74', label="Subventions d'exploitation", movement_type='CREDIT')
|
||||||
credit.save()
|
credit.save()
|
||||||
debit = AccountingType(code='607', label="Had to pay a beer", movement_type='DEBIT')
|
debit = AccountingType(code='606', label="Achats non stockés de matières et fournitures(*1)", movement_type='DEBIT')
|
||||||
debit.save()
|
debit.save()
|
||||||
t = AccountingType(code='602', label="Gros test de malade", movement_type='DEBIT')
|
debit2 = AccountingType(code='604', label="Achats d'études et prestations de services(*2)", movement_type='DEBIT')
|
||||||
t.save()
|
debit2.save()
|
||||||
Operation(journal=gj, date=date.today(), amount=32.3, remark="...", mode="CASH", done=True, accounting_type=t, target_type="USER", target_id=skia.id).save()
|
buying = AccountingType(code='60', label="Achats (sauf 603)", movement_type='DEBIT')
|
||||||
t = AccountingType(code='60', label="...", movement_type='DEBIT')
|
buying.save()
|
||||||
t.save()
|
comptes = AccountingType(code='6', label="Comptes de charge", movement_type='DEBIT')
|
||||||
Operation(journal=gj, date=date.today(), amount=32.3, remark="...", mode="CASH", done=True, accounting_type=t, target_type="USER", target_id=skia.id).save()
|
comptes.save()
|
||||||
Operation(journal=gj, date=date.today(), amount=46.42, remark="An answer to life...", mode="CASH", done=True, accounting_type=t, target_type="USER", target_id=skia.id).save()
|
simple = SimplifiedAccountingType(label = 'Je fais du simple 6', accounting_type = comptes, movement_type='DEBIT')
|
||||||
Operation(journal=gj, date=date.today(), amount=666.42,
|
simple.save()
|
||||||
remark="An answer to life...", mode="CASH", done=True, accounting_type=credit, target_type="USER",
|
|
||||||
target_id=skia.id).save()
|
|
||||||
Operation(journal=gj, date=date.today(), amount=42,
|
|
||||||
remark="An answer to life...", mode="CASH", done=False, accounting_type=debit, target_type="CLUB",
|
|
||||||
target_id=bar_club.id).save()
|
|
||||||
woenzco = Company(name="Woenzel & co")
|
woenzco = Company(name="Woenzel & co")
|
||||||
woenzco.save()
|
woenzco.save()
|
||||||
|
|
||||||
|
operation_list = [
|
||||||
|
(27, "J'avais trop de bière", 'CASH', None, buying, 'USER', skia.id, "", None),
|
||||||
|
(4000, "Ceci n'est pas une opération... en fait si mais non", 'CHECK', None, debit,'COMPANY', woenzco.id, "", 23),
|
||||||
|
(22, "C'est de l'argent ?", 'CARD', None, credit, 'CLUB', troll.id, "", None),
|
||||||
|
(37, "Je paye CASH", 'CASH', None, debit2, 'OTHER', None, "tous les étudiants <3", None),
|
||||||
|
(300, "Paiement Guy", 'CASH', None, buying, 'USER', skia.id, "", None),
|
||||||
|
(32.3, "Essence", 'CASH', None, buying, 'OTHER', None, "station", None),
|
||||||
|
(46.42, "Allumette", 'CHECK', None, credit, 'CLUB', main_club.id, "", 57),
|
||||||
|
(666.42, "Subvention de far far away", 'CASH', None, comptes, 'CLUB', main_club.id, "", None),
|
||||||
|
(496, "Ça, c'est un 6", 'CARD', simple, None, 'USER', skia.id, "", None),
|
||||||
|
(17, "La Gargotte du Korrigan", 'CASH', None, debit2, 'CLUB', bar_club.id, "", None),
|
||||||
|
]
|
||||||
|
for op in operation_list:
|
||||||
|
operation = Operation(journal=gj, date=date.today(), amount=op[0],
|
||||||
|
remark=op[1], mode=op[2], done=True, simpleaccounting_type=op[3],
|
||||||
|
accounting_type=op[4], target_type=op[5], target_id=op[6],
|
||||||
|
target_label=op[7], cheque_number=op[8])
|
||||||
|
operation.clean()
|
||||||
|
operation.save()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user