diff --git a/equipment.py b/equipment.py
index 70b4e63..569f143 100644
--- a/equipment.py
+++ b/equipment.py
@@ -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 (
diff --git a/locale/es.po b/locale/es.po
index 66febb5..f3d4bb1 100644
--- a/locale/es.po
+++ b/locale/es.po
@@ -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"
diff --git a/maintenance.py b/maintenance.py
index fcf6c7c..2eb2bab 100644
--- a/maintenance.py
+++ b/maintenance.py
@@ -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")
diff --git a/maintenance.xml b/maintenance.xml
index 6559b38..7a47f93 100644
--- a/maintenance.xml
+++ b/maintenance.xml
@@ -113,5 +113,16 @@
form
maintenance_line_form
+
+ optical_equipment.maintenance.calibration
+ form
+ maintenance_sample_form
+
+
+ optical_equipment.maintenance.calibration
+ tree
+
+ maintenance_calibration_tree
+
diff --git a/product.py b/product.py
index 47edab2..6a81906 100644
--- a/product.py
+++ b/product.py
@@ -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)
diff --git a/sale.py b/sale.py
index 5d88e4b..76b714a 100644
--- a/sale.py
+++ b/sale.py
@@ -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'),
diff --git a/subscription.xml b/subscription.xml
index fe65454..5295e9b 100644
--- a/subscription.xml
+++ b/subscription.xml
@@ -6,4 +6,10 @@
subscription_form
+
+