Add direct use without wizard and fix field parameters #10

Closed
jangras wants to merge 5 commits from direct_use into main
Member
  • Fix field parameter order (string as second positional argument)
  • Change default for as_zip from True to False
  • Add fallback for edocument parameter from account.configuration
  • Add fallback to use ids when invoice not in data parameter
  • Enable direct report execution without requiring wizard
- Fix field parameter order (string as second positional argument) - Change default for as_zip from True to False - Add fallback for edocument parameter from account.configuration - Add fallback to use ids when invoice not in data parameter - Enable direct report execution without requiring wizard
- Fix field parameter order (string as second positional argument)
- Change default for as_zip from True to False
- Add fallback for edocument parameter from account.configuration
- Add fallback to use ids when invoice not in data parameter
- Enable direct report execution without requiring wizard
Member

Hab den Patch getestet, funktioniert nur teilweise für mich.

Ohne

        <record model="ir.action.keyword" id="report_invoice_keyword">
            <field name="keyword">form_print</field>
            <field name="model">account.invoice,-1</field>
            <field name="action" ref="report_edocument"/>
        </record>

wird der Report nicht im E-Mail Wizard angezeigt und auch nicht versendet.

Mit dem o.g. keyword

  • wird der Report im Wizard angezeigt
  • gibt es zwei Actions im Report Menu
  • und funktioniert der Versand.

Allerdings bei direktem Aufruf der Report Action erhalte ich folgenden Traceback, wenn der Report noch nicht im Cache ist.

Traceback (most recent call last):
  File "/trytond/wsgi.py", line 109, in dispatch_request
    return endpoint(request, **request.view_args)
  File "/trytond/protocols/dispatcher.py", line 43, in rpc
    return methods.get(request.rpc_method, _dispatch)(
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        request, database_name, *request.rpc_params)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/trytond/wsgi.py", line 75, in wrapper
    return func(request, *args, **kwargs)
  File "/trytond/protocols/wrappers.py", line 200, in wrapper
    return func(request, pool, *args, **kwargs)
  File "/trytond/protocols/dispatcher.py", line 196, in _dispatch
    result = rpc.result(meth(*c_args, **c_kwargs))
                        ~~~~^^^^^^^^^^^^^^^^^^^^^
  File "/trytond/modules/html_report/engine.py", line 525, in execute
    return super().execute(ids, data)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/trytond/modules/account_invoice_xrechnung/xreport.py", line 101, in execute
    invoice_pdf = cls.get_zugferd_pdf(invoice, invoice_xml)
  File "/trytond/modules/account_invoice_xrechnung/xreport.py", line 184, in get_zugferd_pdf
    report_data = cls.generate_pdf_data([invoice])
  File "/trytond/modules/account_invoice_xrechnung/xreport.py", line 159, in generate_pdf_data
    (ext, content, print1, fname) = RepInvoice.execute(
                                    ~~~~~~~~~~~~~~~~~~^
        [record.id], data2)
        ^^^^^^^^^^^^^^^^^^^
  File "/trytond/modules/meta_hmi/report.py", line 97, in execute
    ext, content, direct, name = super().execute(
                                 ~~~~~~~~~~~~~~~^
        ids, data)
        ^^^^^^^^^^
  File "/trytond/modules/html_report/engine.py", line 525, in execute
    return super().execute(ids, data)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/trytond/modules/account_invoice/invoice.py", line 3299, in execute
    return super().execute(ids, data)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/trytond/report/report.py", line 255, in execute
    oext, content = cls._execute(
                    ~~~~~~~~~~~~^
        groups[0], headers[0], data, action_report)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/trytond/modules/account_invoice/invoice.py", line 3286, in _execute
    invoice.save()
    ~~~~~~~~~~~~^^
  File "/trytond/model/descriptors.py", line 31, in newfunc
    return self.func(owner, [instance], *args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/trytond/model/modelstorage.py", line 1997, in save
    cls.write(*sum(
    ~~~~~~~~~^^^^^^
            (([r], save_values[r]) for r in to_write), ()))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/trytond/modules/account_deposit/invoice.py", line 44, in write
    super(Invoice, cls).write(*args)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/trytond/modules/account_tax_cash/account.py", line 268, in write
    super(Invoice, cls).write(*args)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/trytond/modules/account_invoice/invoice.py", line 1429, in write
    super(Invoice, cls).write(*args)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/trytond/model/modelsql.py", line 274, in wrapper
    return func(cls, *args, **kwargs)
  File "/trytond/model/modelsql.py", line 1401, in write
    cursor.execute(*table.update(columns, update_values,
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            where=red_sql))
            ^^^^^^^^^^^^^^^
  File "/trytond/backend/postgresql/database.py", line 69, in execute
    cursor.execute(self, sql, args)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
psycopg2.errors.ReadOnlySqlTransaction: FEHLER:  UPDATE kann nicht in einer Read-Only-Transaktion ausgeführt werden


Fault: FEHLER:  UPDATE kann nicht in einer Read-Only-Transaktion ausgeführt werden
Hab den Patch getestet, funktioniert nur teilweise für mich. 1) Ohne ``` <record model="ir.action.keyword" id="report_invoice_keyword"> <field name="keyword">form_print</field> <field name="model">account.invoice,-1</field> <field name="action" ref="report_edocument"/> </record> ``` wird der Report nicht im E-Mail Wizard angezeigt und auch nicht versendet. 2) Mit dem o.g. keyword - wird der Report im Wizard angezeigt - gibt es zwei Actions im Report Menu - und funktioniert der Versand. 3) Allerdings bei direktem Aufruf der Report Action erhalte ich folgenden Traceback, wenn der Report **noch nicht** im Cache ist. ``` Traceback (most recent call last): File "/trytond/wsgi.py", line 109, in dispatch_request return endpoint(request, **request.view_args) File "/trytond/protocols/dispatcher.py", line 43, in rpc return methods.get(request.rpc_method, _dispatch)( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ request, database_name, *request.rpc_params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/trytond/wsgi.py", line 75, in wrapper return func(request, *args, **kwargs) File "/trytond/protocols/wrappers.py", line 200, in wrapper return func(request, pool, *args, **kwargs) File "/trytond/protocols/dispatcher.py", line 196, in _dispatch result = rpc.result(meth(*c_args, **c_kwargs)) ~~~~^^^^^^^^^^^^^^^^^^^^^ File "/trytond/modules/html_report/engine.py", line 525, in execute return super().execute(ids, data) ~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/trytond/modules/account_invoice_xrechnung/xreport.py", line 101, in execute invoice_pdf = cls.get_zugferd_pdf(invoice, invoice_xml) File "/trytond/modules/account_invoice_xrechnung/xreport.py", line 184, in get_zugferd_pdf report_data = cls.generate_pdf_data([invoice]) File "/trytond/modules/account_invoice_xrechnung/xreport.py", line 159, in generate_pdf_data (ext, content, print1, fname) = RepInvoice.execute( ~~~~~~~~~~~~~~~~~~^ [record.id], data2) ^^^^^^^^^^^^^^^^^^^ File "/trytond/modules/meta_hmi/report.py", line 97, in execute ext, content, direct, name = super().execute( ~~~~~~~~~~~~~~~^ ids, data) ^^^^^^^^^^ File "/trytond/modules/html_report/engine.py", line 525, in execute return super().execute(ids, data) ~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/trytond/modules/account_invoice/invoice.py", line 3299, in execute return super().execute(ids, data) ~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/trytond/report/report.py", line 255, in execute oext, content = cls._execute( ~~~~~~~~~~~~^ groups[0], headers[0], data, action_report) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/trytond/modules/account_invoice/invoice.py", line 3286, in _execute invoice.save() ~~~~~~~~~~~~^^ File "/trytond/model/descriptors.py", line 31, in newfunc return self.func(owner, [instance], *args, **kwargs) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/trytond/model/modelstorage.py", line 1997, in save cls.write(*sum( ~~~~~~~~~^^^^^^ (([r], save_values[r]) for r in to_write), ())) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/trytond/modules/account_deposit/invoice.py", line 44, in write super(Invoice, cls).write(*args) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "/trytond/modules/account_tax_cash/account.py", line 268, in write super(Invoice, cls).write(*args) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "/trytond/modules/account_invoice/invoice.py", line 1429, in write super(Invoice, cls).write(*args) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "/trytond/model/modelsql.py", line 274, in wrapper return func(cls, *args, **kwargs) File "/trytond/model/modelsql.py", line 1401, in write cursor.execute(*table.update(columns, update_values, ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ where=red_sql)) ^^^^^^^^^^^^^^^ File "/trytond/backend/postgresql/database.py", line 69, in execute cursor.execute(self, sql, args) ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^ psycopg2.errors.ReadOnlySqlTransaction: FEHLER: UPDATE kann nicht in einer Read-Only-Transaktion ausgeführt werden Fault: FEHLER: UPDATE kann nicht in einer Read-Only-Transaktion ausgeführt werden ```
Author
Member

Ja - das Keyword muss bei - hab ich per Hand gemacht

Ja - das Keyword muss bei - hab ich per Hand gemacht
Author
Member

Und was schreibt er denn da?

Und was schreibt er denn da?
Member

@jangras wrote in #10 (comment):

Und was schreibt er denn da?

Er speichert die Rechnung im Cache. Muss da irgendeine Methode in den RPC (get_zugferd_pdf, generate_pdf_data)?

@jangras wrote in https://scmforg.m-ds.de/mds-public/account_invoice_xrechnung/pulls/10#issuecomment-2067: > Und was schreibt er denn da? Er speichert die Rechnung im Cache. Muss da irgendeine Methode in den RPC (get_zugferd_pdf, generate_pdf_data)?
Member

@jangras wrote in #10 (comment):

Ja - das Keyword muss bei - hab ich per Hand gemacht

Dann sollten wir wohl am besten eine separate Action mit eigenem Namen (eDocument Export direct) o.ä. für dieses Keyword erstellen, und/oder die bestehende Action in 'eDocument Export interactive' o.ä. umbenennen, damit die zwei Einträge von der Benutzerseite her unterscheidbar sind.

@jangras wrote in https://scmforg.m-ds.de/mds-public/account_invoice_xrechnung/pulls/10#issuecomment-2066: > Ja - das Keyword muss bei - hab ich per Hand gemacht Dann sollten wir wohl am besten eine separate Action mit eigenem Namen (eDocument Export direct) o.ä. für dieses Keyword erstellen, und/oder die bestehende Action in 'eDocument Export interactive' o.ä. umbenennen, damit die zwei Einträge von der Benutzerseite her unterscheidbar sind.
Author
Member

done

done
Member

Replaced by #12 to avoid merge conflicts against main.

Replaced by https://scmforg.m-ds.de/mds-public/account_invoice_xrechnung/pulls/12 to avoid merge conflicts against main.
mbehrle closed this pull request 2025-11-06 17:31:25 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
mds-public/account_invoice_xrechnung!10
No description provided.