Example #1
0
    def handle(self, *args, **options):
        n = options['n']

        users = []
        for i in range(1, 6):
            user, created = User.objects.get_or_create(
                username='******'.format(i), )
            cats = list(user.categories.all())
            if not cats:
                cats = [
                    user.categories.create(name=silly.noun()) for i in range(5)
                ]

            user.set_password("secret1234")
            user.save()
            users.append(user)

        for i in range(n):
            with transaction.atomic():
                o = models.Expense(
                    user=random.choice(users),
                    date=get_random_date(),
                    amount="{:.2f}".format(random.uniform(1, 100)),
                    title="{} {}".format(silly.adjective(),
                                         silly.noun()).title(),
                    description=get_paragraph(1, 3),
                )
                o.full_clean()
                o.save()
                sample = set(random.sample(cats, random.randint(1, 3)))
                for cat in sample:
                    o.categories.add(cat)

                for i in range(random.randint(0, 5)):
                    o.comments.create(content=get_paragraph(1, 4), )
Example #2
0
    def test_expenses(self):
        n = 12
        for i in range(n):
            o = models.Expense(
                date=datetime.date(2016, 1, i + 1),
                title="Expense #{}".format(i + 1),
                amount=(i + 1) * (decimal.Decimal('10.10')),
            )
            o.full_clean()
            o.save()

        self.assertEquals(models.Expense.objects.count(), n)
Example #3
0
 def handle(self, *args, **options):
     n = options['n']
     for i in range(n):
         o = models.Expense(
             date="201{}-{:02}-{}".format(
                 random.randint(0, 9),
                 random.randint(1, 12),
                 random.randint(1, 30)
             ),
             amount="{:.2f}".format(random.uniform(1, 100)),
             title="{} {}".format(silly.adjective(), silly.noun()).title(),
             description=silly.paragraph(length=random.randint(1, 3)),
         )
         o.full_clean()
         o.save()
Example #4
0
def new_expense(request):
    if request.method == 'GET':

        return render(
            request, 'expenses/new_expense.html', {
                "committees": models.Committee.objects.order_by('name'),
                "budget_json": models.get_budget_json()
            })
    elif request.method == 'POST':
        if len((request.FILES.getlist('files'))) < 1:
            return HttpResponseBadRequest(
                "Du måste ladda upp minst en fil som verifikat")

        expense = models.Expense(
            owner=request.user.profile,
            expense_date=request.POST['expense-date'],
            description=request.POST['expense-description'])
        expense.save()

        for uploaded_file in request.FILES.getlist('files'):
            file = models.File(belonging_to=expense, file=uploaded_file)
            file.save()

        expense_part_indices = json.loads(request.POST['expense_part_indices'])
        for i in expense_part_indices:
            expense_part = models.ExpensePart(
                expense=expense,
                budget_line=models.BudgetLine.objects.get(
                    cost_centre__committee__name=request.POST[
                        'expense_part-{}-committee'.format(i)],
                    cost_centre__name=request.POST[
                        'expense_part-{}-cost_centre'.format(i)],
                    name=request.POST['expense_part-{}-budget_line'.format(
                        i)]),
                amount=request.POST['expense_part-{}-amount'.format(i)])
            expense_part.save()

        return HttpResponseRedirect(
            reverse('expenses-expense-new-binder', kwargs={'pk': expense.id}))
    else:
        raise Http404()
Example #5
0
    def handle(self, *args, **options):
        n = options['n']

        users = []
        for i in range(1, 6):
            user, created = User.objects.get_or_create(
                username='******'.format(i), )
            user.set_password("secret1234")
            user.save()
            users.append(user)

        for i in range(n):
            o = models.Expense(
                user=random.choice(users),
                date=get_random_date(),
                amount="{:.2f}".format(random.uniform(1, 100)),
                title="{} {}".format(silly.adjective(), silly.noun()).title(),
                description=get_paragraph(1, 3),
            )
            o.full_clean()
            o.save()
            for i in range(random.randint(0, 5)):
                o.comments.create(content=get_paragraph(1, 4), )
Example #6
0
def new_expense(request):
    """
    Add a new expense.
    """
    if request.method == 'GET':
        return render(request, 'expenses/new.html')
    elif request.method == 'POST':
        if len((request.FILES.getlist('files'))) < 1 and len(
            (request.POST.getlist('fileIds[]'))) < 1:
            messages.error(request,
                           'Du måste ladda upp minst en fil som verifikat')
            return HttpResponseRedirect(reverse('expenses-new'))

        if datetime.now() < datetime.strptime(request.POST['expense-date'],
                                              '%Y-%m-%d'):
            print("Felaktigt datum")
            messages.error(request, 'Du har angivit ett datum i framtiden')
            return HttpResponseRedirect(reverse('expenses-new'))

        if any(map(lambda x: float(x) <= 0,
                   request.POST.getlist('amount[]'))) > 0:
            messages.error(
                request,
                'Du har angivit en icke-positiv summa i någon av kvittodelarna'
            )
            return HttpResponseRedirect(reverse('expenses-new'))

        # Create the expense
        expense = models.Expense(
            owner=request.user.profile,
            expense_date=request.POST['expense-date'],
            description=request.POST['expense-description'],
            confirmed_by=None)
        expense.save()

        # Add the files submitted
        for posted_file in request.FILES.getlist('files'):
            file = models.File(expense=expense, file=posted_file)
            file.save()

        # Add the files submitted to the javascript upload
        for pre_uploaded_file_id in request.POST.getlist('fileIds[]'):
            file = models.File.objects.get(pk=int(pre_uploaded_file_id))
            if file.expense is None:
                file.expense = expense
                print("None")
            else:
                print("Inte none")
            file.save()

        # Add the expenseparts
        for idx, budgetLineId in enumerate(
                request.POST.getlist('budgetLine[]')):
            response = requests.get(
                "https://budget.datasektionen.se/api/budget-lines/{}".format(
                    budgetLineId))
            budget_line = response.json()
            models.ExpensePart(
                expense=expense,
                budget_line_id=budget_line['id'],
                budget_line_name=budget_line['name'],
                cost_centre_name=budget_line['cost_centre']['name'],
                cost_centre_id=budget_line['cost_centre']['id'],
                committee_name=budget_line['cost_centre']['committee']['name'],
                committee_id=budget_line['cost_centre']['committee']['id'],
                amount=request.POST.getlist('amount[]')[idx]).save()

        return HttpResponseRedirect(
            reverse('expenses-new-confirmation', kwargs={'pk': expense.id}))