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 @@
+
+
+
diff --git a/view/contract_form.xml b/view/contract_form.xml
index a312d48..c4da53f 100644
--- a/view/contract_form.xml
+++ b/view/contract_form.xml
@@ -10,9 +10,6 @@ this repository contains the full copyright notices and license terms. -->
-
-
-
@@ -25,13 +22,12 @@ this repository contains the full copyright notices and license terms. -->
-
-
-
-
+
-
+
@@ -42,7 +38,9 @@ this repository contains the full copyright notices and license terms. -->
+
diff --git a/view/contract_list.xml b/view/contract_list.xml
index 955f8c3..2c90d3e 100644
--- a/view/contract_list.xml
+++ b/view/contract_list.xml
@@ -8,4 +8,5 @@
+
diff --git a/view/diary_form.xml b/view/diary_form.xml
new file mode 100644
index 0000000..9c8dcba
--- /dev/null
+++ b/view/diary_form.xml
@@ -0,0 +1,24 @@
+
+
+
diff --git a/view/diary_tree.xml b/view/diary_tree.xml
new file mode 100644
index 0000000..5688aff
--- /dev/null
+++ b/view/diary_tree.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/view/maintenance_activity_form.xml b/view/maintenance_activity_form.xml
new file mode 100644
index 0000000..bce3c34
--- /dev/null
+++ b/view/maintenance_activity_form.xml
@@ -0,0 +1,7 @@
+
+
+
diff --git a/view/maintenance_activity_tree.xml b/view/maintenance_activity_tree.xml
new file mode 100644
index 0000000..664c708
--- /dev/null
+++ b/view/maintenance_activity_tree.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/view/maintenance_calibration_tree.xml b/view/maintenance_calibration_tree.xml
index a7a134a..88d69de 100644
--- a/view/maintenance_calibration_tree.xml
+++ b/view/maintenance_calibration_tree.xml
@@ -2,4 +2,8 @@
+
+
+
+
diff --git a/view/maintenance_form.xml b/view/maintenance_form.xml
index b85116a..ceb1294 100644
--- a/view/maintenance_form.xml
+++ b/view/maintenance_form.xml
@@ -17,6 +17,7 @@
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
diff --git a/view/maintenance_service_form.xml b/view/maintenance_service_form.xml
index 0dc2416..73965ec 100644
--- a/view/maintenance_service_form.xml
+++ b/view/maintenance_service_form.xml
@@ -16,6 +16,8 @@
+
+
@@ -23,10 +25,10 @@
-
-
+
+
diff --git a/view/maintenance_tree.xml b/view/maintenance_tree.xml
index d812a77..6f5ee1a 100644
--- a/view/maintenance_tree.xml
+++ b/view/maintenance_tree.xml
@@ -4,6 +4,7 @@
+
diff --git a/view/optical_equipment_configuration_form.xml b/view/optical_equipment_configuration_form.xml
index 6039ac2..9422012 100644
--- a/view/optical_equipment_configuration_form.xml
+++ b/view/optical_equipment_configuration_form.xml
@@ -6,7 +6,11 @@ this repository contains the full copyright notices and license terms. -->
+
+
+
+
diff --git a/view/optical_equipment_form.xml b/view/optical_equipment_form.xml
index eafeba6..00fc480 100644
--- a/view/optical_equipment_form.xml
+++ b/view/optical_equipment_form.xml
@@ -52,8 +52,8 @@
-
-
+
+
diff --git a/view/reassing_agended_form.xml b/view/reassing_agended_form.xml
new file mode 100644
index 0000000..392c411
--- /dev/null
+++ b/view/reassing_agended_form.xml
@@ -0,0 +1,11 @@
+
+
+
diff --git a/view/sale_form.xml b/view/sale_form.xml
index a230ef6..b3d815c 100644
--- a/view/sale_form.xml
+++ b/view/sale_form.xml
@@ -8,5 +8,7 @@
+
+
diff --git a/view/template_form.xml b/view/template_form.xml
index 1c00813..e812a0d 100644
--- a/view/template_form.xml
+++ b/view/template_form.xml
@@ -58,6 +58,9 @@ this repository contains the full copyright notices and license terms. -->
+
+
+