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
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
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