From 36aecedce02cf3a425928d05a5c4ee18731809d2 Mon Sep 17 00:00:00 2001 From: Dorin Hongu Date: Mon, 14 Oct 2024 07:44:47 +0300 Subject: [PATCH] Raport PRN --- deltatech_report_prn/README.rst | 65 +++ deltatech_report_prn/__init__.py | 5 + deltatech_report_prn/__manifest__.py | 20 + deltatech_report_prn/controllers/__init__.py | 4 + deltatech_report_prn/controllers/main.py | 69 +++ deltatech_report_prn/models/__init__.py | 5 + deltatech_report_prn/models/ir_report.py | 19 + deltatech_report_prn/pyproject.toml | 3 + deltatech_report_prn/readme/DESCRIPTION.md | 3 + .../static/description/icon.png | Bin 0 -> 5170 bytes .../static/description/index.html | 414 ++++++++++++++++++ .../static/description/logo-terrabit.png | Bin 0 -> 3047 bytes .../static/description/main_screenshot.png | Bin 0 -> 13515 bytes .../static/src/js/action_manager.esm.js | 60 +++ deltatech_report_prn/tests/__init__.py | 3 + deltatech_sale_followup/data/ir_cron_data.xml | 5 +- deltatech_sale_followup/data/mail_data.xml | 4 +- 17 files changed, 674 insertions(+), 5 deletions(-) create mode 100644 deltatech_report_prn/README.rst create mode 100644 deltatech_report_prn/__init__.py create mode 100644 deltatech_report_prn/__manifest__.py create mode 100644 deltatech_report_prn/controllers/__init__.py create mode 100644 deltatech_report_prn/controllers/main.py create mode 100644 deltatech_report_prn/models/__init__.py create mode 100644 deltatech_report_prn/models/ir_report.py create mode 100644 deltatech_report_prn/pyproject.toml create mode 100644 deltatech_report_prn/readme/DESCRIPTION.md create mode 100644 deltatech_report_prn/static/description/icon.png create mode 100644 deltatech_report_prn/static/description/index.html create mode 100644 deltatech_report_prn/static/description/logo-terrabit.png create mode 100644 deltatech_report_prn/static/description/main_screenshot.png create mode 100644 deltatech_report_prn/static/src/js/action_manager.esm.js create mode 100644 deltatech_report_prn/tests/__init__.py diff --git a/deltatech_report_prn/README.rst b/deltatech_report_prn/README.rst new file mode 100644 index 0000000000..49429745af --- /dev/null +++ b/deltatech_report_prn/README.rst @@ -0,0 +1,65 @@ +========== +Raport PRN +========== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f063b37a4881db5750ee3c637075aa09b5bd6eb3fc70de468bfc870e8a9fb9da + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png + :target: https://odoo-community.org/page/development-status + :alt: Mature +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-dhongu%2Fdeltatech-lightgray.png?logo=github + :target: https://github.com/dhongu/deltatech/tree/17.0/deltatech_report_prn + :alt: dhongu/deltatech + +|badge1| |badge2| |badge3| + +Features: + +- It allows the printing of files with the .prn extension. These are + files that have syntax for Zebra label printers. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `Terrabit Issues `_. +In case of trouble, please check there if your issue has already been reported. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Terrabit +* Dorin Hongu + +Maintainers +----------- + +.. |maintainer-dhongu| image:: https://github.com/dhongu.png?size=40px + :target: https://github.com/dhongu + :alt: dhongu + +Current maintainer: + +|maintainer-dhongu| + +This module is part of the `dhongu/deltatech `_ project on GitHub. + +You are welcome to contribute. diff --git a/deltatech_report_prn/__init__.py b/deltatech_report_prn/__init__.py new file mode 100644 index 0000000000..d4067b195f --- /dev/null +++ b/deltatech_report_prn/__init__.py @@ -0,0 +1,5 @@ +# © 2008-2021 Deltatech +# See README.rst file on addons root folder for license details + +from . import models +from . import controllers diff --git a/deltatech_report_prn/__manifest__.py b/deltatech_report_prn/__manifest__.py new file mode 100644 index 0000000000..09bc553344 --- /dev/null +++ b/deltatech_report_prn/__manifest__.py @@ -0,0 +1,20 @@ +# © 2008-2021 Deltatech +# See README.rst file on addons root folder for license details + +{ + "name": "Raport PRN", + "summary": "Raport PRN", + "version": "17.0.1.0.4", + "category": "Stock", + "author": "Terrabit, Dorin Hongu", + "website": "https://www.terrabit.ro", + "depends": ["web"], + "license": "LGPL-3", + "data": [ + # "views/assets.xml" + ], + "images": ["static/description/main_screenshot.png"], + "development_status": "Mature", + "maintainers": ["dhongu"], + "assets": {"web.assets_backend": ["deltatech_report_prn/static/src/js/action_manager.esm.js"]}, +} diff --git a/deltatech_report_prn/controllers/__init__.py b/deltatech_report_prn/controllers/__init__.py new file mode 100644 index 0000000000..66e0e61007 --- /dev/null +++ b/deltatech_report_prn/controllers/__init__.py @@ -0,0 +1,4 @@ +# © 2008-2021 Deltatech +# See README.rst file on addons root folder for license details + +from . import main diff --git a/deltatech_report_prn/controllers/main.py b/deltatech_report_prn/controllers/main.py new file mode 100644 index 0000000000..b60aca3e40 --- /dev/null +++ b/deltatech_report_prn/controllers/main.py @@ -0,0 +1,69 @@ +# © 2008-2021 Deltatech +# See README.rst file on addons root folder for license details + + +import json +import time + +from werkzeug.urls import url_decode + +from odoo.http import content_disposition, request, route +from odoo.tools.safe_eval import safe_eval + +import odoo.addons.web.controllers.report as report + + +class ReportController(report.ReportController): + @route() + def report_routes(self, reportname, docids=None, converter=None, **data): + if converter == "prn": + return super().report_routes(reportname, docids, "text", **data) + return super().report_routes(reportname, docids, converter, **data) + + @route() + def report_download(self, data, context=None): + """This function is used by 'action_manager_report.js' in order to trigger the download of + a pdf/controller report. + + :param data: a javascript array JSON.stringified containg report internal url ([0]) and + type [1] + :returns: Response with a filetoken cookie and an attachment header + """ + + requestcontent = json.loads(data) + url, report_type = requestcontent[0], requestcontent[1] + if report_type == "qweb-prn": + converter = "prn" + extension = "prn" + + pattern = "/report/prn/" + reportname = url.split(pattern)[1].split("?")[0] + + docids = None + if "/" in reportname: + reportname, docids = reportname.split("/") + + if docids: + # Generic report: + response = self.report_routes(reportname, docids=docids, converter=converter, context=context) + else: + # Particular report: + data = dict(url_decode(url.split("?")[1]).items()) # decoding the args represented in JSON + if "context" in data: + context, data_context = json.loads(context or "{}"), json.loads(data.pop("context")) + context = json.dumps({**context, **data_context}) + response = self.report_routes(reportname, converter=converter, context=context, **data) + + report = request.env["ir.actions.report"]._get_report_from_name(reportname) + filename = f"{report.name}.{extension}" + + if docids: + ids = [int(x) for x in docids.split(",")] + obj = request.env[report.model].browse(ids) + if report.print_report_name and not len(obj) > 1: + report_name = safe_eval(report.print_report_name, {"object": obj, "time": time}) + filename = f"{report_name}.{extension}" + response.headers.add("Content-Disposition", content_disposition(filename)) + return response + + return super().report_download(data, context) diff --git a/deltatech_report_prn/models/__init__.py b/deltatech_report_prn/models/__init__.py new file mode 100644 index 0000000000..d6b3679afa --- /dev/null +++ b/deltatech_report_prn/models/__init__.py @@ -0,0 +1,5 @@ +# © 2008-2021 Deltatech +# See README.rst file on addons root folder for license details + + +from . import ir_report diff --git a/deltatech_report_prn/models/ir_report.py b/deltatech_report_prn/models/ir_report.py new file mode 100644 index 0000000000..3bcc547354 --- /dev/null +++ b/deltatech_report_prn/models/ir_report.py @@ -0,0 +1,19 @@ +# © 2008-2021 Deltatech +# See README.rst file on addons root folder for license details + + +from odoo import api, fields, models + + +class ReportAction(models.Model): + _inherit = "ir.actions.report" + + report_type = fields.Selection(selection_add=[("qweb-prn", "PRN")], ondelete={"qweb-prn": "set default"}) + + @api.model + def _render_qweb_prn(self, report_ref, docids, data): + if not data: + data = {} + data.setdefault("report_type", "text") + data = self._get_rendering_context(self, docids, data) + return self._render_template(self.sudo().report_name, data), "text" diff --git a/deltatech_report_prn/pyproject.toml b/deltatech_report_prn/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/deltatech_report_prn/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/deltatech_report_prn/readme/DESCRIPTION.md b/deltatech_report_prn/readme/DESCRIPTION.md new file mode 100644 index 0000000000..97218e23e7 --- /dev/null +++ b/deltatech_report_prn/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +Features: + +- It allows the printing of files with the .prn extension. These are files that have syntax for Zebra label printers. diff --git a/deltatech_report_prn/static/description/icon.png b/deltatech_report_prn/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..36ef3b11792f1aa945d467633fb398581a075c50 GIT binary patch literal 5170 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 g^?&u3rvZ)meZDO$E6VR*;|2g0rdF5gO + + + + +Raport PRN + + + +
+

Raport PRN

+ + +

Mature License: LGPL-3 dhongu/deltatech

+

Features:

+
    +
  • It allows the printing of files with the .prn extension. These are +files that have syntax for Zebra label printers.
  • +
+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on Terrabit Issues. +In case of trouble, please check there if your issue has already been reported.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Terrabit
  • +
  • Dorin Hongu
  • +
+
+
+

Maintainers

+

Current maintainer:

+

dhongu

+

This module is part of the dhongu/deltatech project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/deltatech_report_prn/static/description/logo-terrabit.png b/deltatech_report_prn/static/description/logo-terrabit.png new file mode 100644 index 0000000000000000000000000000000000000000..8b23ccdd371b63cfa87fdea531374b662e586588 GIT binary patch literal 3047 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 literal 0 HcmV?d00001 diff --git a/deltatech_report_prn/static/description/main_screenshot.png b/deltatech_report_prn/static/description/main_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4513ca1d397680899df5e54e92b792d5f1ec13e1 GIT binary patch literal 13515 zcmaKTWmH_vvi9Hvw}ipnZE$z@;1Xm8C%9XX2?P&LaCZ#^4>rNwC3tWN?#{=1?m73n zKkmBw&+e*S)=yXUtX16;@m@_H6O9-R003YrD#&O80Pr9H01k+X@XGNJ5XpFb5xL9i zyK6aFxqCreEdi1iPG**riVhHKOHE6Ng^$air3e6k5MryX@2;<^B4qC5zz+FGhTYr2 z`BfVL5E1uwhM3z~x>K52TH88`QlGSTQd8Pmh*InEs)AIVr7dl26?|PSwS3jI&3*06 z1udw>#VAF*g;ovR!S}qCm#n$kb{$l4a6w~5)=Y)QvUm)e)Z;RVI`y~ zBlmA#uaqdYjk~+E5C?~smlwMiH@lOoH3z4lpdbf`i-U`c?Nx%!&BxIl;?3shM)MyF zGL~-UuC~tZwoZ_u4sVDv2PZp-!@=R7 zdHqY;&0W*-|A+CvO1o+MI9qaPTDm!TxSGGNhZW6#lwYy?za9M}_!^Cnx~uK$qCo6r zoXkBOEFIkyWkji8zpz`_S_tv-3UGled9Bz$5DOkQGYAhKn}FFXX#uj}i^Ugl6JL(xI4LOJ2~0^Ckx)&IJrBy**G~im?9dbW-hPF`+I|18sg z&05CN)z;I}LeAC6f%0EC3)%iJF_>{$3i6uq2(no~EFo;>0z4o#Gp<(>!o|nUZ^6rJ z1rg+;{9rmK?^U#A+xmW@ zy2|~%n7X>#J3c<1nw%_}O<7!AEN<@K-`{tSD^YigTUlAz+1VKz9S!|i968{T+Vf** zx2LJ8S=92&-0ZCN*X*nNtBv*bqORV{!&~SwmPq)0H;9mRd>ubJf zn~mcGU0wZ@lvJCN=*h(mFE8);z2dHApSJb--hrO2iw(M9qtT7U!os4#!GYV`TWf2Z z`lVvuy3F0P!KH((vV}Z6Pi5GWM^O6ri}UllhqLajHh`0qPrrNW%(sk*aDXN6{o_5M zug2uTaQJ9Q%i#3o<>mF=ZFFH1o4#M)YVgpX$gVyZtF!0n>8X^I4709}va)Jz-)QYr zuiWRb?v<&|k@=L$c8yGb0RiF8Mc1kAm2b_h2gm33UDmEW4o3N*kanY=eJxB*?f`qS zv)i+s)5EiyD}aq4tgmBgJCjz!}IISPGwM_kOBeMWH*hn82xbyoWO2hQ#OA-8sPa&o@AyOT_CMsSkkaP>Adg~Y_f z0-U999EG;eV?(VLwtzF(;KRrE;jEtO}ojtyS{`~a(^4#6sGq5(--#_q5Z*Fe# zd;8a}eV?A5?(FLbY|N>us(yYIdU;tr+>M=x=JxPAy*b9#@uLC&*d`TaB(=R453?|h z2s~C{dI%ASpL*kX-x7@CXn=T8uOg>~6_Dnd)FfGQzGzLfzn{tN8Y3KNp5kILZkXm) zya~Us_}YL~H-o>%n6*L%{YEGWH;N)et~H+Rv$T@7(3G~2mPM4hw#yFjy8iMMcysg8 z{$hDhO#{}jhKPX~@8DFOq^koT+SiDP7^*bP z3@2?2sFCBcpat&{adk{}DZwT0&<5d*gh#orMz$jmOGni%Tvp)pi6f0Hul z-T)1Yzk6lYw~+&o0RWtLd#1r#CdwNGK)}p!LISmGety0ybwYwf5eA~nkqN&7`Un{a z`F)N@TlE4z9YK5u!5U@fVkxUAqlqlda6CL$CL9ey>;q4nD7v{#_tiTI4ntm=sJQTT zWZ?UE6YH>waK{7fzrE#_5)nYPpm>KHH@wCPzM0RtGSReFV2mMRj$OS$;ryO*3tBUM z6yymlM%3_%w-t0WxZPYJWPdQv7jzc?S6xL)a8i;tl$A(aqOfOxy3iZL54LAlYPBCd znomcs6nXapSw#(P+wN-sSFK?Ouck=^8~C%0QDxP16dyj*cC`V#oZ9Y3t*;6ZaIi5O z+gby-(A8}w4eGCdh%BJ4whf}#(L<({p&Yq4@duxL0CIG?+;W)o9;m)_?&OIFc8NKQ zLVjaI*u_E}p`u`^4~6v!1JFrPJQ9-UG2vQUQBgRIdZq|o54J<+XcQi0vFmOsR6+%_ zQJ6~A4j#}vSD&AbS08`zD^#%F)l)qwI=hw;l;~98HL@xs*qP1^)@H&rTS>ym4Kk*y zZpurpt*x!osMwYuhF4jH(>}5P`c*Y!I#C#`J({n>3HW1um<_wk#FWNs#k=QxnNV_9 zMl)T&N8V%7U+d|s9^1u8-2+VWl>l&`S8!98VnfVZC!pEtqi^JWpy3f&?N>0k=d4H(x|+|MmknHYs0LC*Q|~*K^OI26o^HR89!Py(07
    3wjm;&q?2cfmqxYY2U0lV^Uk{-ZeHecO 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 - - + @@ -18,5 +17,5 @@ - + diff --git a/deltatech_sale_followup/data/mail_data.xml b/deltatech_sale_followup/data/mail_data.xml index d164fe2cd0..f18c7071ae 100644 --- a/deltatech_sale_followup/data/mail_data.xml +++ b/deltatech_sale_followup/data/mail_data.xml @@ -1,6 +1,6 @@ - + Sale Order: send followup @@ -69,5 +69,5 @@ ${object.partner_id.lang} - +