mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
@@ -1,5 +1,5 @@
|
||||
# Do NOT update manually; changes here will be overwritten by Copier
|
||||
_commit: v1.14.2
|
||||
_commit: v1.15.0
|
||||
_src_path: https://github.com/OCA/oca-addons-repo-template.git
|
||||
ci: GitHub
|
||||
dependency_installation_mode: PIP
|
||||
@@ -11,6 +11,7 @@ github_enable_makepot: true
|
||||
github_enable_stale_action: true
|
||||
github_enforce_dev_status_compatibility: true
|
||||
include_wkhtmltopdf: false
|
||||
odoo_test_flavor: OCB
|
||||
odoo_version: 12.0
|
||||
org_name: Odoo Community Association (OCA)
|
||||
org_slug: OCA
|
||||
|
||||
2
.github/workflows/pre-commit.yml
vendored
2
.github/workflows/pre-commit.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
pre-commit:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: "3.6"
|
||||
|
||||
8
.github/workflows/test.yml
vendored
8
.github/workflows/test.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
name: Detect unreleased dependencies
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- run: |
|
||||
for reqfile in requirements.txt test-requirements.txt ; do
|
||||
if [ -f ${reqfile} ] ; then
|
||||
@@ -35,11 +35,9 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- container: ghcr.io/oca/oca-ci/py3.6-odoo12.0:latest
|
||||
makepot: "true"
|
||||
name: test with Odoo
|
||||
- container: ghcr.io/oca/oca-ci/py3.6-ocb12.0:latest
|
||||
name: test with OCB
|
||||
makepot: "true"
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:9.6
|
||||
@@ -50,7 +48,7 @@ jobs:
|
||||
ports:
|
||||
- 5432:5432
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install addons and dependencies
|
||||
|
||||
@@ -3,26 +3,24 @@
|
||||
|
||||
from odoo import api, models
|
||||
|
||||
|
||||
# Define all supported report_type
|
||||
REPORT_TYPES = ['qweb-pdf', 'qweb-text',
|
||||
'qweb-xml', 'csv',
|
||||
'excel', 'xlsx']
|
||||
REPORT_TYPES = ["qweb-pdf", "qweb-text", "qweb-xml", "csv", "excel", "xlsx"]
|
||||
|
||||
|
||||
class Report(models.Model):
|
||||
_inherit = 'ir.actions.report'
|
||||
_inherit = "ir.actions.report"
|
||||
|
||||
@api.noguess
|
||||
def report_action(self, docids, data=None, config=True):
|
||||
res = super(Report, self).report_action(docids, data=data,
|
||||
config=config)
|
||||
if res['context'].get('async_process', False):
|
||||
rpt_async_id = res['context']['active_id']
|
||||
report_async = self.env['report.async'].browse(rpt_async_id)
|
||||
if res['report_type'] in REPORT_TYPES:
|
||||
report_async.with_delay().run_report(
|
||||
res['context'].get('active_ids', []), data,
|
||||
self.id, self._uid)
|
||||
res = super(Report, self).report_action(docids, data=data, config=config)
|
||||
if res["context"].get("async_process", False):
|
||||
rpt_async_id = res["context"]["active_id"]
|
||||
report_async = self.env["report.async"].browse(rpt_async_id)
|
||||
if res["report_type"] in REPORT_TYPES:
|
||||
report_async.with_delay(
|
||||
eta=res["context"].get("eta", False)
|
||||
).run_report(
|
||||
res["context"].get("active_ids", []), data, self.id, self._uid
|
||||
)
|
||||
return {}
|
||||
return res
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
|
||||
|
||||
import base64
|
||||
from datetime import datetime, timedelta
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.tools.safe_eval import safe_eval
|
||||
from odoo.exceptions import UserError
|
||||
@@ -70,6 +71,8 @@ class ReportAsync(models.Model):
|
||||
help="List all files created by this report background process",
|
||||
)
|
||||
|
||||
schedule_time = fields.Char(string='Schedule time')
|
||||
|
||||
@api.multi
|
||||
def _compute_job(self):
|
||||
for rec in self:
|
||||
@@ -110,6 +113,8 @@ class ReportAsync(models.Model):
|
||||
result = action.read()[0]
|
||||
ctx = safe_eval(result.get('context', {}))
|
||||
ctx.update({'async_process': True})
|
||||
if self.schedule_time:
|
||||
ctx.update({'eta': self._get_next_schedule_time()})
|
||||
result['context'] = ctx
|
||||
return result
|
||||
|
||||
@@ -160,3 +165,11 @@ class ReportAsync(models.Model):
|
||||
template.send_mail(attachment.id,
|
||||
notif_layout='mail.mail_notification_light',
|
||||
force_send=False)
|
||||
|
||||
def _get_next_schedule_time(self):
|
||||
target_time = datetime.strptime(self.schedule_time, "%H:%M").time()
|
||||
now = fields.Datetime.now()
|
||||
target_datetime = datetime.combine(now.date(), target_time)
|
||||
if now.time() > target_time:
|
||||
target_datetime += timedelta(days=1)
|
||||
return target_datetime
|
||||
|
||||
@@ -73,6 +73,8 @@
|
||||
<field name="allow_async"/>
|
||||
<field name="email_notify"
|
||||
attrs="{'invisible': [('allow_async', '=', False)]}"/>
|
||||
<field name="schedule_time" placeholder="23:30"
|
||||
attrs="{'invisible': [('allow_async', '=', False)]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="job_status"
|
||||
|
||||
Reference in New Issue
Block a user