kalenislims/lims/party.py

115 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
# This file is part of lims module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
import pytz
from datetime import datetime
from trytond.model import fields, Unique
from trytond.pool import PoolMeta
from trytond.pyson import Bool, Eval, Or
__all__ = ['Party', 'Address', 'Company']
class Party(metaclass=PoolMeta):
__name__ = 'party.party'
email_report = fields.Boolean('Email report')
single_sending_report = fields.Boolean('Single sending of report')
english_report = fields.Boolean('English report')
no_acknowledgment_of_receipt = fields.Boolean(
'No acknowledgment of receipt')
sample_producers = fields.One2Many('lims.sample.producer', 'party',
'Sample Producers')
is_lab_professional = fields.Boolean('Laboratory Professional')
lims_user = fields.Many2One('res.user', 'Lims User',
states={'required': Bool(Eval('is_lab_professional'))},
depends=['is_lab_professional'])
entry_zone = fields.Many2One('lims.zone', 'Entry Zone')
block_entry_confirmation = fields.Boolean('Block Entry Confirmation')
@classmethod
def __setup__(cls):
super(Party, cls).__setup__()
t = cls.__table__()
cls._sql_constraints += [
('lims_user_uniq', Unique(t, t.lims_user),
'lims.msg_party_lims_user_unique_id')]
@staticmethod
def default_email_report():
return False
@staticmethod
def default_single_sending_report():
return False
@staticmethod
def default_english_report():
return False
@staticmethod
def default_no_acknowledgment_of_receipt():
return False
class Address(metaclass=PoolMeta):
__name__ = 'party.address'
email = fields.Char('Email',
states={
'required': Or(
Bool(Eval('invoice_contact')),
Bool(Eval('report_contact')),
Bool(Eval('acknowledgment_contact'))),
},
depends=['report_contact', 'acknowledgment_contact',
'invoice_contact'])
report_contact = fields.Boolean('Report contact')
report_contact_default = fields.Boolean('Report contact by default',
states={'readonly': ~Bool(Eval('report_contact'))},
depends=['report_contact'])
acknowledgment_contact = fields.Boolean('Acknowledgment contact')
acknowledgment_contact_default = fields.Boolean(
'Acknowledgment contact by default',
states={'readonly': ~Bool(Eval('acknowledgment_contact'))},
depends=['acknowledgment_contact'])
invoice_contact = fields.Boolean('Invoice contact')
invoice_contact_default = fields.Boolean('Invoice contact by default',
states={'readonly': ~Bool(Eval('invoice_contact'))},
depends=['invoice_contact'])
@fields.depends('report_contact')
def on_change_report_contact(self):
if not self.report_contact:
self.report_contact_default = False
@fields.depends('acknowledgment_contact')
def on_change_acknowledgment_contact(self):
if not self.acknowledgment_contact:
self.acknowledgment_contact_default = False
@fields.depends('invoice_contact')
def on_change_invoice_contact(self):
if not self.invoice_contact:
self.invoice_contact_default = False
class Company(metaclass=PoolMeta):
__name__ = 'company.company'
logo = fields.Binary('Logo')
short_name = fields.Char('Short Name')
def get_timezone(self):
timezone = pytz.utc
if self.timezone:
timezone = pytz.timezone(self.timezone)
return timezone
def convert_timezone_datetime(self, datetime_):
timezone = self.get_timezone()
return datetime.astimezone(datetime_.replace(tzinfo=pytz.utc),
timezone)