Git Product home page Git Product logo

erpnextswiss's Introduction

erpnextswiss

ERPNext application for Switzerland-specific use cases

ERPNext (https://www.erpnext.org) is a global, leading, cloud based open source enterprise resource planning software. ERPNext is a trademark by Frappé Technologies.

The ERPNextSwiss application adds country-specific features to this platform such as bank, tax and payment integrations.

ERPNextSwiss is maintaned by libracore AG.

For more information, refer to https://erpnext.swiss

License

GNU Affero General Public License, refer to LICENSE

ERPNextSwiss is developed and maintained by libracore and contributors. The copyright is owned by libracore and contributors. The software comes as-is without any warranty.

Requirements

Requires an ERPNext server instance (refer to https://github.com/frappe/erpnext)

Compatibility

ERPNextSwiss is tested against libracore and ERPNext v12. There are compatibility branches for v11 (for user who prefer the old desk) and v13/v14/v15 (for daring users).

ERPNextSwiss is also compatible with Dokos (https://dokos.io)

Installation

From the frappe-bench folder, execute

$ bench get-app https://github.com/libracore/erpnextswiss.git
$ bench install-app erpnextswiss

If you are using a multi-tenant environment, use the following for the installation

$ bench --site site_name install-app erpnextswiss

(where site_name is e.g. erp.example.com)

Update

Run updates with

$ bench update

In case you update from the sources and observe an error, make sure to update dependencies with

$ bench update --requirements

Features

  • Banking / Accounting
    • Bank wizard: processes camt.053 and camt.054 files to payment entries (including linking to related documents)
    • Payment proposal: create payment files based on open purchase invoices, expenses and salaries (pain.001)
    • Direct debit proposal: create payment files from direct debit enabled sales invoices (pain.008)
    • Payment reminder: create payment reminders for overdue sales invoices
    • Bank import: allows to import bank account statements to update local payment entries (receiving; csv or camt)
    • Match payments: match unpaid sales invoices with the corresponding payments
    • Payment export: allows to create payment files for banks (pain.001) from payment entries (paying)
    • QR invoices and ESR invoices: outgoing (sales invoices) as well as incoming (scan purchase invoices); QR invoice supports ESR/NON/SCOR
    • ZUGFeRD: fully electronic invoices.
    • ZUGFeRD Wizard: read and interpret both ZUGFeRD and QR-invoices to purchase invoices
  • Taxes
    • Import monthly average exchange rates, daily exchange rates (ESTV)
    • VAT declaration (with ESTV data transfer easyTax/ePortal)
    • Zefix integration
  • Human resources
    • Salary certificate ("Lohnausweis")
    • Seco overtime reporting (based on timesheet)
    • Seco monthly worktime (working hours and breaks) (based on timesheet)
    • Automatic settling of expenses and salary payments
    • Import public holidays (region-dependent) into the Holidays List
  • General tools
    • Postal code lookup
    • Script-based data import
    • Large data import tools
    • Dynamic newsletter content
  • Interfaces
    • Interface to ESTV:
      • read exchange rates
      • monthly average rates
      • transmit tax forms
    • Interface to abacus (export transaction data)
    • ISO 20022
    • ZUGFeRD
    • Interface to Zefix
    • Datatrans interface for payments
    • Payrexx payment interface
    • EDI connector: allows to fully integrate EDI exchange (PRICAT, DESADV, ORDERS, SLSRPT, ...)
    • NextCloud:
      • Update contacts from ERPNext to NextCloud address book
    • Interface to Planzer logistics
    • CalDav-feed for CRM (Lead/Customer) and ToDos
  • Business Intelligence
    • Data Provider for Looker Studio (refer to the libracore Connector to connect to your data)
  • Productivity
    • Gitlab integration: sync ERPNext Issues to Gitlab

Release notes

Refer to https://github.com/libracore/erpnextswiss/wiki/Release-Notes

Data protection

Please note that the provided sample QR code invoice uses a libracore server to process QR codes according to ISO 20022. The server is located in Switzerland, the invoice details will be transmitted to the server for processing.

Please use a personal QR-code generation server to prevent data being sent to libracore. The source code is available from https://github.com/lasalesi/phpqrcode

erpnextswiss's People

Contributors

chief5 avatar genesis81 avatar innomat avatar ivanios avatar jhetzer avatar joelios avatar lasalesi avatar libracore-bot avatar nanipi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

erpnextswiss's Issues

app install error

When i do on fresh install of erpnext 13
bench --site site_name install-app erpnextswiss

I got This issue
Installing erpnextswiss...
Updating DocTypes for erpnextswiss : [========================================] 100%
An error occurred while installing erpnextswiss: A field with the name 'total_taxes_and_charges' already exists in doctype Expense Claim.
Traceback (most recent call last):
File "apps/frappe/frappe/commands/site.py", line 293, in install_app
_install_app(app, verbose=context.verbose)
File "apps/frappe/frappe/installer.py", line 199, in install_app
sync_fixtures(name)
File "apps/frappe/frappe/utils/fixtures.py", line 22, in sync_fixtures
import_doc(fixtures_path)
File "apps/frappe/frappe/core/doctype/data_import/data_import.py", line 180, in import_doc
import_file_by_path(
File "apps/frappe/frappe/modules/import_file.py", line 146, in import_file_by_path
import_doc(
File "apps/frappe/frappe/modules/import_file.py", line 275, in import_doc
doc.insert()
File "apps/frappe/frappe/model/document.py", line 256, in insert
self.run_method("before_insert")
File "apps/frappe/frappe/model/document.py", line 943, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
File "apps/frappe/frappe/model/document.py", line 1264, in composer
return composed(self, method, *args, **kwargs)
File "apps/frappe/frappe/model/document.py", line 1246, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
File "apps/frappe/frappe/model/document.py", line 940, in fn
return method_object(*args, **kwargs)
File "apps/frappe/frappe/custom/doctype/custom_field/custom_field.py", line 44, in before_insert
frappe.throw(
File "apps/frappe/frappe/init.py", line 504, in throw
msgprint(
File "apps/frappe/frappe/init.py", line 479, in msgprint
_raise_exception()
File "apps/frappe/frappe/init.py", line 434, in _raise_exception
raise raise_exception(msg)
frappe.exceptions.ValidationError: A field with the name 'total_taxes_and_charges' already exists in doctype Expense Claim.

Observed in (version)

13.52.00

Steps to reproduce

bench --site site_name install-app erpnextswiss

Bank Wizard does not work in Python 3

Expected behvauour

Bank Wizard can be executed

Actual behaviour

Bank Wiazrd throws an error "unicode is not defined" (Python 3 error):

Traceback (most recent call last):
  File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 61, in application
	response = frappe.handler.handle()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 21, in handle
	data = execute_cmd(cmd)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 56, in execute_cmd
	return frappe.call(method, **frappe.form_dict)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1026, in call
	return fn(*args, **newargs)
  File "/home/frappe/frappe-bench/apps/erpnextswiss/erpnextswiss/erpnextswiss/page/bank_wizard/bank_wizard.py", line 194, in read_camt053
	transactions = read_camt_transactions(entries, account)
  File "/home/frappe/frappe-bench/apps/erpnextswiss/erpnextswiss/erpnextswiss/page/bank_wizard/bank_wizard.py", line 201, in read_camt_transactions
	entry_soup = BeautifulSoup(unicode(entry), 'lxml')
NameError: name 'unicode' is not defined

Observed in (version)

v1.4.0

Steps to reproduce

  • Install ERPNext with Python 3
  • Run bank wizard

Worktime Overview kann nicht Jahrübergreifend arbeiten

Festgestellt in Version v1.13.0 (master)

Wenn als Startdatum 2021 ein Datum gewählt und als Enddatum ein Datum im 2022 dann werden die Feiertage von 2022 nicht berücksichtigt.

Korrekte anzeige:
image

Falsche Berechnung
image

Die Feiertag sind für beide Jahre korrekt hinterlegt.

Custom Fields/Fixtures do not install

Expected behaviour:
When the erpnextswiss app is installed using bench get-app / bench install-app, the fixtures (custom fields) should be created in the target database.

Actual behaviour:
Payment entry and Account is missing the custom fields.

Steps to reproduce:
Install erpnextswiss and observe custom fields on Payment Entry and Account.

Observed in erpnextswiss 0.1 (master)

Sales Invoice data is sent to libracore

Expected behvauour

QR-Code containing sensitive information should be generated on ERPNext Server.

Actual behaviour

Complete Sales Invoice information is sent to a libracore server, which provides the qr-code. I don't know the Swiss data protection regulations but this seems to be very problematic.

<img src="https://data.libracore.ch/phpqrcode/api/iso20022.php
?iban={{ receiving_account.iban or ''}}
&receiver_name={{ cmp_address_line_detail.name }}
&receiver_street={{ cmp_address_line_detail.street | trim }}
&receiver_number={{ cmp_address_line_detail.number }}
&receiver_pincode={{ cmp_address_line_detail.pin }}
&receiver_town={{ cmp_address_line_detail.city }}
&receiver_country={{ cmp_address_line_detail.country }}
&final_receiver_name={{ cmp_address_line_detail.name }}
&final_receiver_street={{ cmp_address_line_detail.street | trim }}
&final_receiver_number={{ cmp_address_line_detail.number }}
&final_receiver_pincode={{ cmp_address_line_detail.pin }}
&final_receiver_town={{ cmp_address_line_detail.city }}
&final_receiver_country={{ cmp_address_line_detail.country }}
&amount={{ doc.grand_total }}
&currency={{ doc.currency }}
&due_date={{ doc.due_date }}
&payer_name={{ pay_address_line_detail.name }}
&payer_street={{ pay_address_line_detail.street | trim }}&payer_number={{ pay_address_line_detail.number }}
&payer_pincode={{ pay_address_line_detail.pin }}
&payer_town={{ pay_address_line_detail.city }}
&payer_country={{ pay_address_line_detail.country }}
&reference_type=QRR&reference={{ doc.name }}
&message={{ doc.title }}"
style="width: 46mm !important; height: 46mm !important;" />

"html": "<!-- HEAD -->\n<div id=\"header-html\" class=\"hidden-pdf\" > \n <div class=\"print-heading\">\n {% set letter_heads = frappe.get_list('Letter Head', filters={'is_default': '1'}, fields=['name']) %}\n {% if letter_heads %}\n {% set letter_head = frappe.get_doc(\"Letter Head\", letter_heads[0].name) %}\n {% if letter_head %}\n {{ letter_head.content }}\n {% else %}\n <p>No letter head found. Please define a letter head under print settings and mark it as default</p>\n {% endif %}\n {% endif %}\n </div>\n</div>\n\n<!-- CONTENT -->\n<div id=\"main_content\">\n\t<table style=\"width: 100%;\">\n\t\t<tr>\n\t\t\t<td style=\"width: 66%;\">\n\t\t\t\t{{ doc.customer }}<br>\n\t\t\t\t{{ doc.address_display or '' }}\n\t\t\t</td>\n\t\t\t<td style=\"text-align: left; width: 33%;\">\n\t\t\t\t{{ doc.get_formatted('posting_date') }}\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t{% if doc.contact_person %}\n\t\t\t\t\t{% set contact = frappe.get_doc(\"Contact\", doc.contact_person) %}\n\t\t\t\t\t{{ contact.first_name or '' }} {{ contact.last_name or '' }}<br>\n\t\t\t\t\t{% if contact.phone %}\n\t\t\t\t\t\t{{ _(\"Tel\") }}: {{ contact.phone }}\n\t\t\t\t\t{% elif contact.mobile_no %}\n\t\t\t\t\t\t{{ _(\"Mobile\") }}: {{ contact.mobile_no }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t{% endif %}\n\t\t\t</td>\n\t\t\t<td>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"vertical-align: bottom !important;\">\n\t\t\t\t<strong>{{ _(\"Sales Invoice\") }}: {{ doc.name }}</strong>\n\t\t\t</td>\n\t\t\t<td style=\"vertical-align: bottom !important; text-align: left;\">\n\t\t\t\t{% if doc.items[0].sales_order %}\n\t\t\t\t\t{% set sales_order = frappe.get_doc(\"Sales Order\", doc.items[0].sales_order) %}\n\t\t\t\t\t<strong>{{ _(\"Sales Order\") }}:</strong> {{ sales_order.get_formatted('transaction_date') }}<br>\n\t\t\t\t{% endif %}\n\t\t\t</td>\n\t\t</tr>\n\t</table>\n\t<table style=\"width: 100%\">\n\t\t<tr style=\"border-top: solid black 1px; border-bottom: solid black 1px;\">\n\t\t\t<th style=\"width: 10%\">{{ _(\"Pos\") }}</th>\n\t\t\t<th style=\"width: 30%\">{{ _(\"Description\") }}</th>\n\t\t\t<th style=\"width: 10%\">{{ _(\"Unit\") }}</th>\n\t\t\t<th style=\"width: 10%\">{{ _(\"Qty\") }}</th>\n\t\t\t<th style=\"width: 15%\">{{ _(\"Price\") }}</th>\n\t\t\t<th style=\"width: 15%\">{{ _(\"Amount\") }}</th>\n\t\t</tr>\n\t\t{% for n in doc.items %}\n\t\t\t <tr>\n\t\t\t\t<td>{{ loop.index }}</td>\n\t\t\t\t<td>{{ _(n.item_name) }}<br>\n\t\t\t\t\tArt. Nr. {{ n.item_code }}</td>\n\t\t\t\t<td>{{ _(n.stock_uom) }}</td>\n\t\t\t\t<td>{{ n.qty }}</td>\n\t\t\t\t<td>{{ n.get_formatted('price_list_rate') }}</td>\n\t\t\t\t<td>{{ n.get_formatted('amount') }}</td>\n\t\t\t </tr>\n\t\t {% endfor %}\n\t</table>\n\t<p><br></p>\n\t<table style=\"width: 100%;\">\n\t\t<tr style=\"border-top: solid black 1px; border-bottom: solid black 1px;\">\n\t\t\t<td class=\"Payment_table\"><strong>{{ _(\"Total\") }}</strong></td>\n\t\t\t<td class=\"Payment_table\" style=\"text-align: right;\"><strong>{{ doc.get_formatted('grand_total') }}</strong>\n\t\t\t</td>\n\t\t</tr>\n\t</table>\n</div>\n\n<!-- QR code section -->\n<!-- get receiver details -->\n{% if doc.company_address %}\n {% set cmp_addr = frappe.get_doc(\"Address\", doc.company_address) %}\n{% endif %}\n{% set company = frappe.get_doc(\"Company\", doc.company) %}\n{% if company.default_bank_account %}\n {% set receiving_account = frappe.get_doc(\"Account\", company.default_bank_account) %}\n{% else %}\n {{ _(\"Please set a default bank account in the company record\") }}\n{% endif %}\n{% if cmp_addr %}\n {% set address_array = cmp_addr.address_line1.split(\" \") %}\n {% set address_line_item_count = address_array | count %}\n {% set cmp_country = frappe.get_doc(\"Country\", cmp_addr.country) %}\n {% set cmp_country_code = cmp_country.code | upper %}\n {% set cmp_address_line_detail = {'name': doc.company, 'street': '', 'number': '', 'pin': cmp_addr.pincode, 'city': cmp_addr.city, 'country': cmp_country_code } %}\n {% for i in range(0, (address_line_item_count - 1)) %}\n {% if cmp_address_line_detail.update({'street': cmp_address_line_detail.street + \" \" + address_array[i] }) %}{% endif %}\n {% endfor %}\n {% if cmp_address_line_detail.update({'number': address_array[address_line_item_count - 1]}) %}{% endif %}\n\n\n<!-- get payer details -->\n{% if doc.customer_address %}\n {% set pay_addr = frappe.get_doc(\"Address\", doc.customer_address) %}\n{% endif %}\n{% if pay_addr %}\n {% set pay_address_array = pay_addr.address_line1.split(\" \") %}\n {% set pay_address_line_item_count = pay_address_array | count %}\n {% set pay_country = frappe.get_doc(\"Country\", pay_addr.country) %}\n {% set pay_country_code = pay_country.code | upper %}\n {% set pay_address_line_detail = {'name': doc.customer, 'street': '', 'number': '', 'pin': pay_addr.pincode, 'city': pay_addr.city, 'country': pay_country_code } %}\n {% for i in range(0, (pay_address_line_item_count - 1)) %}\n {% if pay_address_line_detail.update({'street': pay_address_line_detail.street + \" \" + pay_address_array[i] }) %}{% endif %}\n {% endfor %}\n {% if pay_address_line_detail.update({'number': pay_address_array[pay_address_line_item_count - 1]}) %}{% endif %}\n\n\n<table style=\"width: 100%; page-break-inside: avoid !important;\">\n <tr><!-- three columns -->\n <td style=\"width: 15%;\"><!-- blank left column --></td>\n <td style=\"width: 40%; border-top: 1px solid silver; border-left: 1px solid silver; border-bottom: 1px solid silver;\"><!-- middle column -->\n <table style=\"width: 100%; \">\n <tr><td>{{ _(\"Zahlteil QR-Rechnung\") }}</td></tr>\n <tr><td>{{ _(\"Unterst\u00fctzt\") }}<br />{{ _(\"\u00dcberweisung\") }}</td></tr>\n <tr><td><!-- QR code -->\n <img src=\"https://data.libracore.ch/phpqrcode/api/iso20022.php?iban={{ receiving_account.iban or ''}}&receiver_name={{ cmp_address_line_detail.name }}&receiver_street={{ cmp_address_line_detail.street | trim }}&receiver_number={{ cmp_address_line_detail.number }}&receiver_pincode={{ cmp_address_line_detail.pin }}&receiver_town={{ cmp_address_line_detail.city }}&receiver_country={{ cmp_address_line_detail.country }}&final_receiver_name={{ cmp_address_line_detail.name }}&final_receiver_street={{ cmp_address_line_detail.street | trim }}&final_receiver_number={{ cmp_address_line_detail.number }}&final_receiver_pincode={{ cmp_address_line_detail.pin }}&final_receiver_town={{ cmp_address_line_detail.city }}&final_receiver_country={{ cmp_address_line_detail.country }}&amount={{ doc.grand_total }}&currency={{ doc.currency }}&due_date={{ doc.due_date }}&payer_name={{ pay_address_line_detail.name }}&payer_street={{ pay_address_line_detail.street | trim }}&payer_number={{ pay_address_line_detail.number }}&payer_pincode={{ pay_address_line_detail.pin }}&payer_town={{ pay_address_line_detail.city }}&payer_country={{ pay_address_line_detail.country }}&reference_type=QRR&reference={{ doc.name }}&message={{ doc.title }}\" style=\"width: 46mm !important; height: 46mm !important;\" />\n </td></tr>\n <tr><td>\n <table style=\"width: 100%;\">\n <tr>\n <td>{{ _(\"W\u00e4hrung\") }}</td>\n <td>{{ _(\"Betrag\") }}</td>\n </tr>\n <tr>\n <td>{{ doc.currency }}</td><!-- must be with space as thousand separator and point for decimal -->\n <td>{{ \"{:,.2f}\".format(doc.grand_total).replace(\",\", \" \") }}</td>\n </tr>\n </table>\n </td></tr>\n </table>\n </td>\n\n <td style=\"width: 45%; border-top: 1px solid silver; border-bottom: 1px solid silver;\"><!-- right column -->\n <table>\n <tr><td>{{ _(\"Konto\") }}<br />{{ receiving_account.iban or _(\"Company default bank IBAN not found\") }}</td></tr>\n <tr><td>{{ _(\"Zahlungsempf\u00e4nger\") }}<br />\n {{ cmp_address_line_detail.name }}<br />\n {{ cmp_address_line_detail.street }} {{ cmp_address_line_detail.number }}<br />\n {{ cmp_address_line_detail.country }}-{{ cmp_address_line_detail.pin }} {{ cmp_address_line_detail.city }}<br />\n </td></tr>\n <tr><td>{{ _(\"Endg\u00fcltiger Zahlungsempf\u00e4nger\") }}<br />\n {{ cmp_address_line_detail.name }}<br />\n {{ cmp_address_line_detail.street }} {{ cmp_address_line_detail.number }}<br />\n {{ cmp_address_line_detail.country }}-{{ cmp_address_line_detail.pin }} {{ cmp_address_line_detail.city }}<br />\n </td></tr>\n <tr><td>{{ _(\"Referenznummer\") }}<br />\n {{ doc.name }}</td></tr>\n <tr><td>{{ _(\"Zus\u00e4tzliche Informationen\") }}<br />\n {{ doc.title }}</td></tr>\n <tr><td>{{ _(\"Zahlungspflichtiger\") }}<br />\n {{ pay_address_line_detail.name }}<br />\n {{ pay_address_line_detail.street }} {{ pay_address_line_detail.number }}<br />\n {{ pay_address_line_detail.country }}-{{ pay_address_line_detail.pin }} {{ pay_address_line_detail.city }}<br />\n </td></tr>\n <tr><td>{{ _(\"Zahlbar bis\") }}<br />\n {{ doc.get_formatted('due_date') }}</td></tr>\n </table>\n </td>\n </tr>\n</table>\n\n<!-- control: customer address missing -->\n{% else %}\n<p>{{ _(\"Customer address missing, please add to sales invoice\") }}</p>\n{% endif %}\n\n<!-- control: company address missing -->\n{% else %}\n<p>{{ _(\"Company address missing, please add to sales invoice\") }}</p>\n{% endif %}\n\n\n<!-- FOOTER -->\n<div id=\"footer-html\" class=\"visible-pdf\">\n {% if letter_head %}\n {{ letter_head.footer}}\n {% else %}\n <p>No letter head found. Please define a letter head under print settings and mark it as default</p>\n {% endif %}\n</div>",

Pr in official repo

Hi, I'm new in erpnext and I've a new account online for our carpentry.

To be able able to use this extension in the official repo, the extension needs to be approved by the dev team.

Are you planning to to send your modifications to the official openerp team ?

Thanks for your great job. By the way I'm interested to be involved for the Frenchmen translation

Raiffeisen has switched date format

Now, the downloaded bank files have a DD.MM.YYYY timestamp instead of UNC:

15.01.2018 10:49

This corrupts the date import. Parser needs to be updated.

uninstall issue

Expected behvauour

Uninstall should get rid of everything that was installed

Actual behaviour

some stuff seems to be left over

Observed in (version)

grafik

Traceback (most recent call last):
File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 68, in application
response = frappe.api.handle()
File "/home/frappe/frappe-bench/apps/frappe/frappe/api.py", line 55, in handle
return frappe.handler.handle()
File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 31, in handle
data = execute_cmd(cmd)
File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 67, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 1172, in call
return fn(*args, **newargs)
File "/home/frappe/frappe-bench/apps/frappe/frappe/desk/form/linked_with.py", line 43, in get_submitted_linked_docs
linked_docs = get_linked_docs(doctype, name, linkinfo)
File "/home/frappe/frappe-bench/apps/frappe/frappe/desk/form/linked_with.py", line 168, in get_linked_docs
link_meta_bundle = frappe.desk.form.load.get_meta_bundle(dt)
File "/home/frappe/frappe-bench/apps/frappe/frappe/desk/form/load.py", line 80, in get_meta_bundle
bundle = [frappe.desk.form.meta.get_meta(doctype)]
File "/home/frappe/frappe-bench/apps/frappe/frappe/desk/form/meta.py", line 32, in get_meta
meta.set_translations(frappe.local.lang)
File "/home/frappe/frappe-bench/apps/frappe/frappe/desk/form/meta.py", line 208, in set_translations
self.set("__messages", frappe.get_lang_dict("doctype", self.name))
File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 114, in get_lang_dict
return get_dict(fortype, name)
File "/home/frappe/frappe-bench/apps/frappe/frappe/translate.py", line 103, in get_dict
messages = get_messages_from_doctype(name)
File "/home/frappe/frappe-bench/apps/frappe/frappe/translate.py", line 371, in get_messages_from_doctype
doctype_file_path = frappe.get_module_path(meta.module, "doctype", meta.name, meta.name)
File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 955, in get_module_path
return get_pymodule_path(local.module_app[module] + "." + module, *joins)
KeyError: 'erpnextswiss'
2 request.js:387:14

Steps to reproduce

not sure

Assigning an unmapped payment sets the transaction amount

Actual behaviour:
When a payment could not be matched to a customer, it will be matched to Guest. If the transaction is then manually opened and the customer selected, the payment amount will automatically be set to the total outstanding amount (and not the actual paid amount).

Expected behaviour:
The amount does not change on customer selection.

Observed in ERPNext V10 and erpnextswiss 0.3.0

Impact:
Matching payment to sales invoices is difficult. The built-in /desk#Form/Payment Reconciliation relies on the customer name as well (only to match submitted payments to sales invoices to get their status to Paid).

Break During Update

I am updating the erpnext using bench update but getting below error.

Traceback (most recent call last):
File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"main", mod_spec)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 99, in
main()
File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 18, in main
click.Group(commands=commands)(prog_name='bench')
File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 764, in call
return self.main(*args, **kwargs)
File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/init.py", line 26, in _func
ret = f(frappe._dict(ctx.obj), *args, **kwargs)
File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/site.py", line 287, in migrate
migrate(context.verbose, rebuild_website=rebuild_website, skip_failing=skip_failing)
File "/home/frappe/frappe-bench/apps/frappe/frappe/migrate.py", line 40, in migrate
clear_global_cache()
File "/home/frappe/frappe-bench/apps/frappe/frappe/cache_manager.py", line 54, in clear_global_cache
clear_website_cache()
File "/home/frappe/frappe-bench/apps/frappe/frappe/website/render.py", line 328, in clear_cache
for method in frappe.get_hooks("website_clear_cache"):
File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 968, in get_hooks
hooks = _dict(cache().get_value("app_hooks", load_app_hooks))
File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/redis_wrapper.py", line 75, in get_value
val = pickle.loads(val)
ModuleNotFoundError: No module named 'erpnextswiss.domains.check_domains'

Bank Import by Template

Expected behaviour

Possibility to create/select templates which define how a csv file is mapped by a custom doctype

Actual behaviour

To add custom bank csv files it would be necessary to extent the Python file bankimport.py and other html files. Not possible from the web interface

Observed in (version)

v0.9.2

Steps to reproduce


It would be nice to have such templating possibility as described in "Expected behaviour". Also, nice would be:

  • options in the template to add field merges, splits, string manipulations, ...
  • set which field should be matched to which costumer field for assign payments (IBAN, ID, ...)

I hope this feature request is interesting. By the way: Nice Work

Automatic fetching of IBAN/ESR/date does not work

Actual behvaiour

When creating a new payment entry from a purchase invoice, the date, transaaction type and parameters should be fetched. However, the fields are empty.

Expected behaviour

Fields should be populated.

Observed in

ERPNextSwiss 0.3.6

Contract DocType wird zerstört

Expected behvauour

Bei Installation von erpnextswiss sollten nur Zusatzfunktionen hinzugefügt werden, nicht aber bestehende Funktionalität zerstört werden.

Actual behaviour

In der Basis ERPNext Installation ist im CRM Modul der DocType Contract vorhanden.
Seit der Installation von erpnextswiss konnte ich keine Contracts mehr finden.

Dabei ist mir in der DocType Liste aufgefallen, dass es einen "neuen" Contract DocType im ERPNextSwiss Modul
gibt.

Nach Deinstallation der App wurde der originale Contract leider auch nicht wieder hergestellt.

--> Wie können wir den originalen Contract DocType wieder herstellen?

Observed in (version)

Aktueller v13 Branch

Steps to reproduce

In ERPNext v13 Umgebung erpnextswiss v13 Branch installieren

[Feature request]Verify ESR number

Expected behaviour

ESR numbers should be verified before saving (Sales Invoice)

Actual behaviour

ESR numbers can be sasved even if the check digit is not valid

Observed in (version)

v0.6.3

Steps to reproduce

Create a sales invoice, select type "ESR" and enter an invalid ESR code.

Problem with number format while importing bank data.

Expected behvauour

I'm trying to import data using the BankImport feature.

Actual behaviour

However, I get the following error:

Could not parse amount with value 1.495,18 check thousand and decimal separator. Error: could not convert string to float: '1.495,18

I think this has to do with the number format. Although I set the number format in the ERPNext settings correctly, it doesn't use it here. Maybe there should be an option for the number format in the BankImport Template?

Observed in (version)

latest

Steps to reproduce

Try to import a template with a number like 1.234,56 using the importer.

Thanks for such an awesome piece of software!

Unable to uninstall app

Hello,

when I try to uninstall the app temporarily, it brings up the following error:

Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 99, in <module>
    main()
  File "/home/tfm/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 18, in main
    click.Group(commands=commands)(prog_name='bench')
  File "/home/tfm/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/tfm/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/tfm/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/tfm/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/tfm/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/tfm/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/tfm/frappe-bench/env/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/commands/__init__.py", line 26, in _func
    ret = f(frappe._dict(ctx.obj), *args, **kwargs)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/commands/site.py", line 425, in uninstall
    remove_app(app, dry_run, yes)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/installer.py", line 155, in remove_app
    frappe.delete_doc("Module Def", module_name)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/__init__.py", line 795, in delete_doc
    ignore_permissions, flags, ignore_on_trash, ignore_missing)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/model/delete_doc.py", line 101, in delete_doc
    check_if_doc_is_linked(doc)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/model/delete_doc.py", line 244, in check_if_doc_is_linked
    raise_link_exists_exception(doc, linked_doctype, reference_docname)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/model/delete_doc.py", line 299, in raise_link_exists_exception
    .format(doc.doctype, doc_link, reference_doctype, reference_link, row), frappe.LinkExistsError)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/__init__.py", line 376, in throw
    msgprint(msg, raise_exception=exc, title=title, indicator='red', is_minimizable=is_minimizable)
  File "/home/tfm/frappe-bench/apps/frappe/frappe/__init__.py", line 355, in msgprint
    _raise_exception()
  File "/home/tfm/frappe-bench/apps/frappe/frappe/__init__.py", line 315, in _raise_exception
    raise raise_exception(msg)
frappe.exceptions.LinkExistsError: Cannot delete or cancel because Module Def <a href="#Form/Module Def/ERPNextSwiss">ERPNextSwiss</a> is linked with Print Format <a href="#Form/Print Format/QR Sales Invoice">QR Sales Invoice</a>

It looks like the app creates a relation to the DocType "Print Format". However I cannot edit the "Print Format" DocType directly, since it's a core type.

Can you help me on this? I cannot use the app anymore, nor reinstall it.

Raiffeisen: end-to-end reference

The current unique reference at Raiffeisen ist the end-to-end reference. Raiffeisen does not provide a unique transaction reference.

Use second line as reference instead.

Bank Transfer fails to UBS with missing DbtrAgt

Expected behvauour

Creating payments (ESR) with UBS.

Actual behaviour

The transfer file is rejected with unexpected "CdtTrfTxInf", expecting "DbtrAgt".

Observed in (version)

v0.6.4

Steps to reproduce

  • Create a new payment.
  • Create a transfer file.
  • Execute using UBS payment. Observe that the file is rejected.

The DbtrAgt (BIC) was declared obsolete and left out. However, UBS still required this information.

Create bank transfer file fails with "Error while generating xml."

Expected behvauour

Payments are compiled into a payment instruction xml file (ERPNextSwiss > Create payment file).

Actual behaviour

The creation fails with
grafik

Fixtures have been applied correctly. IBAN of the account contains whilespaces.

Observed in (version)

ERPNextSwiss: v0.6.2 (master)

Steps to reproduce

  • Create payments and a bank account to pay from
  • Create a payment file

Assigning Accounts User to page fails

When trying to assign the pages to "Accounts User" using the "Permissions for Page and Report", it fails with

Message
Could not find Row #1: Role: User

Affects v0.3.5 and prior.

Desk Page ERPNextSwiss not found error

Hello
i installed the app. It shows up under about and I can search for the Doctype ERPNextSwiss Setting, but the module doesn't show up on the desk.
I get this error message everytime I clean the cache:
Bildschirmfoto 2020-09-24 um 21 25 21

Thanks in advance

TypeError: coercing to Unicode: need string or buffer, NoneType found

Expected behaviour:
On click on generate payment file the file should be ready for download

Actual behaviour:
Error message "TypeError: coercing to Unicode: need string or buffer, NoneType found" is displayed.
Traceback

Traceback (most recent call last):
  File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 62, in application
    response = frappe.handler.handle()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 22, in handle
    data = execute_cmd(cmd)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 53, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 939, in call
    return fn(*args, **newargs)
  File "/home/frappe/frappe-bench/apps/erpnextswiss/erpnextswiss/erpnextswiss/page/payment_export/payment_export.py", line 53, in generate_payment_file
   content += make_line("        <Nm>" + get_company_name(payments[0]) + "</Nm>")
TypeError: coercing to Unicode: need string or buffer, NoneType found

Obeserved in v0.1 (master)

bench update fails with ValueError

Expected behvauour

bench update
is updateing successfully

Actual behaviour

Updating DocTypes for frappe        : [========================================]
Updating DocTypes for erpnext       : [========================================]
Updating DocTypes for erpnextswiss  : [=====                                   ]Traceback (most recent call last):
  File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 97, in <module>
    main()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 18, in main
    click.Group(commands=commands)(prog_name='bench')
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/__init__.py", line 25, in _func
    ret = f(frappe._dict(ctx.obj), *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/site.py", line 227, in migrate
    migrate(context.verbose, rebuild_website=rebuild_website)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/migrate.py", line 49, in migrate
    frappe.model.sync.sync_all(verbose=verbose)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/sync.py", line 19, in sync_all
    sync_for(app, force, verbose=verbose, reset_permissions=reset_permissions)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/sync.py", line 56, in sync_for
    reset_permissions=reset_permissions, for_sync=True)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/modules/import_file.py", line 65, in import_file_by_path
    ignore_version=ignore_version, reset_permissions=reset_permissions)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/modules/import_file.py", line 100, in import_doc
    doc = frappe.get_doc(docdict)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 734, in get_doc
    doc = frappe.model.document.get_doc(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 69, in get_doc
    return controller(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 113, in __init__
    super(Document, self).__init__(kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 54, in __init__
    self.update(d)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 77, in update
    self.set(key, value)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 124, in set
    self.extend(key, value)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 161, in extend
    self.append(key, v)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 155, in append
    self.name, str(type(value))[1:-1], value)
ValueError: Document for field "field_order" attached to child table of "Abacus Export File" must be a dict or BaseDocument, not class 'str' (from_date)

Observed in (version)

erpnext 11.1.68
erpnextswiss 1.6.0
frappe 11.1.62

Steps to reproduce

I think this might be a compatibility issue. With the current frappe / erpnext V11 version. If so, this will happen with each bench update on at least the version-11 branch.

Special characters in bank import

If a csv from a bank import is imported which contains special characters (ä, ö, ü), these appear as strange characters.

Encoding error?

Frage: DE

Hallo,

sorry, fürs Anlegen eines Issues dafür; ich habe keinen anderen Weg erkennen können, wie ich in Kontakt treten kann.

Ich wollte wissen, ob Euch Informationen vorliegen, ob erpnextswiss bereits (von irgend jemand) außerhalb der Schweiz (z.B. Deutschland) eingesetzt wurde, oder ob es "hard facts" gibt, die grundsätzlich dagegen sprechen.

Die Anmerkungen in Features in der Readme lesen sich ja schon so, dass es nicht zwingend inkompatibel zu sein scheint (z.B. MT940 und CAMT sind ja in DE auch gängig).

Wäre super, wenn Ihr dazu ein kurzes Feedback hättet. Oder gibt es ansonsten ggf. ein anderes Repo, das ich bislang nicht gefunden habe?

Danke und Gruß
Philipp

Raiffeisen csv changed (added IBAN Column)

Expected behvauour

Read the Data from the csv-file

Actual behaviour

Please wait, parsing data...

Observed in (version)

ERPNextSwiss: v0.9.0 (master)

Steps to reproduce

actual columns in csv-file
IBAN | Booked At | Text | Credit/Debit Amount | Balance | Valuta Date

old and functional csv-file
Booked At | Text | Credit/Debit Amount | Balance | Valuta Date

--

Uncaught exceptions

Expected behvauour

No Errors

Actual behaviour

//////////////////////////////
Uncaught exceptions
Traceback (most recent call last):
File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 61, in application
response = frappe.handler.handle()
File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 21, in handle
data = execute_cmd(cmd)
File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 56, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 1026, in call
return fn(*args, **newargs)
File "/home/frappe/frappe-bench/apps/frappe/frappe/desk/notifications.py", line 284, in get_open_count
filters=filters, limit=100, distinct=True, ignore_ifnull=True))
File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 1281, in get_all
return get_list(doctype, *args, **kwargs)
File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 1254, in get_list
return frappe.model.db_query.DatabaseQuery(doctype).execute(None, *args, **kwargs)
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/db_query.py", line 93, in execute
result = self.build_and_run()
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/db_query.py", line 117, in build_and_run
return frappe.db.sql(query, as_dict=not self.as_list, debug=self.debug, update=self.update)
File "/home/frappe/frappe-bench/apps/frappe/frappe/database.py", line 210, in sql
self._cursor.execute(query)
File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/pymysql/cursors.py", line 165, in execute
result = self._query(query)
File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/pymysql/cursors.py", line 321, in _query
conn.query(q)
File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 860, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 1061, in _read_query_result
result.read()
File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 1349, in read
first_packet = self.connection._read_packet()
File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 1018, in _read_packet
packet.check_error()
File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 384, in check_error
err.raise_mysql_exception(self._data)
File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/pymysql/err.py", line 107, in raise_mysql_exception
raise errorclass(errno, errval)
InternalError: (1054, u"Unknown column 'tabPayment Entry.customer' in 'where clause'")

/////////////////////////////////////////

Observed in (version)

v11.1.11, erpnext
v11.1.11, frappe
v1.3.0, erpnext swiss

Steps to reproduce

When you change/access Master such as customer / supplier

[Feature Request] Payment file with expense payment

Expected behvauour

If a payment is created to reimburse an expense sheet, this payment should also be automatically processed using the payment file function.

Actual behaviour

The employee payments are rejected due to missing address.

Observed in (version)

v0.7.3

Steps to reproduce

  • Create an expense sheet, fill in and submit
  • Make > Payment
  • ERPNextSwiss > Create Payment File > select and create. Observe error.

BankImport: local variable 'basestring' referenced before assignment

Expected behaviour

Import bank csv export

Actual behaviour

Parse throws: UnboundLocalError: local variable 'basestring' referenced before assignment

Traceback (most recent call last):
  File "/home/frappe/frappe-dev/apps/frappe/frappe/app.py", line 61, in application
    response = frappe.handler.handle()
  File "/home/frappe/frappe-dev/apps/frappe/frappe/handler.py", line 21, in handle
    data = execute_cmd(cmd)
  File "/home/frappe/frappe-dev/apps/frappe/frappe/handler.py", line 56, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "/home/frappe/frappe-dev/apps/frappe/frappe/__init__.py", line 1030, in call
    return fn(*args, **newargs)
  File "/home/frappe/frappe-dev/apps/erpnextswiss/erpnextswiss/erpnextswiss/page/bankimport/bankimport.py", line 658, in parse_file
    new_records = parse_by_template(content, bank_doc[0]['csv_template'], account, auto_submit, debug)
  File "/home/frappe/frappe-dev/apps/erpnextswiss/erpnextswiss/erpnextswiss/page/bankimport/bankimport.py", line 766, in parse_by_template
    { 'field_index': getFieldDefinition('booked_at_field'),'field_reg': getFieldDefinition('booked_at_reg'),'match_group': 'booked','regired': True},
  File "/home/frappe/frappe-dev/apps/erpnextswiss/erpnextswiss/erpnextswiss/page/bankimport/bankimport.py", line 717, in getFieldDefinition
    if isinstance(value, basestring()):
UnboundLocalError: local variable 'basestring' referenced before assignment

Observed in (version)

Installed Apps
ERPNext: v11.1.20 (master)
ERPNextSwiss: v1.4.0 (develop)
Frappe Framework: v11.1.21 (master)
Python Version: 2.7.5 (default, Apr 9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
CentOS Version: CentOS Linux release 7.6.1810 (Core)

Steps to reproduce

Install latest CentOS
Install Frappe / ERPNext (master)
Install ERPNextSwiss (develop)
Try to import csv export

Can't find the App after Install.

Hello to you!
After downloading and installing the app successfully I can not seem to find it anywhere in the system. What am I missing? Does it have to be activated some where? Wizard required etc?

Thanks

ERPNext V13 compatibility

Expected behaviour

No error when upgrading to ERPNext V13

Actual behaviour

Following error during the patching process:

Patching sites...
Migrating erp.villigertechnik.ch
Updating DocTypes for frappe        : [========================================] 100%
Updating DocTypes for erpnext       : [========================================] 100%
Updating DocTypes for erpnextswiss  : [========================================] 100%
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 101, in <module>
    main()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 18, in main
    click.Group(commands=commands)(prog_name='bench')
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/frappe/frappe-bench/env/lib/python3.6/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/__init__.py", line 27, in _func
    ret = f(frappe._dict(ctx.obj), *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/site.py", line 309, in migrate
    skip_search_index=skip_search_index
  File "/home/frappe/frappe-bench/apps/frappe/frappe/migrate.py", line 73, in migrate
    sync_fixtures()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/fixtures.py", line 24, in sync_fixtures
    import_doc(frappe.get_app_path(app, "fixtures", fname))
  File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/data_import/data_import.py", line 191, in import_doc
    reset_permissions=True
  File "/home/frappe/frappe-bench/apps/frappe/frappe/modules/import_file.py", line 70, in import_file_by_path
    ignore_version=ignore_version, reset_permissions=reset_permissions)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/modules/import_file.py", line 143, in import_doc
    doc.insert()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 230, in insert
    self.run_method("before_insert")
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 858, in run_method
    out = Document.hook(fn)(self, *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 1147, in composer
    return composed(self, method, *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 1130, in runner
    add_to_return_value(self, fn(self, *args, **kwargs))
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 852, in <lambda>
    fn = lambda self, *args, **kwargs: getattr(self, method)(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/custom/doctype/custom_field/custom_field.py", line 40, in before_insert
    frappe.throw(_("A field with the name '{}' already exists in doctype {}.").format(self.fieldname, self.dt))
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 427, in throw
    msgprint(msg, raise_exception=exc, title=title, indicator='red', is_minimizable=is_minimizable, wide=wide, as_list=as_list)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 406, in msgprint
    _raise_exception()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 360, in _raise_exception
    raise raise_exception(msg)
frappe.exceptions.ValidationError: A field with the name 'total_taxes_and_charges' already exists in doctype Expense Claim.

Steps to reproduce

Update V12 to V13 according to this tutorial: https://discuss.erpnext.com/t/how-to-upgrade-to-v13/73769/2

Bank Wizard: Records without TxDtls pull customer and reference from last record

Expected behvauour

Bank Wizard parses a file and has the correct or not customer details and reference

Actual behaviour

On entries without txdtls, the bank wizard shows the details from the last available record.

Observed in (version)

Current stable

Steps to reproduce

Open bank wizard and parse a file with normal and poor-quality records (no txdtls). Observe output.

Payment Proposal for Multicompany configuration

Expected behvauour

In a multi-company setup, the payment proposal asks for the company and then proposes the respective payments

Actual behaviour

In a multi-company setup, no payments are proposed.

Observed in (version)

v1

Steps to reproduce

  • Use a multi-company system, create some purchase invoices and submit them
  • Open payment proposal, Menu > Create Payment Proposal
  • Observe proposed invoices

how to install properly (which version is adviced?)

I would love to use the csv import-features.

Expected behaviour

$ bench get-app https://github.com/libracore/erpnextswiss.git
$ bench install-app erpnextswiss

Actual behaviour

$ bench get-app https://github.com/libracore/erpnextswiss.git
Usage: bench get-app [OPTIONS] NAME GIT_URL

Error: Missing argument "git-url".None
$ bench get-app erpnextswiss https://github.com/libracore/erpnextswiss.git
(goes fine)
$ bench install-app erpnextswiss

Installing erpnextswiss... Traceback (most recent call last): File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 77, in <module> main() File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 14, in main click.Group(commands=commands)(prog_name='bench') File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py", line 664, in __call__ return self.main(*args, **kwargs) File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py", line 644, in main rv = self.invoke(ctx) File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py", line 991, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py", line 991, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py", line 837, in invoke return ctx.invoke(self.callback, **ctx.params) File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py", line 464, in invoke return callback(*args, **kwargs) File "/home/frappe/frappe-bench/apps/frappe/frappe/commands.py", line 28, in _func ret = f(frappe._dict(ctx.obj), *args, **kwargs) File "/home/frappe/frappe-bench/apps/frappe/frappe/commands.py", line 163, in install_app _install_app(app, verbose=context.verbose) File "/home/frappe/frappe-bench/apps/frappe/frappe/installer.py", line 120, in install_app add_module_defs(name) File "/home/frappe/frappe-bench/apps/frappe/frappe/installer.py", line 230, in add_module_defs d.save() File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 214, in save self.insert() File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 186, in insert self.db_insert() File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 254, in db_insert ), d.values()) File "/home/frappe/frappe-bench/apps/frappe/frappe/database.py", line 135, in sql self._cursor.execute(query, values) File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute self.errorhandler(self, exc, value) File "/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler raise errorclass, errorvalue frappe.exceptions.NameError: (u'Module Def', u'ERPNextSwiss', IntegrityError(1062, "Duplicate entry 'ERPNextSwiss' for key 'PRIMARY'"))

Actually this is output of the second attempt (dont have the first run output). Installing it from the UI gives me this:

image

Observed in (version)

erpnext masterbranch latest commit 41721fe
(https://hub.docker.com/r/davidgu/erpnext)

Activity/Compatibility Erpnext v14

Hello, I'm just starting with ERPnext and am interested in this repo.
I currently have the newest version of ERPnext (14.15.0) installed and tried installing this addon.
However, I got some issues with:

  • dynamic_newsletter.py frappe.email.queue → Just deleted that for testing
  • edi_file.py frappe.email.queue → remove mail send from python code for testing
  • DocType Expense Claim not found now I'm hanging at this error.

I wanted to ask if this repo is still active, as the README.md says:

ERPNextSwiss is tested against ERPNext v12. There are compatibility branches for v11 (for user who prefer the old desk) and v13 (for daring users).

With v14 out since August, I'm not sure if this is still used. Is it advised to stay at older versions of ERPnext for production? Maybe use v13?

Once I get to know ERPnext a little better, I'm looking forward to contributing to this repo and the ecosystem!

AttributeError: 'NoneType' object has no attribute 'upper' on generation of payment file

When trying to create a payment file, the following error occurs

 Traceback (most recent call last):
  File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 62, in application
    response = frappe.handler.handle()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 22, in handle
    data = execute_cmd(cmd)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 53, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 939, in call
    return fn(*args, **newargs)
  File "/home/frappe/frappe-bench/apps/erpnextswiss/erpnextswiss/erpnextswiss/page/payment_export/payment_export.py", line 148, in generate_payment_file
    creditor_info = add_creditor_info(payment_record)
  File "/home/frappe/frappe-bench/apps/erpnextswiss/erpnextswiss/erpnextswiss/page/payment_export/payment_export.py", line 268, in add_creditor_info
    country_code = frappe.get_value('Country', supplier_address.country, 'code').upper()
AttributeError: 'NoneType' object has no attribute 'upper'

It is probably caused by a missing Country setting of a supplier...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.