mirror of
https://github.com/Kalenis/kalenislims.git
synced 2023-12-14 07:13:04 +01:00
334 lines
11 KiB
Python
334 lines
11 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This file is part of the lims module for Tryton.
|
|
# The COPYRIGHT file at the top level of this repository contains
|
|
# the full copyright notices and license terms.
|
|
import datetime
|
|
from decimal import Decimal
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from proteus import Model
|
|
|
|
from trytond.modules.company.tests.tools import get_company
|
|
|
|
__all__ = ['set_lims_configuration', 'create_workyear', 'create_base_tables']
|
|
|
|
|
|
def set_lims_configuration(company=None, config=None):
|
|
"Set Lims Configuration"
|
|
if not company:
|
|
company = get_company()
|
|
|
|
# Create fraction product
|
|
ProductUom = Model.get('product.uom', config=config)
|
|
unit, = ProductUom.find([('name', '=', 'Unit')])
|
|
ProductTemplate = Model.get('product.template', config=config)
|
|
Product = Model.get('product.product', config=config)
|
|
fraction_product = Product()
|
|
fraction_template = ProductTemplate()
|
|
fraction_template.name = 'Fraction'
|
|
fraction_template.default_uom = unit
|
|
fraction_template.type = 'goods'
|
|
fraction_template.list_price = Decimal('1')
|
|
fraction_template.cost_price = Decimal('1')
|
|
fraction_template.save()
|
|
fraction_product.template = fraction_template
|
|
fraction_product.save()
|
|
|
|
# Create analysis product category
|
|
ProductCategory = Model.get('product.category', config=config)
|
|
analysis_product_category = ProductCategory()
|
|
analysis_product_category.name = 'Analysis Services'
|
|
analysis_product_category.save()
|
|
|
|
# Create default notebook view
|
|
default_notebook_view = _create_default_notebook_view(config)
|
|
|
|
# Create required sequences
|
|
Sequence = Model.get('ir.sequence', config=config)
|
|
planification_sequence = Sequence()
|
|
planification_sequence.name = 'Planification Sequence'
|
|
planification_sequence.code = 'lims.planification'
|
|
planification_sequence.company = company
|
|
planification_sequence.save()
|
|
|
|
# Set Lims configuration
|
|
LimsConfiguration = Model.get('lims.configuration', config=config)
|
|
lims_config, = LimsConfiguration.find()
|
|
lims_config.fraction_product = fraction_product
|
|
lims_config.analysis_product_category = analysis_product_category
|
|
lims_config.default_notebook_view = default_notebook_view
|
|
lims_config.planification_sequence = planification_sequence
|
|
lims_config.save()
|
|
|
|
|
|
def _create_default_notebook_view(config=None):
|
|
"Create default notebook view"
|
|
NotebookView = Model.get('lims.notebook.view', config=config)
|
|
NotebookViewColumn = Model.get('lims.notebook.view.column', config=config)
|
|
Field = Model.get('ir.model.field', config=config)
|
|
|
|
default_notebook_view = NotebookView()
|
|
default_notebook_view.name = 'Default View'
|
|
sequence = 1
|
|
for field_name in ('analysis', ):
|
|
column = NotebookViewColumn()
|
|
default_notebook_view.columns.append(column)
|
|
field, = Field.find([
|
|
('model.model', '=', 'lims.notebook.line'),
|
|
('name', '=', field_name),
|
|
])
|
|
column.field = field
|
|
column.sequence = sequence
|
|
sequence += 1
|
|
default_notebook_view.save()
|
|
return default_notebook_view
|
|
|
|
|
|
def create_workyear(company=None, today=None, config=None):
|
|
"Create Work Year"
|
|
if not company:
|
|
company = get_company()
|
|
if not today:
|
|
today = datetime.date.today()
|
|
|
|
# Create sequences
|
|
Sequence = Model.get('ir.sequence', config=config)
|
|
entry_sequence = Sequence()
|
|
entry_sequence.name = 'Entry Sequence'
|
|
entry_sequence.code = 'lims.entry'
|
|
entry_sequence.company = company
|
|
entry_sequence.save()
|
|
sample_sequence = Sequence()
|
|
sample_sequence.name = 'Sample Sequence'
|
|
sample_sequence.code = 'lims.sample'
|
|
sample_sequence.company = company
|
|
sample_sequence.save()
|
|
service_sequence = Sequence()
|
|
service_sequence.name = 'Service Sequence'
|
|
service_sequence.code = 'lims.service'
|
|
service_sequence.company = company
|
|
service_sequence.save()
|
|
results_report_sequence = Sequence()
|
|
results_report_sequence.name = 'Results Report Sequence'
|
|
results_report_sequence.code = 'lims.results_report'
|
|
results_report_sequence.company = company
|
|
results_report_sequence.save()
|
|
|
|
# Create Work Year
|
|
LabWorkYear = Model.get('lims.lab.workyear', config=config)
|
|
workyear = LabWorkYear()
|
|
workyear.code = str(today.year)
|
|
workyear.start_date = today + relativedelta(month=1, day=1)
|
|
workyear.end_date = today + relativedelta(month=12, day=31)
|
|
workyear.entry_sequence = entry_sequence
|
|
workyear.sample_sequence = sample_sequence
|
|
workyear.service_sequence = service_sequence
|
|
workyear.results_report_sequence = results_report_sequence
|
|
workyear.save()
|
|
|
|
# Set default entry control
|
|
default_entry_control = _create_default_entry_control(company, today,
|
|
config)
|
|
workyear.default_entry_control = default_entry_control
|
|
workyear.save()
|
|
|
|
|
|
def _create_default_entry_control(company=None, today=None, config=None):
|
|
"Create default entry control"
|
|
Entry = Model.get('lims.entry', config=config)
|
|
InvoiceContact = Model.get('lims.entry.invoice_contacts', config=config)
|
|
ReportContact = Model.get('lims.entry.report_contacts', config=config)
|
|
AcknowledgmentContact = Model.get('lims.entry.acknowledgment_contacts',
|
|
config=config)
|
|
|
|
default_entry_control = Entry()
|
|
default_entry_control.date = datetime.datetime.combine(today,
|
|
datetime.time.min)
|
|
default_entry_control.party = company.party
|
|
default_entry_control.invoice_party = company.party
|
|
|
|
# Set party contacts
|
|
contact = _create_company_contacts(company, config)
|
|
invoice_contact = InvoiceContact()
|
|
default_entry_control.invoice_contacts.append(invoice_contact)
|
|
invoice_contact.contact = contact
|
|
report_contact = ReportContact()
|
|
default_entry_control.report_contacts.append(report_contact)
|
|
report_contact.contact = contact
|
|
acknowledgment_contact = AcknowledgmentContact()
|
|
default_entry_control.acknowledgment_contacts.append(
|
|
acknowledgment_contact)
|
|
acknowledgment_contact.contact = contact
|
|
|
|
default_entry_control.no_acknowledgment_of_receipt = True
|
|
default_entry_control.state = 'draft'
|
|
default_entry_control.save()
|
|
|
|
# Confirm entry
|
|
default_entry_control.click('confirm')
|
|
return default_entry_control
|
|
|
|
|
|
def _create_company_contacts(company=None, config=None):
|
|
"Create contacts for company party"
|
|
if not company:
|
|
company = get_company()
|
|
|
|
Address = Model.get('party.address', config=config)
|
|
address, = Address.find([('party', '=', company.party.id)])
|
|
address.invoice_contact = True
|
|
address.report_contact = True
|
|
address.acknowledgment_contact = True
|
|
address.email = 'name@domain.com'
|
|
address.save()
|
|
return address
|
|
|
|
|
|
def create_base_tables(config=None):
|
|
"Create Base Tables"
|
|
|
|
# Configuration / Certification
|
|
|
|
# Configuration / Entry
|
|
_create_base_entry_tables(config)
|
|
|
|
# Configuration / Laboratory
|
|
_create_base_laboratory_tables(config)
|
|
|
|
# Configuration / Base Tables
|
|
_create_base_tables(config)
|
|
|
|
|
|
def _create_base_entry_tables(config=None):
|
|
"Configuration / Entry"
|
|
PackagingType = Model.get('lims.packaging.type', config=config)
|
|
PackagingIntegrity = Model.get('lims.packaging.integrity', config=config)
|
|
Zone = Model.get('lims.zone', config=config)
|
|
EntrySuspensionReason = Model.get('lims.entry.suspension.reason',
|
|
config=config)
|
|
|
|
packaging_type = PackagingType(
|
|
code='01',
|
|
description='Package')
|
|
packaging_type.save()
|
|
|
|
packaging_integrity = PackagingIntegrity(
|
|
code='OK',
|
|
description='Ok')
|
|
packaging_integrity.save()
|
|
|
|
zone = Zone(
|
|
code='N',
|
|
description='North')
|
|
zone.save()
|
|
|
|
suspension_reason = EntrySuspensionReason(
|
|
code='01',
|
|
description='Administration pending',
|
|
by_default=True)
|
|
suspension_reason.save()
|
|
|
|
|
|
def _create_base_laboratory_tables(config=None):
|
|
"Configuration / Laboratory"
|
|
LaboratoryProfessional = Model.get('lims.laboratory.professional',
|
|
config=config)
|
|
Laboratory = Model.get('lims.laboratory', config=config)
|
|
LabDeviceType = Model.get('lims.lab.device.type', config=config)
|
|
LabDevice = Model.get('lims.lab.device', config=config)
|
|
User = Model.get('res.user', config=config)
|
|
Party = Model.get('party.party', config=config)
|
|
Location = Model.get('stock.location', config=config)
|
|
|
|
lims_user = User(1)
|
|
party = Party(
|
|
name='Laboratory Professional',
|
|
is_lab_professional=True,
|
|
lims_user=lims_user)
|
|
party.save()
|
|
professional = LaboratoryProfessional(
|
|
party=party,
|
|
code='LP',
|
|
role='Responsible')
|
|
professional.save()
|
|
|
|
related_location, = Location.find([('code', '=', 'STO')])
|
|
laboratory = Laboratory(
|
|
code='SQ',
|
|
description='Chemistry Laboratory',
|
|
default_laboratory_professional=professional,
|
|
default_signer=professional,
|
|
related_location=related_location,
|
|
section='sq')
|
|
laboratory.save()
|
|
|
|
lims_user.laboratories.append(laboratory)
|
|
lims_user.save()
|
|
|
|
device_type = LabDeviceType(
|
|
code='PH',
|
|
description='pH Meters')
|
|
device_type.save()
|
|
|
|
device = LabDevice(
|
|
code='PH01',
|
|
description='pH Meter 01',
|
|
device_type=device_type)
|
|
device.laboratories.new(laboratory=laboratory)
|
|
device.save()
|
|
|
|
|
|
def _create_base_tables(config=None):
|
|
"Configuration / Base Tables"
|
|
ProductType = Model.get('lims.product.type', config=config)
|
|
Matrix = Model.get('lims.matrix', config=config)
|
|
LabMethod = Model.get('lims.lab.method', config=config)
|
|
Analysis = Model.get('lims.analysis', config=config)
|
|
Typification = Model.get('lims.typification', config=config)
|
|
Laboratory = Model.get('lims.laboratory', config=config)
|
|
LabDevice = Model.get('lims.lab.device', config=config)
|
|
FractionType = Model.get('lims.fraction.type', config=config)
|
|
|
|
product_type = ProductType(
|
|
code='WINE',
|
|
description='Wine')
|
|
product_type.save()
|
|
|
|
matrix = Matrix(
|
|
code='GRAPE',
|
|
description='Grape')
|
|
matrix.save()
|
|
|
|
method = LabMethod(
|
|
code='002',
|
|
name='SQ 002 : By potentiometry',
|
|
determination='DETERMINATION OF pH MEASUREMENT BY POTENTIOMETRY',
|
|
requalification_months=12,
|
|
results_estimated_waiting=10)
|
|
method.save()
|
|
|
|
laboratory, = Laboratory.find([('code', '=', 'SQ')])
|
|
device, = LabDevice.find([('code', '=', 'PH01')])
|
|
analysis = Analysis(
|
|
code='0002',
|
|
description='pH (at 20°C)',
|
|
type='analysis',
|
|
behavior='normal')
|
|
analysis.laboratories.new(laboratory=laboratory)
|
|
analysis.methods.append(method)
|
|
analysis.devices.new(laboratory=laboratory, device=device)
|
|
analysis.save()
|
|
analysis.click('activate')
|
|
|
|
typification = Typification(
|
|
product_type=product_type,
|
|
matrix=matrix,
|
|
analysis=analysis,
|
|
method=method)
|
|
typification.save()
|
|
|
|
fraction_type = FractionType(
|
|
code='MCL',
|
|
description='Customer')
|
|
fraction_type.save()
|