module subscriptions

This commit is contained in:
sinergia 2022-08-06 10:10:14 -05:00
parent 9981598350
commit b7976c2b04
7 changed files with 298 additions and 11 deletions

View File

@ -1,3 +1,5 @@
# 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 collections import defaultdict
from trytond.pool import Pool
from trytond.model import (

View File

@ -137,3 +137,158 @@ msgstr "Resolución (d)"
msgctxt "field:product.template,analog_resolution:"
msgid "Analog resolution"
msgstr "Resolución Analoga"
msgctxt "field:sale.configuration,subscription_sequence:"
msgid "Subscription Sequence"
msgstr "Sequencia de contrato"
msgctxt "field:sale.configuration.sequence,subscription_sequence:"
msgid "Subscription Sequence"
msgstr "Solicitud de contrato"
msgctxt "field:sale.subscription.line,subscription:"
msgid "Subscription"
msgstr "Contrato"
msgctxt "field:sale.subscription.line,subscription_end_date:"
msgid "Subscription End Date"
msgstr "Fecha final del Contrato"
msgctxt "field:sale.subscription.line,subscription_start_date:"
msgid "Subscription Start Date"
msgstr "Fecha inicial del contrato"
msgctxt "field:sale.subscription.line,subscription_state:"
msgid "Subscription State"
msgstr "Estado Contrato"
msgctxt "field:sale.subscription.recurrence.rule.set.test,recurrence:"
msgid "Subscription Recurrence"
msgstr "Recurrencia del contrato"
msgctxt "help:sale.subscription,company:"
msgid "Make the subscription belong to the company."
msgstr "Hacer que el contrato pertenezca a la compañía."
msgctxt "help:sale.subscription,number:"
msgid "The main identification of the subscription."
msgstr "El identificador principal del contrato."
msgctxt "help:sale.subscription,state:"
msgid "The current state of the subscription."
msgstr "El estado actual del contrato."
msgctxt "help:sale.subscription.line,subscription:"
msgid "Add the line below the subscription."
msgstr "Añade lineas al contrato."
msgctxt "model:ir.action,name:act_create_invoice"
msgid "Create Subscription Invoices"
msgstr "Crear facturas de contrato"
msgctxt "model:ir.action,name:act_service_form"
msgid "Subscription Services"
msgstr "Servicios del contrato"
msgctxt "model:ir.action,name:act_subscription_form"
msgid "Subscriptions"
msgstr "Contratos"
msgctxt "model:ir.action,name:act_subscription_line_consumption_form"
msgid "Consumptions"
msgstr "Consumos"
msgctxt "model:ir.action,name:act_subscription_party_relate"
msgid "Subscriptions"
msgstr "Contratos"
msgctxt "model:ir.action,name:wizard_recurrence_test"
msgid "Test Recurrence Rule"
msgstr "Probar la recurrencia del contrato"
msgctxt "model:ir.sequence,name:sequence_subscription"
msgid "Subscription"
msgstr "Contrato"
msgctxt "model:ir.sequence.type,name:sequence_type_subscription"
msgid "Subscription"
msgstr "Contrato"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Subscription"
msgstr "Contrato"
msgctxt "model:ir.ui.menu,name:menu_create_invoice"
msgid "Create Subscription Invoices"
msgstr "Crear facturas de contrato"
msgctxt "model:ir.ui.menu,name:menu_recurrence_test"
msgid "Test Recurrence Rule"
msgstr "Probar la recurrencia del contrato"
msgctxt "model:ir.ui.menu,name:menu_service_form"
msgid "Subscription Services"
msgstr "Servicios del contrato"
msgctxt "model:ir.ui.menu,name:menu_subscription_form"
msgid "Subscriptions"
msgstr "Contratos"
msgctxt "model:sale.subscription,name:"
msgid "Subscription"
msgstr "Contrato"
msgctxt "model:sale.subscription.create_invoice.start,name:"
msgid "Create Subscription Invoice"
msgstr "Crear facturas de contrato"
msgctxt "model:sale.subscription.line,name:"
msgid "Subscription Line"
msgstr "Linea de contrato"
msgctxt "model:sale.subscription.line.consumption,name:"
msgid "Subscription Line Consumption"
msgstr "Consumo de linea de contrato"
msgctxt "model:sale.subscription.line.consumption.create.start,name:"
msgid "Create Subscription Line Consumption"
msgstr "Crear consumos de lineas de contrato"
msgctxt "model:sale.subscription.recurrence.rule,name:"
msgid "Subscription Recurrence Rule"
msgstr "Reglas de recurrencia del contrato"
msgctxt "model:sale.subscription.recurrence.rule.set,name:"
msgid "Subscription Recurrence Rule Set"
msgstr "Conjunto de reglas de recurrencia del contrato"
msgctxt "model:sale.subscription.recurrence.rule.set.test,name:"
msgid "Test Subscription Recurrence Rule Set"
msgstr "Probar el conjunto de reglas de recurrencia del contrato"
msgctxt "model:sale.subscription.service,name:"
msgid "Subscription Service"
msgstr "Servicios para contrato"
msgctxt "selection:ir.cron,method:"
msgid "Generate Subscription Invoices"
msgstr "Generar las facturas del contrato"
msgctxt "selection:ir.cron,method:"
msgid "Generate Subscription Line Consumptions"
msgstr "Generar consumos del contrato"
msgctxt "view:sale.subscription.create_invoice.start:"
msgid "Create Subscription Invoices for date"
msgstr "Crear las facturas de contrato hasta la fecha"
msgctxt "view:sale.subscription.line.consumption.create.start:"
msgid "Create Subscription Line Consumptions for date"
msgstr "Crear los consumos de contrato hasta la fecha"
msgctxt "view:sale.subscription:"
msgid "Subscription"
msgstr "Contrato"

View File

@ -1,8 +1,11 @@
# 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.model import (
Workflow, ModelSQL, ModelView, Unique, fields)
Workflow, ModelSQL, ModelView, Unique, fields, sequence_ordered)
from trytond.transaction import Transaction
from trytond.pyson import Eval, If
from trytond.pyson import Eval, If, Id
import math as mt
import numpy as np
class Maintenance(Workflow, ModelSQL, ModelView):
@ -30,7 +33,9 @@ class Maintenance(Workflow, ModelSQL, ModelView):
domain=[('party', '=', Eval('propietary'))]
)
equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
domain=[('state', '!=', 'draft')])
domain=[('state', '!=', 'draft'),
('propietary', '=', Eval('propietary'))]
)
#when the maintenance is in agended status
@ -146,7 +151,38 @@ class MaintenanceLine(ModelSQL, ModelView):
class Calibration(ModelSQL, ModelView):
'Calibration of Maintenance'
__name__ = 'optical_equipment.maintenance.calibration'
samples = fields.One2Many('optical_equipment.maintenance.calibration_sample', 'maintenance',
'Samples')
dev_std = fields.Function(
fields.Float("Standart Desviation"),'get_standard_deviation'
)
uncertain_type_A = fields.Function(
fields.Float("Uncertain Type A"), 'get_uncertain_A'
)
uncertain_pattern = fields.Function(
fields.Float("Uncertain Pattern"), 'get_uncertain_pattern'
)
k_c_calibration = fields.Function(
fields.Float("K Crt Calibration"), 'get_k_certificated_calibration'
)
uncertain_U_b1 = fields.Function(
fields.Float("U_b1"), 'get_uncertain_U_b1'
)
d_resolution = fields.Float("d_resolution")
uncertain_U_b2_dig = fields.Function(
fields.Float("U_b2"), 'get_uncertain_b2_digital'
)
uncertain_U_b2_ana = fields.Function(
fields.Float("U_b2"), 'get_uncertain_b2_analoga'
)
uncertain_combinated = fields.Function(
fields.Float("U_combinated"), 'get_uncertain_combinated'
)
uncertain_eff = fields.Function(
fields.Float("U eff"), 'get_uncertain_eff'
)
temperature_min = fields.Float("Temp Min")
temperature_max = fields.Float("Temp Max")
temperature_uom = fields.Many2One('product.uom', 'Temperature UOM',
@ -162,20 +198,96 @@ class Calibration(ModelSQL, ModelView):
depends=['moisture_min'])
average = fields.Float("Average")
#total_samples total de muestras
#average_pattern_equipment #Promedio de las muestras tomadas en el equipo suma(value_equipment)/total_samples
#Desviacion estandar muestral != desviación estandar poblacional
def get_standard_deviation(self):
"""
This function calculated the
standartd deviation
"""
sum_samples = sum(samples)
n_samples = len(samples)
mean = sum_samples / n_samples
dev_std_square = sum((l-mean)**2 for l in sample) / (n_samples -1)
dev_std = mt.sqrt(dev_std_square)
return dev_std
def get_uncertain_type_A(self):
"""
This function calculated the
uncertain type A
"""
n_samples = len(samples)
uncertain_type_A = dev_std /mt.sqrt(n_samples)
return uncertain_type_A
def get_uncertain_pattern(self):
"""
uncertain_pattern = 0,25 constante viene del equipo
"""
uncertain_pattern = 0.25
return uncertain_pattern
def get_k_certificated_calibration(self):
k_certificated_calibration = 2
return k_certicated_calibration
def get_uncertain_U_b1(self):
uncertain_b1 = MEP / mt.sqrt(3)
uncertain_b1a = uncertain_pattern / k_certificated_calibration
return uncertain_b1
def default_d_resolution(self):
return d
def get_uncertain_b2_digital(self):
uncertain_b2 = d/2*mt.sqrt(3)
return uncertain_b2
def get_uncertain_b2_analog(self):
#Incertidumbre por resolución Análoga
# a contante que viene del equipo
uncertain_b2_analog = d/a * math.sqrt(3)
return uncertain_b2_analog
def get_uncertain_combinated(self):
#Incertidumbre Combinada
sum_uncertain_c = uncertain_type_A**2 + uncertain_b1**2 + uncertain_b2**2
uncertain_c = math.sqrt(sum_uncertain_c)
return uncertain_c
def get_uncertain_eff(self):
#Grados Efectivos de libertad
uncertain_eff = uncertain_c**4/((uncertain_type_A**4)/(len(sample)-1)+(uncertain_b1**4/U_subi)+(uncertain_b2**4/U_subi))
return uncertain_eff
class CalibrationSample(sequence_ordered(), ModelView, ModelSQL):
'Samples of Calibration'
__name__ = 'optical_equipment.maintenance.calibration_sample'
maintenance = fields.Many2One('optical_equipment.maintenance', 'Maintenance',
ondelete='CASCADE')
)
number_sample = fields.Integer("Sample #")
value_pattern = fields.Integer("Value in Pattern")
value_equipment = fields.Float("Value in Equipment")
mistake = fields.Floatr("Mistake")
mistake = fields.Float("Mistake")
mistake_rate = fields.Float("% Mistake")
expanded_uncertainty = fields.Floats("Uncertainy Expanded")
expanded_uncertainty = fields.Float("Uncertainy Expanded")

View File

@ -113,5 +113,16 @@
<field name="type">form</field>
<field name="name">maintenance_line_form</field>
</record>
<record model="ir.ui.view" id="maintenance_calibration_view_form">
<field name="model">optical_equipment.maintenance.calibration</field>
<field name="type">form</field>
<field name="name">maintenance_sample_form</field>
</record>
<record model="ir.ui.view" id="maintenance_calibration_view_tree">
<field name="model">optical_equipment.maintenance.calibration</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">maintenance_calibration_tree</field>
</record>
</data>
</tryton>

View File

@ -1,5 +1,5 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#txhis repository contains the full copyright notices and license terms
#this repository contains the full copyright notices and license terms
from trytond.pool import Pool, PoolMeta
from trytond.model import (
ModelView, ModelSQL, fields, Exclude)

View File

@ -53,7 +53,8 @@ class SaleLine(metaclass=PoolMeta):
product_equipment = fields.Boolean("Product Equipment")
equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
domain=[('state', '=', 'registred')],
domain=[('state', '=', 'registred'),
('product','=', Eval('product'))],
states={'invisible': If(~Eval('product_equipment'), True)},)
address_equipment = fields.Many2One('party.address', "Direccion")
unit_digits = fields.Function(fields.Integer('Unit Digits'),

View File

@ -6,4 +6,10 @@
<field name="inherit" ref="sale_subscription.subscription_view_form"/>
<field name="name">subscription_form</field>
</record>
<record model="ir.ui.menu" id="sale_subscription.menu_line_consumption_create">
<field name="active" eval="False"/>
</record>
<record model="ir.ui.menu" id="sale_subscription.menu_create_invoice">
<field name="active" eval="False"/>
</record>
</tryton>