first commit
This commit is contained in:
43
modules/project_invoice/timesheet.py
Normal file
43
modules/project_invoice/timesheet.py
Normal file
@@ -0,0 +1,43 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import fields
|
||||
from trytond.model.exceptions import AccessError
|
||||
from trytond.pool import PoolMeta
|
||||
|
||||
|
||||
class Line(metaclass=PoolMeta):
|
||||
__name__ = 'timesheet.line'
|
||||
invoice_line = fields.Many2One('account.invoice.line', 'Invoice Line',
|
||||
readonly=True)
|
||||
|
||||
@classmethod
|
||||
def copy(cls, records, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('invoice_line', None)
|
||||
return super().copy(records, default=default)
|
||||
|
||||
@classmethod
|
||||
def check_modification(cls, mode, lines, values=None, external=False):
|
||||
super().check_modification(
|
||||
mode, lines, values=values, external=external)
|
||||
if mode == 'write':
|
||||
if (values.keys() & {'duration', 'work'}
|
||||
and any(l.invoice_line for l in lines)):
|
||||
line = next(l for l in lines if l.invoice_line)
|
||||
if 'duration' in values:
|
||||
msg = 'msg_invoiced_timesheet_line_modify_duration'
|
||||
else:
|
||||
msg = 'msg_invoiced_timesheet_line_modify_work'
|
||||
raise AccessError(gettext(
|
||||
f'project_invoice.{msg}',
|
||||
line=line.rec_name))
|
||||
elif mode == 'delete':
|
||||
if any(r.invoice_line for r in lines):
|
||||
line = next((l for l in lines if l.invoice_line))
|
||||
raise AccessError(gettext(
|
||||
'project_invoice.msg_invoiced_timesheet_line_delete',
|
||||
line=line.rec_name))
|
||||
Reference in New Issue
Block a user