feat: Migrate module to Odoo 19, updating stock package references, controller route types, and adding access rights and a gitignore.
This commit is contained in:
parent
dd4bcba2c7
commit
4138df365c
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
# Python
|
||||
*.py[cod]
|
||||
__pycache__/
|
||||
*.so
|
||||
|
||||
# Odoo
|
||||
*.po~
|
||||
*.pot~
|
||||
|
||||
# Editor / System
|
||||
.DS_Store
|
||||
.vscode/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
'name': 'Web Direct Print',
|
||||
'version': '18.0.1.0.0',
|
||||
'version': '19.0.1.0.0',
|
||||
'category': 'Extra Tools',
|
||||
'summary': 'Enable direct printing from web browser to local printers',
|
||||
'description': """
|
||||
@ -36,6 +36,7 @@
|
||||
'stock',
|
||||
],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'data/ir_actions_server.xml',
|
||||
'views/direct_print_templates.xml',
|
||||
'views/sale_order_views.xml',
|
||||
|
||||
@ -1,90 +1,90 @@
|
||||
from odoo import http
|
||||
from odoo.http import request
|
||||
import json
|
||||
import base64
|
||||
|
||||
|
||||
class DirectPrintController(http.Controller):
|
||||
|
||||
@http.route('/web/direct_print', type='json', auth='user')
|
||||
def direct_print(self, report_name, docids, data=None):
|
||||
"""
|
||||
Controller method to handle direct print requests
|
||||
:param report_name: Name of the report to print
|
||||
:param docids: IDs of documents to print
|
||||
:param data: Additional data for the report
|
||||
:return: JSON response with print data
|
||||
"""
|
||||
try:
|
||||
import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
_logger.info(f"Controller received: report_name={report_name} (type: {type(report_name)}), docids={docids} (type: {type(docids)}), data={data}")
|
||||
|
||||
# Handle parameters that might come as different types
|
||||
if isinstance(report_name, list):
|
||||
report_name = report_name[0] if report_name else ''
|
||||
|
||||
if isinstance(docids, str):
|
||||
try:
|
||||
# Try to convert string to list of integers
|
||||
if ',' in docids:
|
||||
docids = [int(x.strip()) for x in docids.split(',') if x.strip()]
|
||||
else:
|
||||
docids = [int(docids)]
|
||||
except ValueError:
|
||||
docids = []
|
||||
elif not isinstance(docids, list):
|
||||
docids = [docids] if docids else []
|
||||
|
||||
_logger.info(f"Processed parameters: report_name={report_name}, docids={docids}")
|
||||
|
||||
# Call the direct print model method with proper context
|
||||
result = request.env['web.direct.print'].sudo().direct_print_action(
|
||||
report_name, docids, data, context=request.context
|
||||
)
|
||||
return result
|
||||
except Exception as e:
|
||||
import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
_logger.error(f"Controller error: {str(e)}")
|
||||
_logger.exception("Full traceback:")
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
@http.route('/web/direct_print/get_reports', type='json', auth='user')
|
||||
def get_available_reports(self):
|
||||
"""
|
||||
Controller method to get available reports for direct printing
|
||||
:return: JSON response with available reports
|
||||
"""
|
||||
try:
|
||||
result = request.env['web.direct.print'].sudo().get_available_reports()
|
||||
return result
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
@http.route('/web/direct_print/test', type='http', auth='user', website=True)
|
||||
def test_direct_print(self, **kwargs):
|
||||
"""
|
||||
Test endpoint for direct printing functionality
|
||||
"""
|
||||
# This could be used for testing purposes
|
||||
html_content = """
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Direct Print Test</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Direct Print Test Page</h1>
|
||||
<p>This page demonstrates the direct print functionality.</p>
|
||||
<button onclick="window.print()">Print this page</button>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
from odoo import http
|
||||
from odoo.http import request
|
||||
import json
|
||||
import base64
|
||||
|
||||
|
||||
class DirectPrintController(http.Controller):
|
||||
|
||||
@http.route('/web/direct_print', type='jsonrpc', auth='user')
|
||||
def direct_print(self, report_name, docids, data=None):
|
||||
"""
|
||||
Controller method to handle direct print requests
|
||||
:param report_name: Name of the report to print
|
||||
:param docids: IDs of documents to print
|
||||
:param data: Additional data for the report
|
||||
:return: JSON response with print data
|
||||
"""
|
||||
try:
|
||||
import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
_logger.info(f"Controller received: report_name={report_name} (type: {type(report_name)}), docids={docids} (type: {type(docids)}), data={data}")
|
||||
|
||||
# Handle parameters that might come as different types
|
||||
if isinstance(report_name, list):
|
||||
report_name = report_name[0] if report_name else ''
|
||||
|
||||
if isinstance(docids, str):
|
||||
try:
|
||||
# Try to convert string to list of integers
|
||||
if ',' in docids:
|
||||
docids = [int(x.strip()) for x in docids.split(',') if x.strip()]
|
||||
else:
|
||||
docids = [int(docids)]
|
||||
except ValueError:
|
||||
docids = []
|
||||
elif not isinstance(docids, list):
|
||||
docids = [docids] if docids else []
|
||||
|
||||
_logger.info(f"Processed parameters: report_name={report_name}, docids={docids}")
|
||||
|
||||
# Call the direct print model method with proper context
|
||||
result = request.env['web.direct.print'].sudo().direct_print_action(
|
||||
report_name, docids, data, context=request.context
|
||||
)
|
||||
return result
|
||||
except Exception as e:
|
||||
import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
_logger.error(f"Controller error: {str(e)}")
|
||||
_logger.exception("Full traceback:")
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
@http.route('/web/direct_print/get_reports', type='jsonrpc', auth='user')
|
||||
def get_available_reports(self):
|
||||
"""
|
||||
Controller method to get available reports for direct printing
|
||||
:return: JSON response with available reports
|
||||
"""
|
||||
try:
|
||||
result = request.env['web.direct.print'].sudo().get_available_reports()
|
||||
return result
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
@http.route('/web/direct_print/test', type='http', auth='user', website=True)
|
||||
def test_direct_print(self, **kwargs):
|
||||
"""
|
||||
Test endpoint for direct printing functionality
|
||||
"""
|
||||
# This could be used for testing purposes
|
||||
html_content = """
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Direct Print Test</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Direct Print Test Page</h1>
|
||||
<p>This page demonstrates the direct print functionality.</p>
|
||||
<button onclick="window.print()">Print this page</button>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
return html_content
|
||||
2
security/ir.model.access.csv
Normal file
2
security/ir.model.access.csv
Normal file
@ -0,0 +1,2 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_web_direct_print,web.direct.print,model_web_direct_print,base.group_user,1,1,1,1
|
||||
|
@ -140,8 +140,8 @@ if records:
|
||||
<!-- Package/Lot Tracking Direct Print -->
|
||||
<record id="action_direct_print_package_content" model="ir.actions.server">
|
||||
<field name="name">Direct Print Package Content</field>
|
||||
<field name="model_id" ref="stock.model_stock_quant_package"/>
|
||||
<field name="binding_model_id" ref="stock.model_stock_quant_package"/>
|
||||
<field name="model_id" ref="stock.model_stock_package"/>
|
||||
<field name="binding_model_id" ref="stock.model_stock_package"/>
|
||||
<field name="binding_view_types">list,form</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
@ -149,7 +149,7 @@ if records:
|
||||
action = {
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'direct_print',
|
||||
'report_name': 'stock.action_report_quant_package_barcode',
|
||||
'report_name': 'stock.action_report_package_barcode',
|
||||
'docids': records.ids,
|
||||
'context': env.context,
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user