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 collections import defaultdict
from trytond.pool import Pool from trytond.pool import Pool
from trytond.model import ( from trytond.model import (

View File

@ -137,3 +137,158 @@ msgstr "Resolución (d)"
msgctxt "field:product.template,analog_resolution:" msgctxt "field:product.template,analog_resolution:"
msgid "Analog resolution" msgid "Analog resolution"
msgstr "Resolución Analoga" 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 ( from trytond.model import (
Workflow, ModelSQL, ModelView, Unique, fields) Workflow, ModelSQL, ModelView, Unique, fields, sequence_ordered)
from trytond.transaction import Transaction 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): class Maintenance(Workflow, ModelSQL, ModelView):
@ -30,7 +33,9 @@ class Maintenance(Workflow, ModelSQL, ModelView):
domain=[('party', '=', Eval('propietary'))] domain=[('party', '=', Eval('propietary'))]
) )
equipment = fields.Many2One('optical_equipment.equipment', "Equipment", equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
domain=[('state', '!=', 'draft')]) domain=[('state', '!=', 'draft'),
('propietary', '=', Eval('propietary'))]
)
#when the maintenance is in agended status #when the maintenance is in agended status
@ -146,7 +151,38 @@ class MaintenanceLine(ModelSQL, ModelView):
class Calibration(ModelSQL, ModelView): class Calibration(ModelSQL, ModelView):
'Calibration of Maintenance' 'Calibration of Maintenance'
__name__ = 'optical_equipment.maintenance.calibration' __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_min = fields.Float("Temp Min")
temperature_max = fields.Float("Temp Max") temperature_max = fields.Float("Temp Max")
temperature_uom = fields.Many2One('product.uom', 'Temperature UOM', temperature_uom = fields.Many2One('product.uom', 'Temperature UOM',
@ -162,20 +198,96 @@ class Calibration(ModelSQL, ModelView):
depends=['moisture_min']) depends=['moisture_min'])
average = fields.Float("Average") 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): class CalibrationSample(sequence_ordered(), ModelView, ModelSQL):
'Samples of Calibration' 'Samples of Calibration'
__name__ = 'optical_equipment.maintenance.calibration_sample' __name__ = 'optical_equipment.maintenance.calibration_sample'
maintenance = fields.Many2One('optical_equipment.maintenance', 'Maintenance', maintenance = fields.Many2One('optical_equipment.maintenance', 'Maintenance',
ondelete='CASCADE') ondelete='CASCADE')
)
number_sample = fields.Integer("Sample #") number_sample = fields.Integer("Sample #")
value_pattern = fields.Integer("Value in Pattern") value_pattern = fields.Integer("Value in Pattern")
value_equipment = fields.Float("Value in Equipment") value_equipment = fields.Float("Value in Equipment")
mistake = fields.Floatr("Mistake") mistake = fields.Float("Mistake")
mistake_rate = 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="type">form</field>
<field name="name">maintenance_line_form</field> <field name="name">maintenance_line_form</field>
</record> </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> </data>
</tryton> </tryton>

View File

@ -1,5 +1,5 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of #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.pool import Pool, PoolMeta
from trytond.model import ( from trytond.model import (
ModelView, ModelSQL, fields, Exclude) ModelView, ModelSQL, fields, Exclude)

View File

@ -53,7 +53,8 @@ class SaleLine(metaclass=PoolMeta):
product_equipment = fields.Boolean("Product Equipment") product_equipment = fields.Boolean("Product Equipment")
equipment = fields.Many2One('optical_equipment.equipment', "Equipment", equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
domain=[('state', '=', 'registred')], domain=[('state', '=', 'registred'),
('product','=', Eval('product'))],
states={'invisible': If(~Eval('product_equipment'), True)},) states={'invisible': If(~Eval('product_equipment'), True)},)
address_equipment = fields.Many2One('party.address', "Direccion") address_equipment = fields.Many2One('party.address', "Direccion")
unit_digits = fields.Function(fields.Integer('Unit Digits'), 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="inherit" ref="sale_subscription.subscription_view_form"/>
<field name="name">subscription_form</field> <field name="name">subscription_form</field>
</record> </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> </tryton>