コード例 #1
0
def internaltransfer_csv(request, pk):
    from accounting_tools.models import InternalTransfer
    from app.utils import UnicodeCSVWriter

    transfers = [get_object_or_404(InternalTransfer, pk=pk_, deleted=False) for pk_ in filter(lambda x: x, pk.split(','))]
    transfers = [tr for tr in transfers if tr.rights_can('SHOW', request.user)]

    response = HttpResponse(content_type='text/csv; charset=cp1252')
    if len(transfers) == 1:
        response['Content-Disposition'] = 'attachment; filename="Transfert Interne {0} .csv"'.format(slugify(str(transfers[0])))
    else:
        response['Content-Disposition'] = 'attachment; filename="transfers_internes_{0}.csv"'.format(datetime.date.today().strftime("%d-%m-%Y"))

    # L'écriture du csv permet l'import dans sage comme définit ici : https://onlinehelp.sageschweiz.ch/sage-start/fr-ch/content/technique/d%C3%A9finition%20de%20l%20interface.htm
    # La prise en compte des centre de cout souffre encore de problèmes du coté de sage

    writer = UnicodeCSVWriter(response)
    line_number = 1
    for transfer in transfers:
        if not transfer.status[0] in ['2', '3']:
            messages.warning(request, _(u'Internal Transfer {0} pas à l\'état à comptabiliser/en comptabilisation').format(str(transfer)))
            if len(transfers) == 1:
                return redirect('accounting_tools-views-internaltransfer_show', transfer.pk)
            else:
                return redirect('accounting_tools-views-internaltransfer_list')

        header_row = [u'0', line_number, transfer.transfert_date.strftime(u"%d.%m.%Y"), 100000 + transfer.pk, transfer.name, transfer.amount, transfer.amount, '', '', u'CHF', 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', u'INT_TF#{0}'.format(str(transfer.pk)), '']
        debit_row = [u'1', '', '', '', '', '', '', '', '', '', '', '', u'1', line_number, transfer.account.account_number, u'CHF', u'{0} - Débit'.format(transfer.name), transfer.amount, '', 0, '', u'Non Soumis à la TVA', u'Débit', '', transfer.transfert_date.strftime(u"%d.%m.%Y"), 0, transfer.amount, transfer.amount, 0, u'INT_TF#{0}'.format(str(transfer.pk)), transfer.cost_center_from.account_number]
        credit_row = [u'2', '', '', '', '', '', '', '', '', '', '', '', u'2', line_number, transfer.account.account_number, u'CHF', u'{0} - Crédit'.format(transfer.name), transfer.amount, '', 0, '', u'Non Soumis à la TVA', u'Crédit', '', transfer.transfert_date.strftime(u"%d.%m.%Y"), 0, transfer.amount, transfer.amount, 0, u'INT_TF#{0}'.format(str(transfer.pk)), transfer.cost_center_to.account_number]
        writer.writerows([header_row, debit_row, credit_row])
        line_number = line_number + 1
    return response
コード例 #2
0
def cashbook_csv(request, pk):
    from accounting_tools.models import CashBook
    from accounting_tools.models import CashBookLine
    from app.utils import UnicodeCSVWriter

    cashbooks = [get_object_or_404(CashBook, pk=pk_, deleted=False) for pk_ in filter(lambda x: x, pk.split(','))]

    response = HttpResponse(content_type='text/csv; charset=cp1252')
    if len(cashbooks) == 1:
        response['Content-Disposition'] = 'attachment; filename="JDC - {0}.csv"'.format(slugify(str(cashbooks[0])))
    else:
        response['Content-Disposition'] = 'attachment; filename="journaux_de_caisse_{0}.csv"'.format(datetime.date.today().strftime("%d-%m-%Y"))

    # L'écriture du csv permet l'import dans sage comme définit ici : https://onlinehelp.sageschweiz.ch/sage-start/fr-ch/content/technique/d%C3%A9finition%20de%20l%20interface.htm
    # La prise en compte des centre de cout souffre encore de problèmes du coté de sage

    writer = UnicodeCSVWriter(response)

    cashbook_count = 1
    for cashbook in cashbooks:
        if not cashbook.rights_can('SHOW', request.user):
            raise Http404
        if not cashbook.status[0] in ['4', '5', '6']:
            messages.warning(request, _(u'JDC {0} pas à l\'état à comptabiliser/en comptabilisation').format(str(cashbook)))
            if len(cashbooks) == 1:
                return redirect('accounting_tools-views-cashbook_show', cashbook.pk)
            else:
                return redirect('accounting_tools-views-cashbook_list')
        if not cashbook.total_incomes() == cashbook.total_outcomes():
            messages.warning(request, _(u'JDC {0} pas a 0, merci de le mettre a 0').format(str(cashbook)))
            if len(cashbooks) == 1:
                return redirect('accounting_tools-views-cashbook_show', cashbook.pk)
            else:
                return redirect('accounting_tools-views-cashbook_list')

        writer.writerow([u'0', cashbook_count, cashbook.get_lines()[0].date.strftime(u"%d.%m.%Y"), 200000 + cashbook.pk, cashbook.name, cashbook.total_incomes(), cashbook.total_incomes(), '', '', u'CHF', 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', u'CASHBOOK#{0}'.format(str(cashbook.pk))])
        first = True
        line_count = 1
        firstline = CashBookLine()
        for line in cashbook.get_lines():
            if first:
                firstline = line
                first = False
                continue
            line_count = line_count + cashbook_line_write(writer, cashbook, line, line_count, False, cashbook_count)
        line_count = line_count + cashbook_line_write(writer, cashbook, firstline, line_count, True, cashbook_count)
        cashbook_count = cashbook_count + 1
    return response
コード例 #3
0
def expenseclaim_csv(request, pk):
    from accounting_tools.models import ExpenseClaim
    from accounting_tools.models import ExpenseClaimLine
    from app.utils import UnicodeCSVWriter

    expenseclaims = [get_object_or_404(ExpenseClaim, pk=pk_, deleted=False) for pk_ in filter(lambda x: x, pk.split(','))]

    response = HttpResponse(content_type='text/csv; charset=cp1252')
    if len(expenseclaims) == 1:
        response['Content-Disposition'] = 'attachment; filename="NDF - {0}.csv"'.format(slugify(str(expenseclaims[0])))
    else:
        response['Content-Disposition'] = 'attachment; filename="notes_de_frais_{0}.csv"'.format(datetime.date.today().strftime("%d-%m-%Y"))

    # L'écriture du csv permet l'import dans sage comme définit ici : https://onlinehelp.sageschweiz.ch/sage-start/fr-ch/content/technique/d%C3%A9finition%20de%20l%20interface.htm
    # La prise en compte des centre de cout souffre encore de problèmes du coté de sage

    provider_to_export = []
    writer = UnicodeCSVWriter(response)

    expenseclaim_count = 1
    for expenseclaim in expenseclaims:
        if not expenseclaim.rights_can('SHOW', request.user):
            raise Http404
        if not expenseclaim.status[0] in ['4', '5', '6']:
            messages.warning(request, _(u'NDF {0} pas à l\'état à comptabiliser/en comptabilisation').format(str(expenseclaim)))
            if len(expenseclaims) == 1:
                return redirect('accounting_tools-views-expenseclaim_show', expenseclaim.pk)
            else:
                return redirect('accounting_tools-views-expenseclaim_list')

        writer.writerow([u'0', expenseclaim_count, u'Crédit', 300000 + expenseclaim.pk, expenseclaim.logs.first().when.strftime(u"%d.%m.%Y"), expenseclaim.user.username, u'CHF', 0, u'2000', u'NDF - {0}'.format(str(expenseclaim)), expenseclaim.logs.first().when.strftime(u"%d.%m.%Y"), '', '', '', '', '', '', '', '', u'NDF#{0}'.format(str(expenseclaim.pk))])
        provider_to_export.append(expenseclaim.user)
        first = True
        line_count = 1
        firstline = ExpenseClaimLine()
        for line in expenseclaim.get_lines():
            if first:
                firstline = line
                first = False
                continue
            line_count = line_count + expenseclaim_line_write(writer, expenseclaim, line, line_count, False, expenseclaim_count)
        line_count = line_count + expenseclaim_line_write(writer, expenseclaim, firstline, line_count, True, expenseclaim_count)
        expenseclaim_count = expenseclaim_count + 1

        for provider in provider_to_export:
            address_lines = provider.adresse.splitlines()
            try:
                city = address_lines[1]
                zip = address_lines[1]
            except:
                zip = u'1015'
                city = u'Lausanne'

            address_complete = u''
            for adr in address_lines:
                address_complete += str(adr)

            writer.writerow([provider.first_name, provider.last_name, address_lines[0], city, zip, provider.username, provider.email, provider.nom_banque, provider.iban_ou_ccp, address_complete])
    return response