From a1b4cc56168467de56a043254521f66f9dfc60dd Mon Sep 17 00:00:00 2001 From: sinergia Date: Tue, 4 Oct 2022 01:44:02 -0500 Subject: [PATCH] calibration --- __init__.py | 19 +- configuration_equipment.py | 5 +- diary.py | 6 +- diary.xml | 106 +++ equipment.py | 21 +- equipment.xml | 4 +- locale/es.po | 139 ---- locale/override/es.po | 5 - maintenance.py | 278 ++++++-- maintenance.xml | 74 +-- product.py | 10 +- product.xml | 10 + sale.py | 129 ++-- sale.xml | 2 + subscription.py | 624 ------------------ subscription.xml | 160 ----- tryton.cfg | 4 +- view/assing_agended_form.xml | 11 + view/contract_form.xml | 14 +- view/contract_list.xml | 1 + view/diary_form.xml | 24 + view/diary_tree.xml | 12 + view/maintenance_activity_form.xml | 7 + view/maintenance_activity_tree.xml | 6 + view/maintenance_calibration_tree.xml | 4 + view/maintenance_form.xml | 33 +- view/maintenance_service_form.xml | 6 +- view/maintenance_tree.xml | 1 + view/optical_equipment_configuration_form.xml | 4 + view/optical_equipment_form.xml | 4 +- view/reassing_agended_form.xml | 11 + view/sale_form.xml | 2 + view/template_form.xml | 3 + 33 files changed, 595 insertions(+), 1144 deletions(-) create mode 100644 diary.xml delete mode 100644 locale/override/es.po delete mode 100644 subscription.py delete mode 100644 subscription.xml create mode 100644 view/assing_agended_form.xml create mode 100644 view/diary_form.xml create mode 100644 view/diary_tree.xml create mode 100644 view/maintenance_activity_form.xml create mode 100644 view/maintenance_activity_tree.xml create mode 100644 view/reassing_agended_form.xml diff --git a/__init__.py b/__init__.py index 1492de5..cde547a 100644 --- a/__init__.py +++ b/__init__.py @@ -1,6 +1,6 @@ from trytond.pool import Pool from . import (address, diary, party, product, purchase, sale, - equipment, configuration_equipment, maintenance, move, subscription, exceptions) + equipment, configuration_equipment, contract, maintenance, move, exceptions) def register(): Pool.register( @@ -9,11 +9,14 @@ def register(): party.Party, product.Template, product.Product, + product.Pattern, purchase.Purchase, purchase.Line, equipment.OpticalEquipment, equipment.EquipmentMaintenance, configuration_equipment.Configuration, + maintenance.CreateContractInitial, + maintenance.CalibrationSample, maintenance.Maintenance, maintenance.MaintenanceService, maintenance.MaintenanceActivity, @@ -25,18 +28,12 @@ def register(): move.ShipmentOut, sale.Sale, sale.SaleLine, - subscription.Contract, - subscription.Subscription, - subscription.CreateInitialContract, - subscription.CreateNextProrogue, - subscription.ContractSupscription, - subscription.ContractEquipment, - subscription.SubscriptionEquipment, + contract.Contract, + contract.ContractEquipment, + contract.ContractMaintenanceServices, module='optical_equipment', type_='model') Pool.register( - subscription.CreateContract, - subscription.CreateProrogue, - subscription.CreateSubscriptionInvoice, maintenance.AssingAgended, maintenance.ReAssingAgended, + maintenance.CreateContract, module='optical_equipment', type_='wizard') diff --git a/configuration_equipment.py b/configuration_equipment.py index 71bbb13..faeaf33 100644 --- a/configuration_equipment.py +++ b/configuration_equipment.py @@ -6,10 +6,13 @@ class Configuration(ModelSingleton, ModelSQL, ModelView): 'Equipment Configuration' __name__='optical_equipment.configuration' + equipment_sequence = fields.Many2One('ir.sequence', "Equipment Sequence", domain=[('sequence_type', '=', Id('optical_equipment', 'sequence_type_equipment')) ]) maintenance_sequence = fields.Many2One('ir.sequence', "Maintenance Sequence", domain=[('sequence_type', '=', Id('optical_equipment', 'sequence_type_maintenances')) ]) - + agended_sequence = fields.Many2One('ir.sequence', "Agended Sequence", + domain=[('sequence_type', '=', Id('optical_equipment', 'sequence_type_agended')) + ]) diff --git a/diary.py b/diary.py index ec84354..d143ecd 100644 --- a/diary.py +++ b/diary.py @@ -5,13 +5,11 @@ class Diary(ModelSQL, ModelView): 'Diary' __name__ = 'optical_equipment_maintenance.diary' - code = fields.Char( - "Code", select=True,states={'readonly': True }) - + code = fields.Char("Code", select=True,states={'readonly': True }) date_expected = fields.DateTime("Expected Date") date_estimated = fields.DateTime("Estimated Date") date_end = fields.DateTime("Date End") - maintenance_service = fields.Many2One('optical_equipment.maintenance.service', 'Maintenance Service') + maintenance_service = fields.Many2One('optical_equipment_maintenance.service', 'Maintenance Service') technical = fields.Many2One('company.employee', "Technical") state = fields.Selection([('draft', "Draft"), diff --git a/diary.xml b/diary.xml new file mode 100644 index 0000000..347cafb --- /dev/null +++ b/diary.xml @@ -0,0 +1,106 @@ + + + + + + Agended Administration + + + + + + + Agended + optical_equipment_maintenance.diary + + + + optical_equipment_maintenance.diary + tree + diary_tree + + + optical_equipment_maintenance.diary + form + diary_form + + + Draft + + + + + + + Agended + + + + + + + In progress + + + + + + + Failed + + + + + + + Finished + + + + + + + All + + + + + + Agended + + + + + + + + + + + Agended + + + + + + diff --git a/equipment.py b/equipment.py index ac60e77..112a873 100644 --- a/equipment.py +++ b/equipment.py @@ -88,11 +88,10 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView): depends=_depends) health_register = fields.Char("Health Register", size=None, states=_states,) - - subscription_history = fields.Many2Many('sale.subscription-optical_equipment.equipment', - 'equipment','subscription', "Subscriptions", - states={'readonly': True} - ) + contract_history = fields.Many2Many('optical_equipment.contract-optical_equipment.equipment', 'equipment','Contracts', "Contracts", states={'readonly': True}) + #subscription_history = fields.Many2Many('sale.subscription-optical_equipment.equipment', + # 'equipment','subscription', "Subscriptions", + # states={'readonly': True}) contract_history = fields.Many2Many('optical_equipment.contract-optical_equipment.equipment', 'equipment', 'contract') @@ -160,6 +159,7 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView): return [Sale.__name__] + @classmethod def get_destination(cls): Model = Pool().get('ir.model') @@ -168,8 +168,6 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView): return [(None, '')] + [(m, get_name(m)) for m in models] - - @classmethod def __setup__(cls): @@ -296,7 +294,14 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView): class EquipmentMaintenance(ModelSQL, ModelView): 'Optical Equipment - Equipment - Maintenance' - __name__='optical_equipment.maintenance-optical_equipment.equipment' + __name__ ='optical_equipment.maintenance-optical_equipment.equipment' equipment = fields.Many2One('optical_equipment.equipment', 'Equipment', select=True) maintenance = fields.Many2One('optical_equipment.maintenance', 'Maintenances', select=True) + +class EquipmentContract(ModelSQL, ModelView): + 'Optical Equipment - Contracs Equipment' + __name__ = 'optical_equipment.contract-optical_equipment.equipment' + + equipment = fields.Many2One('optical_equipment.equipment', 'Equipment', select=True) + contract = fields.Many2One('optical_equipment.contract', 'Contract', select=True) diff --git a/equipment.xml b/equipment.xml index fb72fd5..4fd3549 100644 --- a/equipment.xml +++ b/equipment.xml @@ -100,7 +100,7 @@ @@ -130,7 +130,7 @@ =', If( + Bool(Eval('start_date')), + Eval('start_date', datetime.date.min), + datetime.date.min)), + ('end_date', '=', None), + ]) + + + @staticmethod + def default_company(): + return Transaction().context.get('company') + + @classmethod + def default_start_date(cls): + pool = Pool() + Date = pool.get('ir.date') + return Date.today() + + + @fields.depends('party') + def on_change_party(self): + pool = Pool() + Date = pool.get('ir.date') + if self.party: + self.invoice_address = self.party.address_get(type='invoice') + if self.party.client_type == "ips": + self.end_date = Date.today() + timedelta(days=365) + else: + self.end_date = Date.today() + timedelta(days=182) + + +class CreateContract(Wizard): + __name__ = 'optical_equipment.maintenance.contract' + + start = StateView('optical_equipment_create.contract', + 'optical_equipment.create_contract_view_form',[ + Button('Cancel', 'end', 'tryton-cancel'), + Button('Create', 'create_contract', 'tryton-ok', default=True), + ]) + create_contract = StateAction('optical_equipment.act_contract_form') + + + @property + def _subscription_start(self): + return dict( + party=self.start.party, + contact=self.start.contact, + start_date=self.start.start_date, + end_date=self.start.end_date, + invoice_address=self.start.invoice_address + ) + def _create_contract_base(self, dates, subscription): + pool = Pool() + ContractBase = pool.get('optical_equipment.contract') + + a = self._subscription_start + + contractBase = ContractBase( + state='draft', + party=a['party'], + invoice_address=a['invoice_address'], + start_date=a['start_date'], + end_date=a['end_date'], + contact=a['contact'], + equipments=a['equipments'] + ) + contractBase.save() + + def do_create_contract(self, action): + maintenance_service = self.records[0] + pool = Pool() + Contract = pool.get('optical_equipment.contract') + + dates = self._subscription_start + + prorogues = (maintenance_service,) + contract = Contract(party=dates['party'], + invoice_address=dates['invoice_address'], + contact=dates['contact'], + start_date=dates['start_date'], + end_date=dates['end_date'], + maintenance_services=prorogues + ) + contract.save() + + class MaintenanceActivity(ModelView, ModelSQL): 'Maintenance Activitys' __name__ = 'optical_equipment_maintenance.activity' @@ -246,7 +431,7 @@ class AgendedInitial(ModelView): 'Agended maintenance service' __name__ = 'optical_equipment_maintenance.agended' - maintenance_service = fields.Many2One('optical_equipment.maintenance.service',"Maintenaince Service", + maintenance_service = fields.Many2One('optical_equipment_maintenance.service',"Maintenaince Service", required=True, domain=[('state', '=', 'draft')]) estimated_agended = fields.DateTime("Date Maintenance", required=True) technical = fields.Many2One('company.employee', "Technical", required=True) @@ -263,11 +448,16 @@ class AssingAgended(Wizard): assing_agended = StateAction('optical_equipment.act_maintenance_service_form') + def do_assing_agended(self, action): pool = Pool() Diary = pool.get('optical_equipment_maintenance.diary') - MaintenanceService = pool.get('optical_equipment.maintenance.service') - diary = Diary(maintenance_service=self.start.maintenance_service, + Config = pool.get('optical_equipment.configuration') + config = Config(3) + + MaintenanceService = pool.get('optical_equipment_maintenance.service') + diary = Diary(code=config.agended_sequence.get(), + maintenance_service=self.start.maintenance_service, date_expected=self.start.estimated_agended, date_estimated=self.start.estimated_agended + timedelta(days=15), date_end=self.start.estimated_agended + timedelta(days=15), @@ -289,7 +479,7 @@ class ReAgended(ModelView): 'Agended maintenance service' __name__ = 'optical_equipment_maintenance.reagended' - maintenance_service = fields.Many2One('optical_equipment.maintenance.service',"Maintenaince Service", + maintenance_service = fields.Many2One('optical_equipment_maintenance.service',"Maintenaince Service", required=True, domain=[('state', '=', 'failed')]) estimated_agended = fields.DateTime("Date Maintenance", required=True) technical = fields.Many2One('company.employee', "Technical", required=True) @@ -329,9 +519,10 @@ class ReAssingAgended(Wizard): class ServiceMaintenanceAgended(ModelSQL): 'Service Maintenance - Agended' - __name__ = 'optical_equipment.maintenance.service-maintenance.diary' + __name__ = 'optical_equipment_maintenance.service-maintenance.diary' - maintenance_service = fields.Many2One('optical_equipment.maintenance.service', "Maintenance Service") + + maintenance_service = fields.Many2One('optical_equipment_maintenance.service', "Maintenance Service") agended = fields.Many2One('optical_equipment_maintenance.diary', "Agended") @@ -353,6 +544,8 @@ class Calibration(ModelSQL, ModelView): 'Calibration of Maintenance' __name__ = 'optical_equipment.maintenance.calibration' + maintenance = fields.Many2One('optical_equipment.maintenance', "Maintenance", ondelete="CASCADE", + select=True, required=True) samples = fields.One2Many('optical_equipment.maintenance.calibration_sample', 'maintenance', 'Samples') dev_std = fields.Function( @@ -384,20 +577,6 @@ class Calibration(ModelSQL, ModelView): 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', - domain=[('category', '=', Id('optical_equipment', "uom_cat_temperature"))], - states={'invisible' : If(Eval('temperature_min') == None, True)}, - depends=['itemperature_min']) - - moisture_min = fields.Float("Moisture Min") - moisture_max = fields.Float("Moisture Max") - moisture_uom = fields.Many2One('product.uom', "Moisture UOM", - domain=[('category', '=', Id('optical_equipment', 'uom_cat_relative_humedity'))], - states={'invisible' : If(Eval('moisture_min') == None, True)}, - depends=['moisture_min']) - average = fields.Float("Average") #total_samples total de muestras @@ -479,13 +658,28 @@ class Calibration(ModelSQL, ModelView): 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") + number_sample = fields.Float("Sample #") + value_patterns = fields.Many2One('optical_equipment.product_pattern', "Value Pattern", required=True, + ondelete='RESTRICT') + #value_pattern = fields.Float("Value in Pattern") + value_equipment = fields.Float("Value in Equipment", required=True, + states={'readonly': Eval('value_patterns') == None}) mistake = fields.Float("Mistake") - mistake_rate = fields.Float("% Mistake") - expanded_uncertainty = fields.Float("Uncertainy Expanded") + mistake_rate = fields.Float("% Mistake", states={'readonly': True}, + depends=['mistake']) + + @fields.depends('value_patterns', 'value_equipment', 'mistake', 'mistake_rate') + def on_change_value_equipment(self): + if float(self.value_patterns.pattern) < 0: + self.mistake = self.value_patterns.pattern - self.value_equipment + else: + if self.value_patterns.pattern > self.value_equipment: + self.mistake = self.value_patterns.pattern - self.value_equipment + else: + self.mistake = -self.value_patterns.pattern + self.value_equipment + + self.mistake_rate = abs(self.mistake / self.value_patterns.pattern) * 100 diff --git a/maintenance.xml b/maintenance.xml index e39013f..2350370 100644 --- a/maintenance.xml +++ b/maintenance.xml @@ -20,16 +20,16 @@ Services Maintenance - optical_equipment.maintenance.service + optical_equipment_maintenance.service - optical_equipment.maintenance.service + optical_equipment_maintenance.service tree maintenance_service_tree - optical_equipment.maintenance.service + optical_equipment_maintenance.service form maintenance_service_form @@ -68,33 +68,6 @@ - - Agended - - - - - - - In progress - - - - - - - Failed - - - - - Finished @@ -109,30 +82,27 @@ - - + draft Draft - + in_progress In progress - + finished Finished - + finished Finished - - Draft @@ -184,31 +154,30 @@ - optical_equipment.maintenance.line form maintenance_line_form - - optical_equipment.maintenance.calibration + + optical_equipment.maintenance.calibration_sample form maintenance_sample_form - optical_equipment.maintenance.calibration + optical_equipment.maintenance.calibration_sample tree maintenance_calibration_tree - optical_equipment.maintenance.service + optical_equipment_maintenance.service calendar maintenance_calendar Calendar - optical_equipment.maintenance.service + optical_equipment_maintenance.service @@ -240,6 +209,21 @@ ReAssing Agended optical_equipment_maintenance.reassing_agended + + optical_equipment_create.contract + form + create_contract_form + + + Create Contract + optical_equipment.maintenance.contract + optical_equipment_maintenance.service + + + form_action + optical_equipment_maintenance.service,-1 + + diff --git a/product.py b/product.py index d8f02ba..914cea9 100644 --- a/product.py +++ b/product.py @@ -161,7 +161,7 @@ class Template(metaclass=PoolMeta): help="Agregar valores separados por ',' Ej:-5,+5,-10,+10") k_pattern = fields.Char("K Pattern", help="Agregar valores separados por ',' Ej:-5,+5,-10,+10") - + k_pattern_list = fields.One2Many('optical_equipment.product_pattern', 'product', "List of patterns K") resolution_type = fields.Selection([('',""), ('analoga', "Analoga"), ('digital', "Digital")], "Resolution Type", @@ -327,3 +327,11 @@ class Template(metaclass=PoolMeta): class Product(metaclass=PoolMeta): __name__ = 'product.product' + +class Pattern(ModelSQL, ModelView): + "Pattern K of equipment" + __name__ = 'optical_equipment.product_pattern' + _rec_name = 'pattern' + + product = fields.Many2One('product.template', "Template", ondelete='CASCADE') + pattern = fields.Float("Value Pattern") diff --git a/product.xml b/product.xml index 58cf85c..224bd16 100644 --- a/product.xml +++ b/product.xml @@ -13,5 +13,15 @@ template_tree + + optical_equipment.product_pattern + form + pattern_form + + + optical_equipment.product_pattern + tree + pattern_tree + diff --git a/sale.py b/sale.py index b886ae4..1da3e40 100644 --- a/sale.py +++ b/sale.py @@ -14,15 +14,29 @@ from trytond.exceptions import UserError from trytond.wizard import ( Button, StateAction, StateTransition, StateView, Wizard) + class Sale(metaclass=PoolMeta): 'Sale' __name__ = 'sale.sale' - agended = fields.Boolean("Scheduling") sale_type = fields.Selection([('maintenance', 'Maintenance'), - ('equipments', 'Equipos'), - ('replaces', 'Replaces')], "Sale Type", required=True) + ('equipments', 'Equipments'), + ('replaces', 'Replaces')], "Sale Type", required=True, + states={'readonly': Eval('state') != 'draft'} + ) + contract_base = fields.Many2One('optical_equipment.contract', "Contract Base", + states={'invisible': (Eval('sale_type') != 'maintenance')}, + search_context={ + 'related_party': Eval('party'), + },) + + agended = fields.Boolean("Scheduling",states={ + 'invisible': (Eval('sale_type') != 'maintenance'), + 'readonly': True}) + def on_chage_sale_type(self): + self.lines= [] + @classmethod @ModelView.button @Workflow.transition('confirmed') @@ -36,21 +50,23 @@ class Sale(metaclass=PoolMeta): cls.store_cache(sales) config = Configuration(1) - MaintenanceService = pool.get('optical_equipment.maintenance.service') + MaintenanceService = pool.get('optical_equipment_maintenance.service') for sale in sales: - for line in sale.lines: - maintenanceService = MaintenanceService( - maintenance_type='preventive', - state_agended='no_agenda', - propietary=sale.party, - propietary_address=sale.shipment_address, - sale_origin=line, - sale_date=sale.sale_date, - state="draft" - ) - maintenanceService.save() - cls.agended = True - sale.save() + if sale.sale_type == 'maintenance': + for line in sale.lines: + maintenanceService = MaintenanceService( + maintenance_type='preventive', + state_agended='no_agenda', + propietary=sale.party, + propietary_address=sale.shipment_address, + #contract_origin=sale.contract_base, + sale_origin=line, + sale_date=sale.sale_date, + state="draft" + ) + maintenanceService.save() + cls.agended = True + sale.save() with transaction.set_context( queue_scheduled_at=config.sale_process_after, @@ -68,76 +84,42 @@ class SaleLine(metaclass=PoolMeta): ('product','=', Eval('product')) ], states={'invisible': If(~Eval('product_equipment'), True)},) - equipment_serial = fields.Char('Serial',states={'readonly': True, - 'invisible': If(~Eval('product_equipment'), True)}, - depends=['product_equipment']) - address_equipment = fields.Many2One('party.address', "Direccion") unit_digits = fields.Function(fields.Integer('Unit Digits'), 'on_change_with_unit_digits') - @classmethod def __setup__(cls): super(SaleLine, cls).__setup__() - cls.quantity.states['readonly'] = If(Eval('product_equipment') == True, True) - #raise UserError(str(Eval('_parent_sale', {}).get('sale_type'))) - if Eval('_parent_sale', {}).get('sale_type') == 'maintenance': - cls.product.domain + [('type', '=', 'service'), - ('maintenance_activity', '=', True)] - - @fields.depends('product_equipment','equipment') - def get_serial_equipment(self): - if self.product_equipment: - return self.equipment.serial - else: - return None - + cls.product.domain.append( + If(Eval('_parent_sale.sale_type') == 'maintenance', + [('type', '=', 'service'), + ('maintenance_activity', '=', True)], [])) + cls.quantity.states['readonly'] = Eval('_parent_sale.sale_type') == 'equipments' + def on_change_with_unit_digits(self, name=None): if self.unit: return self.unit.digits return 2 - - @fields.depends('equipment', 'sale', 'quantity', '_parent_sale.shipment_address', methods=['on_change_product']) - def on_change_equipment(self): - if self.equipment: - self.product = self.equipment.product.id - self.address_equipment = self.sale.shipment_address.id - self.equipment_serial = self.equipment.serial - self.quantity = 1 - self.on_change_product() - else: - self.address_equipment = None - self.product = None - self.unit= None - self.quantity = None - self.unit_price = None - self.amount = None - self.equipment_serial = None - self.on_change_product() - - @fields.depends('product_equipment', 'quantity', methods=['on_change_equipment']) - def on_change_product_equipment(self): - if self.product_equipment == False: - self.equipment = None - self.on_change_equipment() - else: - self.quantity = 1 - + @fields.depends('product', 'unit', 'quantity', 'sale', - '_parent_sale.party',methods=['_get_tax_rule_pattern', + '_parent_sale.party', '_parent_sale.sale_type', methods=['_get_tax_rule_pattern', '_get_context_sale_price','on_change_with_amount']) def on_change_product(self): Product = Pool().get('product.product') if not self.product: self.product_equipment = False self.unit = None + self.quantity = None return else: party = None + if self.sale.sale_type == 'equipments': + self.quantity = 1 + if self.sale and self.sale.party: self.product_equipment = False party = self.sale.party @@ -179,7 +161,6 @@ class SaleLine(metaclass=PoolMeta): self.product_equipment = True def get_move(self, shipment_type): - ''' Return moves for the sale line according to shipment_type ''' @@ -222,7 +203,7 @@ class SaleLine(metaclass=PoolMeta): move.to_location = self.to_location move.state = 'draft' move.company = self.sale.company - move.serial = self.equipment_serial + #move.serial = self.equipment_serial if move.on_change_with_unit_price_required(): move.unit_price = self.unit_price @@ -233,21 +214,3 @@ class SaleLine(metaclass=PoolMeta): move.origin = self return move - - @classmethod - @ModelView.button - def process(cls, sales): - states = {'confirmed', 'processing', 'done'} - sales = [s for s in sales if s.state in states] - cls.lock(sales) - cls._process_invoice(sales) - cls._process_shipment(sales) - cls._process_invoice_shipment_states(sales) - cls._process_state(sales) - - @classmethod - def view_attributes(cls): - return super(SaleLine, cls).view_attributes() + [ - ('//page[@id="equipment"]', 'states', { - 'invisible': ~Eval('product_equipment', True), - })] diff --git a/sale.xml b/sale.xml index 94b2427..ba60869 100644 --- a/sale.xml +++ b/sale.xml @@ -6,6 +6,7 @@ sale_form + - - - optical_equipment.contract - form - contract_form - - - optical_equipment.contract - tree - contract_list - - - Contracts - optical_equipment.contract - - - - - - - - - - - - - Draft - - - - - - - Quotation - - - - - - - Running - - - - - - Closed - - - - - - All - - - - - - sale.subscription - - subscription_form - - - - - - - - - Create_Invoices - sale.subscription.create_invoice - sale.subscription - - - form_action - sale.subscription,-1 - - - - Contract - sale.subscription - sale.subscription - report/contract.fodt - - - - form_print - sale.subscription,-1 - - - - optical_equipment_contract.initial - form - create_subscription_form - - - Initial Contract - sale.create.contract - - - optical_equipment_prorogue.next - form - create_prorogue_form - - - Prorogue to Contract - optical_equipment.prorogue - - - run - - - - Closed - - - - - - quotation - Quotation - Are you sure you want to quote these subscription? - - - - - - - - diff --git a/tryton.cfg b/tryton.cfg index ac0cf2b..5e76a38 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -14,7 +14,6 @@ depends: sale stock country - sale_subscription sale_history sale_advance_payment sale_amendment @@ -23,13 +22,14 @@ xml: party.xml product.xml equipment.xml + contract.xml configuration_equipment.xml sale.xml purchase.xml uom.xml move.xml - subscription.xml message.xml diary.xml maintenance.xml + \ No newline at end of file diff --git a/view/assing_agended_form.xml b/view/assing_agended_form.xml new file mode 100644 index 0000000..9f12900 --- /dev/null +++ b/view/assing_agended_form.xml @@ -0,0 +1,11 @@ + + +
+