mirror of
https://github.com/Kalenis/kalenislims.git
synced 2023-12-14 07:13:04 +01:00
148 lines
6 KiB
Python
148 lines
6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This file is part of lims_digital_sign module for Tryton.
|
|
# The COPYRIGHT file at the top level of this repository contains
|
|
# the full copyright notices and license terms.
|
|
import logging
|
|
from datetime import datetime
|
|
|
|
from trytond.model import ModelView, fields
|
|
from trytond.wizard import Wizard, StateView, StateTransition, Button
|
|
from trytond.pool import Pool
|
|
from trytond.transaction import Transaction
|
|
|
|
__all__ = ['DigitalSignStart', 'DigitalSignSucceed', 'DigitalSignFailed',
|
|
'DigitalSign']
|
|
|
|
|
|
class DigitalSignStart(ModelView):
|
|
"Digital Sign Start"
|
|
__name__ = 'lims_digital_sign.digital_sign.start'
|
|
|
|
|
|
class DigitalSignSucceed(ModelView):
|
|
"Digital Sign Succeed"
|
|
__name__ = 'lims_digital_sign.digital_sign.succeed'
|
|
|
|
|
|
class DigitalSignFailed(ModelView):
|
|
"Digital Sign Failed"
|
|
__name__ = 'lims_digital_sign.digital_sign.failed'
|
|
|
|
unsigned_reports = fields.One2Many('lims.results_report', None,
|
|
'Unsigned reports', readonly=True)
|
|
unsent_reports = fields.One2Many('lims.results_report', None,
|
|
'Unsent reports', readonly=True)
|
|
|
|
|
|
class DigitalSign(Wizard):
|
|
'Digital Sign'
|
|
__name__ = 'lims_digital_sign.digital_sign'
|
|
|
|
start = StateView('lims_digital_sign.digital_sign.start',
|
|
'lims_digital_sign.view_digital_sign_start', [
|
|
Button('Cancel', 'end', 'tryton-cancel'),
|
|
Button('Sign', 'sign', 'tryton-ok', default=True),
|
|
])
|
|
sign = StateTransition()
|
|
succeed = StateView('lims_digital_sign.digital_sign.succeed',
|
|
'lims_digital_sign.view_digital_sign_succeed', [
|
|
Button('Ok', 'end', 'tryton-ok', default=True),
|
|
])
|
|
failed = StateView('lims_digital_sign.digital_sign.failed',
|
|
'lims_digital_sign.view_digital_sign_failed', [
|
|
Button('Ok', 'end', 'tryton-ok', default=True),
|
|
])
|
|
|
|
def transition_sign(self):
|
|
'''
|
|
Digital Sign reports
|
|
'''
|
|
logger = logging.getLogger('lims_digital_sign')
|
|
logger.info('Wizard - Digital Sign:INIT')
|
|
ResultsReport = Pool().get('lims.results_report')
|
|
|
|
context = Transaction().context
|
|
model = context.get('active_model', None)
|
|
if model and model == 'ir.ui.menu':
|
|
# If it was executed from `menu item`, then get ids
|
|
# TODO: Include signed but not sent?
|
|
active_ids = [r.id for r in ResultsReport.search([
|
|
('signed', '=', False)])]
|
|
logger.info('Wizard - Digital Sign:Processing all Results '
|
|
'Reports')
|
|
else:
|
|
# If it was executed from `actions` or `cron`, then use context ids
|
|
active_ids = context['active_ids']
|
|
logger.info('Wizard - Digital Sign:Processing context Results '
|
|
'Reports')
|
|
|
|
unsigned_reports = []
|
|
unsent_reports = []
|
|
for active_id in active_ids:
|
|
results_report = ResultsReport(active_id)
|
|
logger.info('Wizard - Digital Sign:results_report.number:%s',
|
|
results_report.number)
|
|
if (results_report.single_sending_report and not
|
|
results_report.single_sending_report_ready):
|
|
logger.warn('Wizard - Digital Sign:results_report.number:%s:'
|
|
'IGNORED:REPORT NOT READY TO SINGLE SENDING',
|
|
results_report.number)
|
|
continue
|
|
spanish_report = results_report.has_report_cached(
|
|
english_report=False)
|
|
english_report = results_report.has_report_cached(
|
|
english_report=True)
|
|
if not spanish_report and not english_report:
|
|
logger.warn('Wizard - Digital Sign:results_report.number:%s:'
|
|
'IGNORED:NO HAS CACHED REPORTS', results_report.number)
|
|
continue
|
|
signed = True
|
|
if spanish_report:
|
|
signed = signed and results_report.build_report(
|
|
english_report=False)
|
|
if english_report:
|
|
signed = signed and results_report.build_report(
|
|
english_report=True)
|
|
if not signed:
|
|
unsigned_reports.append(results_report)
|
|
continue
|
|
else:
|
|
logger.info('Wizard - Digital Sign:results_report.number:'
|
|
'%s:Signed.', results_report.number)
|
|
if spanish_report:
|
|
results_report.attach_report(english_report=False)
|
|
if english_report:
|
|
results_report.attach_report(english_report=True)
|
|
logger.info('Wizard - Digital Sign:results_report.number:'
|
|
'%s:Attached.', results_report.number)
|
|
results_report.signed = True
|
|
results_report.signed_date = datetime.now()
|
|
results_report.save()
|
|
sent = results_report.mail_acknowledgment_of_results_report(
|
|
spanish_report=spanish_report,
|
|
english_report=english_report)
|
|
if not sent:
|
|
unsent_reports.append(results_report)
|
|
continue
|
|
else:
|
|
logger.info('Wizard - Digital Sign:results_report.number:'
|
|
'%s:Sent.', results_report.number)
|
|
results_report.sent = True
|
|
results_report.sent_date = datetime.now()
|
|
results_report.save()
|
|
|
|
if not unsigned_reports and not unsent_reports:
|
|
logger.info('Wizard - Digital Sign:SUCCEED')
|
|
return 'succeed'
|
|
else:
|
|
logger.info('Wizard - Digital Sign:FAILED')
|
|
self.failed.unsigned_reports = unsigned_reports
|
|
self.failed.unsent_reports = unsent_reports
|
|
return 'failed'
|
|
|
|
def default_failed(self, fields):
|
|
default = {
|
|
'unsigned_reports': [f.id for f in self.failed.unsigned_reports],
|
|
'unsent_reports': [f.id for f in self.failed.unsent_reports],
|
|
}
|
|
return default
|