207 Commits
7.0 ... 6.6

Author SHA1 Message Date
Alejandro Ayala Usuga
c5647cc3f8 UPGRADE-6.6
Signed-off-by: Alejandro Ayala Usuga <sinergia@noreply.onecluster.org>
2022-11-21 18:50:28 -05:00
yo
24cadfc01b stringddd
Signed-off-by: yo <yo@yo>
2022-11-20 16:12:51 -05:00
2e0a0d725c update cv equipment 2022-11-18 15:21:25 -05:00
3463ddf1ca update cv equipment 2022-11-18 15:16:52 -05:00
b639aaee28 update cv equipment 2022-11-18 15:12:40 -05:00
749a52332a update certificated calibration 2022-11-18 14:42:34 -05:00
462ecdbb4f update certificated calibration 2022-11-18 14:35:54 -05:00
2ffcca013b update type measuring_range 2022-11-18 19:24:34 +00:00
c61b422cbc update certificated calibration 2022-11-18 13:58:37 -05:00
2b312d787d update optical_equipment 2022-11-18 13:51:06 -05:00
42965ff680 update optical_equipment 2022-11-18 13:50:53 -05:00
c32c506346 add attributes group to saleline 2022-11-15 12:48:30 -05:00
f88612dfa1 add attributes group to saleline 2022-11-15 12:48:22 -05:00
9c36d6663d add report maintenance timeline closed #94 2022-11-10 15:50:20 -05:00
0b33a1c2c3 corrections to sales 2022-11-10 13:38:33 -05:00
df4bca7485 corrections to sales 2022-11-10 13:37:15 -05:00
6929fec5ec enviromental conditions in calibration 2022-11-09 16:33:30 -05:00
1ac2816f39 update calibration 2022-11-09 13:11:53 -05:00
34e71ade15 update calibration 2022-11-09 11:30:42 -05:00
ebf7d7fc99 update calibratio 2022-11-09 09:57:48 -05:00
8f3c07a69d health register required in purchase 2022-11-09 09:19:59 -05:00
c0e3024e46 health register required in purchase 2022-11-09 09:14:25 -05:00
b1ff95cf27 correction paths of reports 2022-11-08 22:17:01 -05:00
446df7a69e correction paths of reports 2022-11-08 22:14:07 -05:00
4e026a1422 update graph 2022-11-08 21:27:53 -05:00
4d9e352611 update graph 2022-11-08 16:16:52 -05:00
8b93ae13e0 update graph 2022-11-08 16:15:01 -05:00
12f66e35bb update graph 2022-11-08 15:49:45 -05:00
3bdb22d3f6 update graph 2022-11-08 15:20:45 -05:00
2de04793cc add report prorrogation 2022-11-08 14:59:00 -05:00
b9c222c642 add report prorrogation 2022-11-08 14:58:51 -05:00
4dd0c83e5e add report 2022-11-08 08:37:13 -05:00
62309d5095 update maintenance 2022-11-03 16:14:55 -05:00
836ee474a6 modification to reports 2022-11-02 18:20:52 -05:00
e2ff22223c modification to reports 2022-11-02 18:16:13 -05:00
9355cb73d1 mistake 0 2022-11-02 09:28:24 -05:00
196a5a90cc mean in calibration total 2022-11-01 16:01:28 -05:00
f9be62649a update report calibration 2022-10-31 18:25:13 -05:00
8a6e334223 add reports 2022-10-31 12:14:04 -05:00
bd26902a9e clean home 2022-10-29 12:24:18 -05:00
bca233fa37 add graphs to calibration 2022-10-28 16:24:50 -05:00
b31e9f39f7 Merge branch '6.2' of https://gitea.onecluster.org/OneTeam/trytondo-optical_equipment into 6.2 2022-10-28 16:24:20 -05:00
92d92d4c50 add graphs to calibration 2022-10-28 16:21:40 -05:00
4f18a39a96 Change field contact sale 2022-10-27 15:28:42 -05:00
b64c897618 Reports sale and maintenance_service 2022-10-20 23:31:33 -05:00
587ff4094f cambios finales 2022-10-19 20:51:14 -05:00
16d5ee6df5 Traducciones Faltantes 2022-10-19 16:56:25 -05:00
d69e4b141a change to location of equipments 2022-10-18 10:40:09 -05:00
bcfb207a30 Correction to field date in ssing agended 2022-10-18 09:49:11 -05:00
6a9711a919 change name report 2022-10-14 16:33:57 +00:00
d1fc0872f0 add reports maintenance history 2022-10-14 11:32:00 -05:00
3ad449f466 changes finished 2022-10-14 16:29:33 +00:00
534f89486d changes finished 2022-10-14 16:27:31 +00:00
89cdad5101 resports finished 2022-10-13 11:51:45 -05:00
9f352bbd63 Merge branch '6.2' of https://gitea.onecluster.org/OneTeam/trytondo-optical_equipment into 6.2 2022-10-13 11:50:15 -05:00
bc8dc103ed resports finished 2022-10-13 11:48:41 -05:00
a6a400017a changes finished reports 2022-10-13 16:40:58 +00:00
c6486b2243 add reports 2022-10-12 17:40:41 -05:00
16dedba779 add reports 2022-10-12 17:40:08 -05:00
253500af41 add rec_names 2022-10-12 12:17:58 -05:00
ae62a07fe1 add report calibration 2022-10-11 18:19:20 -05:00
517cc3a58e Add the diopter field 2022-10-11 18:11:29 -05:00
13cc3b6e3e changes finished 2022-10-11 16:54:47 -05:00
9a9a0eecff add report calibration 2022-10-11 16:08:41 -05:00
917e820b37 add report calibration 2022-10-11 16:04:54 -05:00
ecde79d84d add report calibration 2022-10-11 14:21:06 -05:00
3535043b99 add formats and reports 2022-10-11 13:22:36 -05:00
9d8c526aeb add formats and reports 2022-10-11 13:22:26 -05:00
a442f1d098 changes finished 2022-10-10 18:50:13 -05:00
01f3e58c7e changes finished 2022-10-10 18:49:56 -05:00
a3ef82f4d1 add traslations 2022-10-10 09:59:35 -05:00
9493d39b9f changes finished 2022-10-06 21:19:48 -05:00
221c887cb6 changes finished 2022-10-06 00:26:24 -05:00
4767cc94c7 changes finished 2022-10-05 18:39:23 -05:00
e47594fb10 changes finished 2022-10-05 18:37:22 -05:00
739440efb9 correction to direction model calendar 2022-10-05 13:56:04 -05:00
41d44b4956 changes finished 2022-10-05 10:48:45 -05:00
927e6c060d calibration 2022-10-04 01:44:23 -05:00
a1b4cc5616 calibration 2022-10-04 01:44:02 -05:00
e630edb389 management maintenances services, maintenances, agended 2022-09-27 11:30:21 -05:00
87a843754d create model maintenance_service 2022-09-23 12:05:03 -05:00
9736b1baf3 create model maintenance_service 2022-09-23 11:03:47 -05:00
8cd2cf17bf correction to module contracts 2022-09-21 09:24:00 -05:00
86b6bef61d corrections to relations many2many 2022-09-20 11:00:02 -05:00
d1940a271d add class contract - equipment 2022-09-19 18:34:22 -05:00
20a0df5c50 corrections to module contracts 2022-09-19 07:59:01 -05:00
50dc5aa2b0 module contracts 2022-09-19 00:41:50 -05:00
4d09b42324 add traductions modules contracts 2022-09-18 01:23:12 -05:00
9b09080ae8 add wizard for contract management and creation of model contracts maangement 2022-09-16 14:50:05 -05:00
0c88126ae8 Create Traductions module subscriptions 2022-09-13 14:01:12 -05:00
206bad122b modification to report contract.fodt 2022-09-12 14:41:36 -05:00
7c7db3a3c0 add report contract 2022-09-12 13:21:08 -05:00
e9f288bfbd modifity to wizzard 'CreateSubscriptionInvoice' 2022-09-07 14:13:26 -05:00
6a3ce61e06 model of move 2022-09-02 13:24:59 -05:00
f1e0d9b274 update format cv Equipment 2022-08-23 10:47:43 -05:00
113de78608 changes pending 2022-08-19 11:44:18 -05:00
ef5154ed6f changes pending 2022-08-19 10:31:39 -05:00
785d8890f2 correction to format sheet out 2022-08-15 18:47:05 -05:00
55bef63e37 traslate pending 2022-08-15 14:31:38 -05:00
b19e096c94 traslate pending 2022-08-15 13:27:37 -05:00
61473998d2 only one quantity for sale 2022-08-15 00:10:20 -05:00
46ad43845f add format shipment equipments 2022-08-14 13:12:58 -05:00
9e73d4ec09 shipment equipments 2022-08-14 11:16:13 -05:00
c4151da4f2 changes in cv of equipment 2022-08-13 00:46:47 -05:00
f056418573 states in serial tree 2022-08-12 22:32:21 -05:00
c678e72f4a add traductions to module equipments 2022-08-12 17:35:20 -05:00
1d302cc485 Traducciones al módulo de equipos 2022-08-12 09:58:37 -05:00
7bf05f4857 changes to equipments 2022-08-10 23:16:03 -05:00
33f3cdc5ef template cv of equipment 2022-08-10 21:46:00 -05:00
a8ce002f4f correction errors 2022-08-10 18:08:58 -05:00
da07c0eee0 add report equipment to equipment 2022-08-10 16:57:46 -05:00
9bdee108ac add report equipment to equipment 2022-08-10 16:57:31 -05:00
054b78fd01 value for default 0 in fields of equipment 2022-08-10 09:38:54 -05:00
b7976c2b04 module subscriptions 2022-08-06 10:10:14 -05:00
9981598350 init model calibrations 2022-08-03 16:21:55 -05:00
5c857d8a9e changes de state and propietary of equipment 2022-08-03 13:14:15 -05:00
3c3e38e7fa fields change product in purchase 2022-08-02 21:28:03 -05:00
f7740e3827 fields empy when change product in purchase 2022-08-02 20:42:13 -05:00
b657f5cd4d correction to assigned serial 2022-08-02 19:37:32 -05:00
5566df2b5d relation maintenances to equipment 2022-08-02 00:37:47 -05:00
e234737535 add function for search of equipments 2022-07-30 19:05:41 -05:00
35a5d217ac entry of serial and button registred 2022-07-28 09:37:31 -05:00
af32d1c9fb view invisible in 'features' and 'calibration' 2022-07-26 21:23:12 -05:00
720710e094 change traslate 'enviromental conditions' 2022-07-26 19:33:04 -05:00
5d88267435 change required resolution 2022-07-26 19:29:55 -05:00
8fad2a7cf3 correction to module products 2022-07-26 19:21:12 -05:00
40204302f4 del states in serial for view tree edit serial 2022-07-26 16:17:48 -05:00
7e7ce08625 add file views add serials 2022-07-26 15:50:05 -05:00
f802a9c3e5 commits pendientes 2022-07-24 22:50:56 -05:00
6bca322af8 maintenance frequency in equipments 2022-07-23 13:33:17 -05:00
ebf2dd372e view asigned serials 2022-07-22 16:13:54 -05:00
569db4ba4b changes menores 2022-07-21 17:14:54 -05:00
35ea0a037c delete constraint serial unique 2022-07-21 12:56:33 -05:00
42218f5f06 delete sequence_serial in line_purchase 2022-07-21 12:52:09 -05:00
a0fbc157ff delete serial draft 2022-07-21 12:46:56 -05:00
c056bbc38a sequence draft serial, add multiple equipments 2022-07-21 02:47:05 -05:00
f08e0a0f83 traductions module products 2022-07-20 22:09:59 -05:00
40846ec28b traductions module products 2022-07-20 22:09:29 -05:00
8400110fdb button 'create equipment' invisible when purchase not has invoice 2022-07-19 12:54:30 -05:00
209a2083b3 correction to bugs and add complete behaviors 2022-07-18 23:19:17 -05:00
8e173c4758 activitys of maintenance 2022-07-18 13:36:20 -05:00
50f6249562 tabs in maintenance 2022-07-18 12:52:18 -05:00
610106befe add field maintenance type 2022-07-18 09:36:19 -05:00
11473f11ba add function _equipment_to_subscription to wizard create_subscription 2022-07-16 11:30:04 -05:00
41ec228407 wizard 'create equipments' 2022-07-14 21:09:07 -05:00
4d02d61639 registred class diary in __init__ 2022-07-14 11:35:48 -05:00
103b9d89ba create model diary 2022-07-14 11:32:43 -05:00
04d7041be7 delete view address_equipment 2022-07-14 11:20:58 -05:00
a5c58d104e add maintenance_lines 2022-07-13 13:00:11 -05:00
97a1f77fbc add atribute template of product 'replacement' and 'maintenance_activity' 2022-07-13 12:33:23 -05:00
6ee312bb2e correction to workflow on maintenance 2022-07-13 09:53:18 -05:00
e26d7e50d6 model 'maintenance' 2022-07-12 17:19:08 -05:00
5b652cb2ac init model 'Maintenance' 2022-07-12 12:28:49 -05:00
3d14ee5dc0 add lines to subcription 2022-07-12 11:54:19 -05:00
76513e61c1 address_equipment for default in line the sale 2022-07-12 09:02:37 -05:00
65770b97c7 add default_shipment_address 2022-07-11 16:18:53 -05:00
9aa5fad86b add field 'equipment' which contains the relation with 'optical_equipment.equipment' 2022-07-11 14:53:42 -05:00
9bb6f4066c add field 'equipment' which contains the relation with 'optical_equipment.equipment' 2022-07-11 14:46:21 -05:00
425c7e225a _do_create_subscription wizard 'create_subscription' 2022-07-09 00:13:59 -05:00
d453653bfc create view 'sale.create.subscription' 2022-07-08 07:11:24 -05:00
f14684b403 add view 2022-07-08 06:00:35 -05:00
a8ba3f056c initial model for wizard 'create_subscription' 2022-07-07 18:10:19 -05:00
a9f20c356f domain of values in template the equipment 2022-07-07 11:54:26 -05:00
db126e496e charge company for default in equipment 2022-07-07 11:04:56 -05:00
ffaed5fe49 sequence in equipments 2022-07-07 10:53:15 -05:00
0fe894d10f add workflow to equipments 2022-07-07 00:16:16 -05:00
8910886374 correction 2022-07-05 11:43:58 -05:00
8ec9c4c130 corrections 2022-07-05 10:36:21 -05:00
e00a5415ef change position field 'equipments create' 2022-07-04 16:31:10 -05:00
93a409daf6 change values in line of purchase if change product o not product 2022-07-04 16:24:40 -05:00
5e820d5670 model sequence equipments 2022-07-04 15:52:07 -05:00
6883d20a7d model sequence equipments 2022-07-04 15:51:08 -05:00
1a9b979e3b Add groups admin to menu 'menu_equipment' 2022-07-04 15:06:05 -05:00
2cc22349e2 add views to model 'optical_equipment.configuration' 2022-07-04 14:49:08 -05:00
609cf1e386 create model 'configuration_equipment' 2022-07-04 11:52:07 -05:00
47743f378e correct name variable 2022-07-04 11:39:40 -05:00
2f92c8f74b change name 'equipment_available' to 'equipment_create' 2022-07-04 11:37:57 -05:00
8cc60e6540 changes position 'useful_life' and 'warranty' 2022-07-04 11:33:32 -05:00
d0ab043193 values for default fields _uom 2022-07-04 11:20:40 -05:00
1e03f2e213 measurements default in product 2022-07-03 09:23:35 -05:00
553e3bf668 add value 'otro' type_client28 2022-07-03 08:33:14 -05:00
9756cea8c1 add value 'otro' type_client#28 2022-07-03 08:30:23 -05:00
0931aa7727 tab 'equipment' in sale invisible with product 2022-07-01 00:14:59 -05:00
0566d0d66f exclude categorys 'accounting' equal True 2022-06-30 22:58:30 -05:00
a99a70fd1d add message.xml to tryton.cfg 2022-06-30 22:13:16 -05:00
b432c75314 add constrain a serial unique 2022-06-30 17:46:13 -05:00
a9876fada4 views 2022-06-30 13:00:56 -05:00
f0f76ca652 add domains to fields 2022-06-30 12:32:41 -05:00
141cb90ead modification to template of products 2022-06-30 11:21:37 -05:00
98b33d8b8c tab 'equipment invisible in line of purchase when product is 'equipment' 2022-06-30 09:32:01 -05:00
b23e83eb25 add field address for default of the company to equipment in purchase 2022-06-30 08:26:53 -05:00
93f037923b tab 'equipment' in saleline invisible if product not is a equipment 2022-06-29 15:33:53 -05:00
5058a46c37 tab 'equipment' in purchase invisible if product not is a equipment 2022-06-29 14:33:11 -05:00
274a095b72 button 'create_equipments' invisible in case to 'equipments_availables = True' 2022-06-29 14:13:39 -05:00
887ec2eeaa add view 'create_equipments' and domain on the button 2022-06-29 13:27:23 -05:00
cf34d85596 add button 'create_equipment' 2022-06-29 12:07:11 -05:00
f49769990e field Subscription of 'optical_equipment.equipment' always readonly 2022-06-29 00:57:30 -05:00
7b5cdd61b0 delete model measurements and put in model product 2022-06-28 23:21:54 -05:00
5dce5130ce add measurement 'relative humedity' and domain 2022-06-28 12:34:42 -05:00
5d948b5427 add domain in measurements of equipments 2022-06-28 12:21:10 -05:00
ff34a02dd5 change in class 'Measurements' to 'Template' 2022-06-27 15:43:43 -05:00
87639119e4 add domain in measurements 2022-06-27 14:41:57 -05:00
b61bcce44b add fields 'campus' and 'party_related' 2022-06-27 12:30:12 -05:00
7e2648e114 add model address 2022-06-26 13:31:03 -05:00
5430dc54ee add model address 2022-06-26 13:30:05 -05:00
4818d84db1 change version tryton.cfg '6.2' 2022-06-26 12:18:37 -05:00
cceb3906ba create branch 6.2 add model 'party.address' 2022-06-26 10:56:07 -05:00
120 changed files with 8092 additions and 84106 deletions

5
.gitignore vendored
View File

@@ -28,6 +28,11 @@ share/python-wheels/
.installed.cfg
*.egg
MANIFEST
GPATH
GRTAGS
GTAGS
# PyInstaller
# Usually these files are written by a python script from a template

View File

View File

@@ -1,4 +1,4 @@
Copyright (C) 2023
Copyright (C) 2022 trytondo-smart-vision
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@@ -2,5 +2,4 @@ include CHANGELOG
include COPYRIGHT
include LICENSE
include README.rst
include icons/LICENSE
graft doc

View File

@@ -1,73 +1,44 @@
# 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.pool import Pool
from . import (agended, balance_sale_party, calibration, configuration,
contract, company, diary, equipment, party, product,
maintenance, move, purchase, sale)
__all__ = ['register']
from . import (address, diary, party, product, purchase, sale,
equipment, configuration_equipment, contract, maintenance, move, exceptions)
def register():
Pool.register(
company.Employee,
equipment.OpticalEquipment,
equipment.EquipmentParty,
contract.Contract,
contract.ContractMaintenanceServices,
equipment.EquipmentContract,
equipment.EquipmentMaintenance,
equipment.ChangePropietary,
equipment.ChangeEquipment,
agended.AgendedInitial,
agended.ReAgended,
agended.ServiceMaintenanceAgended,
calibration.Calibration,
calibration.CalibrationSample,
configuration.Configuration,
address.Address,
diary.Diary,
contract.Cron,
contract.ContractEquipment,
contract.CreateContractInitial,
party.Address,
party.Party,
product.Template,
product.Product,
product.Pattern,
product.UsePattern,
product.Image,
purchase.Purchase,
purchase.Line,
sale.Sale,
sale.SaleDate,
sale.SaleLine,
equipment.OpticalEquipment,
equipment.EquipmentMaintenance,
equipment.EquipmentParty,
equipment.ChangePropietary,
configuration_equipment.Configuration,
maintenance.Calibration,
maintenance.CreateContractInitial,
maintenance.CalibrationSample,
maintenance.Maintenance,
maintenance.MaintenanceService,
maintenance.MaintenanceServiceLine,
maintenance.MaintenanceLine,
maintenance.MaintenanceActivity,
maintenance.ChangePropietaryMaintenance,
maintenance.MaintenanceLine,
maintenance.AgendedInitial,
maintenance.ReAgended,
maintenance.ServiceMaintenanceAgended,
move.Move,
move.ShipmentOut,
move.ShipmentInternal,
move.ShipmentOutReturn,
balance_sale_party.BalanceSalePartyStart,
module='optical_equipment', type_='model'
)
sale.Sale,
sale.SaleLine,
contract.Contract,
contract.ContractEquipment,
contract.ContractMaintenanceServices,
module='optical_equipment', type_='model')
Pool.register(
agended.AssingAgended,
agended.ReAssingAgended,
contract.CreateContract,
maintenance.AssingAgended,
maintenance.ReAssingAgended,
maintenance.CreateContract,
equipment.NewPropietary,
maintenance.NewPropietaryMaintenance,
balance_sale_party.PrintBalanceSaleParty,
sale.ConfirmSaleDate,
module='optical_equipment', type_='wizard')
Pool.register(
calibration.CalibrationReport,
contract.ContractReport,
equipment.EquipmentReport,
maintenance.MaintenanceServiceReport,
move.PickingListDeliveryReport,
move.CapacitationReport,
balance_sale_party.BalanceSaleParty,
module='optical_equipment', type_='report')

11
address.py Normal file
View File

@@ -0,0 +1,11 @@
from trytond.pool import PoolMeta
from trytond.model import fields
from trytond.pyson import Eval, If
class Address(metaclass=PoolMeta):
__name__ = 'party.address'
campus = fields.Boolean("Campus")
party_related = fields.Many2One('party.party', "Party Related",
states ={ 'invisible': (~Eval("campus"))})

15
address.xml Normal file
View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<record model="ir.ui.view" id="address_view_tree">
<field name="model">party.address</field>
<field name="inherit" ref="party.address_view_tree"/>
<field name="name">address_tree</field>
</record>
<record model="ir.ui.view" id="address_view_form">
<field name="model">party.address</field>
<field name="inherit" ref="party.address_view_form"/>
<field name="name">address_form</field>
</record>
</tryton>

View File

@@ -1,144 +0,0 @@
# 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 ModelSQL, ModelView, fields
from trytond.wizard import Button, StateAction, StateView, Wizard
from trytond.pool import Pool
from datetime import timedelta
class AgendedInitial(ModelView):
'Agended maintenance service'
__name__ = 'optical_equipment_maintenance.agended'
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)
class AssingAgended(Wizard):
'Assing Agended'
__name__ = 'optical_equipment_maintenance.assing_agended'
start = StateView(
'optical_equipment_maintenance.agended',
'optical_equipment.assing_agended_view_form',
[
Button('Cancel', 'end', 'tryton-cancel'),
Button('Assing', 'assing_agended', 'tryton-ok', default=True),
],
)
assing_agended = StateAction(
'optical_equipment.act_maintenance_service_form')
def default_start(self, fields):
if len(self.records) > 0:
default = {'maintenance_service': self.records[0].id}
else:
default = {'maintenance_service': None}
return default
def do_assing_agended(self, action):
pool = Pool()
Diary = pool.get('optical_equipment_maintenance.diary')
Config = pool.get('optical_equipment.configuration')
config = Config(3)
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),
technical=self.start.technical.id,
state='agended',
)
diary.save()
maintenanceService = self.start.maintenance_service
maintenanceService.estimated_agended = self.start.estimated_agended
maintenanceService.technical = self.start.technical
maintenanceService.state_agended = 'agended'
maintenanceService.state = 'agended'
maintenanceService.current_agended = diary.id
maintenanceService.history_agended += (diary.id,)
maintenanceService.set_code(maintenanceService)
maintenanceService.save()
class ReAgended(ModelView):
'Agended maintenance service'
__name__ = 'optical_equipment_maintenance.reagended'
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)
class ReAssingAgended(Wizard):
'Assing Agended'
__name__ = 'optical_equipment_maintenance.reassing_agended'
start = StateView(
'optical_equipment_maintenance.reagended',
'optical_equipment.reassing_agended_view_form',
[
Button('Cancel', 'end', 'tryton-cancel'),
Button('Assing', 'assing_agended', 'tryton-ok', default=True),
],
)
assing_agended = StateAction(
'optical_equipment.act_maintenance_service_form')
def default_start(self, fields):
if len(self.records) > 0:
default = {'maintenance_service': self.records[0].id}
else:
default = {'maintenance_service': None}
return default
def do_assing_agended(self, action):
pool = Pool()
Diary = pool.get('optical_equipment_maintenance.diary')
diary = Diary(
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),
technical=self.start.technical.id,
state='agended',
)
diary.save()
maintenanceService = self.start.maintenance_service
maintenanceService.estimated_agended = self.start.estimated_agended
maintenanceService.technical = self.start.technical
maintenanceService.state_agended = 'agended'
maintenanceService.state = 'agended'
maintenanceService.history_agended += (diary.id,)
maintenanceService.save()
class ServiceMaintenanceAgended(ModelSQL):
'Service Maintenance - Agended'
__name__ = 'optical_equipment_maintenance.service-maintenance.diary'
maintenance_service = fields.Many2One(
'optical_equipment_maintenance.service', 'Maintenance Service'
)
agended = fields.Many2One('optical_equipment_maintenance.diary', 'Agended')

View File

@@ -1,33 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="assing_agended_view_form">
<field name="model">optical_equipment_maintenance.agended</field>
<field name="type">form</field>
<field name="name">assing_agended_form</field>
</record>
<record model="ir.action.wizard" id="act_assing_agended">
<field name="name">Assing Agended</field>
<field name="wiz_name">optical_equipment_maintenance.assing_agended</field>
</record>
<record model="ir.ui.view" id="reassing_agended_view_form">
<field name="model">optical_equipment_maintenance.reagended</field>
<field name="type">form</field>
<field name="name">reassing_agended_form</field>
</record>
<record model="ir.action.wizard" id="act_reassing_agended">
<field name="name">ReAssing Agended</field>
<field name="wiz_name">optical_equipment_maintenance.reassing_agended</field>
</record>
<menuitem parent="menu_diary"
action="act_assing_agended"
sequence="30"
id="menu_assing_agended_form"/>
<menuitem parent="menu_diary"
action="act_reassing_agended"
sequence="40"
id="menu_reassing_agended_form"/>
</data>
</tryton>

View File

@@ -1,163 +0,0 @@
# The COPYRIGHT file at the top level of this repository contains the full
# copyright notices and license terms.
from trytond.model import ModelView, fields
from trytond.wizard import Wizard, StateView, Button, StateReport
from trytond.report import Report
from trytond.pool import Pool
from trytond.transaction import Transaction
from trytond.pyson import Eval
from trytond.exceptions import UserError
__all__ = ['BalanceSalePartyStart',
'PrintBalanceSaleParty', 'BalanceSaleParty']
class BalanceSalePartyStart(ModelView):
'Balance Party Start'
__name__ = 'optical_equipment.print_balance_sale_party.start'
fiscalyear = fields.Many2One('account.fiscalyear', 'Fiscal Year',
required=True)
party = fields.Many2One('party.party', 'Party', required=True)
start_period = fields.Many2One(
'account.period',
'Start Period',
domain=[
('start_date', '<=', (Eval('end_period'), 'start_date')),
],
depends=['fiscalyear', 'end_period'],
)
end_period = fields.Many2One(
'account.period',
'End Period',
domain=[('start_date', '>=', (Eval('start_period'), 'start_date'))],
depends=['start_period'],
)
company = fields.Many2One('company.company', 'Company', required=True)
party_type = fields.Selection(
[('out', 'Customer')], 'Party Type', required=True)
@staticmethod
def default_company():
return Transaction().context.get('company')
@staticmethod
def default_party_type():
return 'out'
class PrintBalanceSaleParty(Wizard):
'Print Balance Sale Party'
__name__ = 'optical_equipment.print_balance_sale_party'
start = StateView(
'optical_equipment.print_balance_sale_party.start',
'optical_equipment.print_balance_sale_party_start_view_form',
[
Button('Cancel', 'end', 'tryton-cancel'),
Button('Print', 'print_', 'tryton-print', default=True),
],
)
print_ = StateReport('optical_equipment.balance_sale_party')
def default_start(self, fields):
if len(self.records) > 0:
default = {'party': self.records[0].party.id}
else:
default = {'party': None}
return default
def do_print_(self, action):
party = None
party_type = None
if self.start.party:
party = self.start.party.id
if self.start.party_type:
party_type = self.start.party_type
data = {
'company': self.start.company.id,
'party': party,
'party_type': party_type,
'start_period': (
self.start.start_period.id if self.start.start_period else None
),
'end_period':
self.start.end_period.id if self.start.end_period else None,
}
return action, data
def transition_print_(self):
return 'end'
class BalanceSaleParty(Report):
__name__ = 'optical_equipment.balance_sale_party'
@classmethod
def get_context(cls, records, header, data):
report_context = super(BalanceSaleParty, cls).get_context(
records, header, data)
pool = Pool()
Company = pool.get('company.company')
Period = pool.get('account.period')
Sale = pool.get('sale.sale')
Party = pool.get('party.party')
start_period = None
end_period = None
party = None
company = Company(data['company'])
dom_sale = [('state', 'in', ['processing', 'done'])]
if data.get('party'):
party = data['party']
dom_sale.append(('party', '=', party))
if data.get('start_period'):
start_period = Period(data['start_period'])
dom_sale.append(('sale_date', '>=', start_period.start_date))
if data.get('end_period'):
end_period = Period(data['end_period'])
dom_sale.append(('sale_date', '<=', end_period.start_date))
sales = Sale.search(
dom_sale,
order=[('sale_date', 'DESC'), ('id', 'DESC')],
)
res = {}
id_ = party
party_ = Party.search(['id', '=', party])[0]
name = party_.rec_name
try:
if party_.identifiers:
id_number = party_.identifiers[0].code
else:
id_number = ''
except IndexError:
pass
res[id_] = {'name': name, 'id_number': id_number, 'party': party_}
if (not sales):
err = 'Este Tercero no Cuenta Con Ventas en Proceso ó Confirmadas.'
raise UserError(str(err))
res[id_]['sales'] = sales
report_context['records'] = res.values()
report_context['start_period'] =\
start_period.name if start_period else '*'
report_context['end_period'] = end_period.name if end_period else '*'
report_context['company'] = company
residual_amount = 0
for sale in sales:
residual_amount += sale.residual_amount
report_context['residual_amount'] = residual_amount
return report_context

View File

@@ -1,28 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.action.report" id="report_balance_sale_party">
<field name="name">Balance by Party</field>
<field name="model"></field>
<field name="report_name">optical_equipment.balance_sale_party</field>
<field name="report">optical_equipment/report/balance_sale_party.fods</field>
<field name="template_extension">ods</field>
</record>
<record model="ir.ui.view" id="print_balance_sale_party_start_view_form">
<field name="model">optical_equipment.print_balance_sale_party.start</field>
<field name="type">form</field>
<field name="name">print_balance_sale_party_start_form</field>
</record>
<record model="ir.action.wizard" id="wizard_print_balance_sale_party">
<field name="name">Print Balance Sale by Party</field>
<field name="wiz_name">optical_equipment.print_balance_sale_party</field>
</record>
<menuitem
parent="sale.menu_reporting"
action="wizard_print_balance_sale_party"
id="menu_print_balance_sale_party"
icon="tryton-print"/>
</data>
</tryton>

View File

@@ -1,113 +0,0 @@
# 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 ModelSQL, ModelView, fields, sequence_ordered
from trytond.pyson import Eval, If
from trytond.pool import Pool
from trytond.modules.company import CompanyReport
from trytond.transaction import Transaction
_digits = (16, 2)
_states = {'readonly': If(Eval('state') != 'draft', True)}
class Calibration(ModelSQL, ModelView):
'Calibration of Maintenance'
__name__ = 'optical_equipment.maintenance.calibration'
_states = {'readonly': True}
maintenance = fields.Many2One(
'optical_equipment.maintenance',
'Maintenance',
ondelete='CASCADE',
required=True,
)
graph_dates = fields.Char('Graph Dates', readonly=True)
diopter = fields.Float('Diopter', states=_states)
mean = fields.Float('Mean', states=_states)
dev_std = fields.Float('Standart Desviation', states=_states)
uncertain_type_A = fields.Float('Uncertain Type A', states=_states)
uncertain_pattern = fields.Float('Uncertain Pattern', states=_states)
k_c_calibration = fields.Float('K Crt Calibration', states=_states)
uncertain_U_b1 = fields.Float('U_b1', states=_states)
d_resolution = fields.Float('d_resolution', states=_states)
uncertain_U_b2_dig = fields.Float('U_b2', states=_states)
uncertain_U_b2_ana = fields.Float('U_b2', states=_states)
uncertain_combinated = fields.Float('U_combinated', states=_states)
uncertain_eff = fields.Float('U eff', states=_states)
t_student = fields.Float('T Student', states=_states)
uncertain_expanded = fields.Float('Uexpand', _digits, states=_states)
state = fields.Char('State')
class CalibrationSample(sequence_ordered(), ModelView, ModelSQL):
'Samples of Calibration'
__name__ = 'optical_equipment.maintenance.calibration_sample'
maintenance = fields.Many2One(
'optical_equipment.maintenance', 'Maintenance')
product = fields.Function(fields.Integer(
'Product ID'), 'on_change_with_product')
number_sample = fields.Float('Sample #', _digits)
value_patterns = fields.Many2One(
'optical_equipment.product_pattern',
'Value Pattern',
ondelete='RESTRICT',
required=True,
domain=[('product', '=', Eval('product'))],
depends=['product'],
)
value_equipment = fields.Float(
'Value in Equipment',
_digits,
required=True,
states={'readonly': Eval('value_patterns') is None},
)
mistake = fields.Float('Mistake', _digits)
mistake_rate = fields.Float(
'% Mistake', _digits, states={'readonly': True}, depends=['mistake']
)
@fields.depends('maintenance', '_parent_maintenance.equipment')
def on_change_with_product(self, name=None):
if self.maintenance:
return self.maintenance.equipment.product.template.id
@fields.depends(
'value_patterns', 'value_equipment', 'mistake', 'mistake_rate')
def on_change_value_equipment(self):
if self.value_patterns:
pattern = self.value_patterns.pattern
if float(pattern) < 0:
self.mistake = pattern - self.value_equipment
else:
if pattern > self.value_equipment:
self.mistake = pattern - self.value_equipment
else:
self.mistake = -pattern + self.value_equipment
if pattern == self.value_equipment:
self.mistake_rate = 0
else:
self.mistake_rate = abs(
self.mistake / pattern) * 100
class CalibrationReport(CompanyReport):
__name__ = 'optical_equipment.maintenance'
@classmethod
def execute(cls, ids, data):
with Transaction().set_context(address_with_party=True):
return super(CalibrationReport, cls).execute(ids, data)
@classmethod
def get_context(cls, records, header, data):
pool = Pool()
Date = pool.get('ir.date')
context = super().get_context(records, header, data)
context['today'] = Date.today()
return context

View File

@@ -1,52 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="maintenance_calibration_view_form">
<field name="model">optical_equipment.maintenance.calibration_sample</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_sample</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">maintenance_calibration_tree</field>
</record>
<record model="ir.ui.view" id="calibration_total_view_tree">
<field name="model">optical_equipment.maintenance.calibration</field>
<field name="type">tree</field>
<field name="name">calibration_total_tree</field>
</record>
<record model="ir.ui.view" id="calibration_total_view_form">
<field name="model">optical_equipment.maintenance.calibration</field>
<field name="type">form</field>
<field name="name">calibration_total_form</field>
</record>
<record model="ir.action.report" id="report_calibration">
<field name="name">Calibration</field>
<field name="model">optical_equipment.maintenance</field>
<field name="report_name">optical_equipment.maintenance</field>
<field name="report">optical_equipment/report/Calibration.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_calibration_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment.maintenance,-1</field>
<field name="action" ref="report_calibration"/>
</record>
<record model="ir.action.report" id="report_calibrations">
<field name="name">Calibrations</field>
<field name="model">optical_equipment_maintenance.service</field>
<field name="report_name">optical_equipment_maintenance.service</field>
<field name="report">optical_equipment/report/Calibrations.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_calibrations_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment_maintenance.service,-1</field>
<field name="action" ref="report_calibrations"/>
</record>
</data>
</tryton>

View File

@@ -1,9 +0,0 @@
from trytond.pool import PoolMeta
from trytond.model import fields
class Employee(metaclass=PoolMeta):
'Company'
__name__ = 'company.employee'
invima = fields.Char('Invima')

View File

@@ -1,12 +0,0 @@
<?xml version="1.0"?>
<!--This file file is part of Tryton. The COPYRIGHT file at the top level
of this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="employee_view_form">
<field name="model">company.employee</field>
<field name="inherit" ref="company.employee_view_form"/>
<field name="name">employee_form</field>
</record>
</data>
</tryton>

View File

@@ -1,83 +0,0 @@
from trytond.model import ModelSingleton, ModelSQL, ModelView, fields
from trytond.pyson import Id, Eval
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"))
],
required=True
)
maintenance_sequence = fields.Many2One(
"ir.sequence",
"Maintenance Sequence",
domain=[
(
"sequence_type",
"=",
Id("optical_equipment", "sequence_type_maintenances"),
)
],
required=True
)
sale_quote_number = fields.Many2One(
"ir.sequence",
"Sale Quote Number",
domain=[("sequence_type", "=", Id("sale", "sequence_type_sale"))],
required=True
)
agended_sequence = fields.Many2One(
"ir.sequence",
"Agended Sequence",
domain=[
("sequence_type", "=", Id(
"optical_equipment", "sequence_type_agended"))
],
required=True
)
contract_sequence = fields.Many2One(
"ir.sequence",
"Contract Sequence",
domain=[
("sequence_type", "=", Id(
"optical_equipment", "sequence_type_contract"))
],
required=True
)
temperature_min = fields.Float("Temp Min", required=True)
temperature_max = fields.Float("Temp Max", required=True)
temperature_uom = fields.Many2One(
"product.uom",
"Temperature UOM", required=True,
domain=[("category", "=", Id(
"optical_equipment", "uom_cat_temperature"))],
depends={"temperature_min"},
)
moisture_min = fields.Float("Moisture Min", required=True)
moisture_max = fields.Float("Moisture Max", required=True)
moisture_uom = fields.Many2One(
"product.uom",
"Moisture UOM",
required=True,
domain=[
("category", "=", Id(
"optical_equipment", "uom_cat_relative_humedity"))
],
depends={"moisture_min"},
)
technician_responsible = fields.Many2One(
"company.employee", "Technician Responsible",
required=True
)
invima = fields.Char(
"Invima", states={"required": Eval("technician_responsible", True)}
)
technician_signature = fields.Binary("Technician Signature",
required=True)

View File

@@ -1,81 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.action.act_window" id="act_optical_equipment_configuration_form">
<field name="name">Configuration</field>
<field name="res_model">optical_equipment.configuration</field>
</record>
<record model="ir.ui.view" id="optical_equipment_configuration_view_form">
<field name="model">optical_equipment.configuration</field>
<field name="type">form</field>
<field name="name">configuration_form</field>
</record>
<record model="ir.action.act_window.view" id="act_optical_equipment_configuration_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="optical_equipment_configuration_view_form"/>
<field name="act_window" ref="act_optical_equipment_configuration_form"/>
</record>
<menuitem
name="Configuration"
parent="menu_equipment"
sequence="0"
id="menu_equipment_configuration"
icon="tryton-settings"/>
<menuitem
parent="menu_equipment_configuration"
action="act_optical_equipment_configuration_form"
sequence="10"
id="menu_optical_equipment_configuration"
icon="tryton-list"/>
<record model="res.group" id="group_maintenance_admin">
<field name="name">Maintenance Administration</field>
</record>
<record model="res.user-res.group"
id="user_admin_group_maintenance_admin">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_maintenance_admin"/>
</record>
<record model="ir.ui.menu-res.group"
id="menu_party_group_equipment_admin">
<field name="menu" ref="menu_equipment"/>
<field name="group" ref="group_equipment_admin"/>
</record>
<record model="ir.sequence.type" id="sequence_type_equipment">
<field name="name">Equipment</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_equipment_group_admin">
<field name="sequence_type" ref="sequence_type_equipment"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_equipment_group_equipment_admin">
<field name="sequence_type" ref="sequence_type_equipment"/>
<field name="group" ref="group_equipment_admin"/>
</record>
<record model="ir.sequence" id="sequence_equipment">
<field name="name">Equipment</field>
<field name="sequence_type" ref="sequence_type_equipment"/>
</record>
<record model="ir.sequence.type" id="sequence_type_maintenances">
<field name="name">Maintenances</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_maintenance_group_admin">
<field name="sequence_type" ref="sequence_type_maintenances"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_maintenance_group_maintenance_admin">
<field name="sequence_type" ref="sequence_type_maintenances"/>
<field name="group" ref="group_maintenance_admin"/>
</record>
<record model="ir.sequence" id="sequence_maintenances">
<field name="name">Maintenance</field>
<field name="sequence_type" ref="sequence_type_maintenances"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,20 @@
from trytond.model import (
ModelSingleton, ModelSQL, ModelView, fields)
from trytond.pyson import Id
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'))
])
contract_sequence = fields.Many2One('ir.sequence', "Contract Sequence",
domain=[('sequence_type', '=', Id('optical_equipment', 'sequence_type_contract'))
])

View File

@@ -0,0 +1,33 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="optical_equipment_configuration_view_form">
<field name="model">optical_equipment.configuration</field>
<field name="type">form</field>
<field name="name">optical_equipment_configuration_form</field>
</record>
<record model="ir.action.act_window" id="act_optical_equipment_configuration_form">
<field name="name">Configuration</field>
<field name="res_model">optical_equipment.configuration</field>
</record>
<record model="ir.action.act_window.view" id="act_optical_equipment_configuration_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="optical_equipment_configuration_view_form"/>
<field name="act_window" ref="act_optical_equipment_configuration_form"/>
</record>
<menuitem
name="Configuration"
parent="menu_equipment"
sequence="0"
id="menu_equipment_configuration"
icon="tryton-settings"/>
<menuitem
parent="menu_equipment_configuration"
action="act_optical_equipment_configuration_form"
sequence="10"
id="menu_optical_equipment_configuration"
icon="tryton-list"/>
</data>
</tryton>

View File

@@ -1,29 +1,18 @@
from trytond.pool import Pool, PoolMeta
from trytond.model import ModelSQL, ModelView, Workflow, fields
from trytond.modules.company import CompanyReport
from trytond.model import (
ModelSQL, ModelView, Workflow, fields)
from trytond.pyson import Eval, If, Bool
from trytond.modules.company.model import set_employee
from trytond.exceptions import UserError
from trytond.transaction import Transaction
from trytond.wizard import Button, StateAction, StateView, Wizard
from trytond.wizard import (
Button, StateAction, StateTransition, StateView, Wizard)
from trytond.modules.currency.fields import Monetary
from trytond.modules.product import price_digits
import datetime
from datetime import timedelta, date
from trytond.i18n import gettext
class Cron(metaclass=PoolMeta):
__name__ = 'ir.cron'
@classmethod
def __setup__(cls):
super().__setup__()
cls.method.selection.append((
'optical_equipment.contract|contract_expiration',
'Contract Expiration'
))
from datetime import timedelta
class Contract(Workflow, ModelSQL, ModelView):
@@ -32,113 +21,58 @@ class Contract(Workflow, ModelSQL, ModelView):
_rec_name = 'number'
_order_name = 'number'
company = fields.Many2One(
'company.company',
'Company',
required=True,
'company.company', "Company", required=True, select=True,
states={
'readonly': (Eval('state') != 'draft') | Eval('party', True),
},
help='Make the subscription belong to the company.',
)
},help="Make the subscription belong to the company.")
number = fields.Char(
'Number', readonly=True,
help='The main identification of the subscription.'
)
"Number", readonly=True, select=True,
help="The main identification of the subscription.")
reference = fields.Char(
'Reference',
help='The identification of an external origin.'
)
description = fields.Char(
'Description',
"Reference", select=True,
help="The identification of an external origin.")
description = fields.Char("Description",
states={
'readonly': Eval('state') != 'draft',
},
)
})
party = fields.Many2One(
'party.party',
'Party',
required=True,
'party.party', "Party", required=True,
states={
'readonly': (Eval('state') != 'draft') | Eval('party', True),
},
help='The party who subscribes.',
)
equipment = fields.Many2One('optical_equipment.equipment', 'Equipment')
contact = fields.Many2One(
'party.contact_mechanism', 'Contact', required=True)
invoice_address = fields.Many2One(
'party.address',
'Invoice Address',
required=True,
domain=[('party', '=', Eval('party'))],
states={
'readonly': (Eval('state') != 'draft') | Eval('party', True),
},
)
start_date = fields.Date(
'Start Date',
required=True,
)
end_date = fields.Date(
'End Date',
domain=[
'OR',
(
'end_date',
'>=',
If(
Bool(Eval('start_date')),
Eval('start_date', datetime.date.min),
datetime.date.min,
),
),
('end_date', '=', None),
],
states={
'readonly': Eval('state') != 'draft',
},
)
},help="The party who subscribes.")
contact = fields.Many2One('party.contact_mechanism', "Contact", required=True)
invoice_address = fields.Many2One('party.address', 'Invoice Address',
required=True, domain=[('party', '=', Eval('party'))],
states={
'readonly': (Eval('state') != 'draft') | Eval('party', True),
})
start_date = fields.Date("Start Date", required=True,)
end_date = fields.Date("End Date",
domain=['OR',
('end_date', '>=', If(
Bool(Eval('start_date')),
Eval('start_date', datetime.date.min),
datetime.date.min)),
('end_date', '=', None),
],
states={
'readonly': Eval('state') != 'draft',
})
maintenance_services = fields.Many2Many('optical_equipment_maintenance.service-equipment.contract',
'contract', 'maintenance_services', "Prorogues")
equipments = fields.One2Many('optical_equipment.equipment', 'contract', "Equipments")
price_contract = Monetary("Price Contract", digits=price_digits, currency='currency', required=True,
states={'readonly': Eval('state') != 'draft'})
state = fields.Selection([
('draft', "Draft"),
('running', "Running"),
('closed', "Closed"),
('cancelled', "Cancelled"),
], "State", readonly=True, required=False, sort=False,
help="The current state of the subscription.")
maintenance_services = fields.Many2Many(
'optical_equipment_maintenance.service-equipment.contract',
'contract',
'maintenance_services',
'Prorogues',
states={'readonly': Eval('state') != 'draft'},
)
current_equipments = fields.Many2Many(
'optical_equipment.contract-optical_equipment.equipment',
'contract',
'equipment',
'Current Equipments',
states={'readonly': Eval('state') != 'draft'},
)
history_equipments = fields.One2Many(
'optical_equipment.equipment',
'contract',
'Equipments',
states={'readonly': Eval('state') != 'draft'},
)
currency = fields.Many2One('currency.currency', 'Currency', required=True)
price_contract = Monetary(
'Price Contract',
digits=price_digits,
required=True,
states={'readonly': Eval('state') != 'draft'},
)
state = fields.Selection(
[('draft', 'Draft'),
('running', 'Running'),
('closed', 'Closed'),
('cancelled', 'Cancelled')],
'State',
readonly=True,
required=False,
sort=False,
help='The current state of the subscription.',
)
@classmethod
def __setup__(cls):
@@ -146,34 +80,17 @@ class Contract(Workflow, ModelSQL, ModelView):
cls._order = [
('number', 'DESC NULLS FIRST'),
('id', 'DESC'),
]
cls._transitions = {
]
cls._transitions = ({
('draft', 'running'),
('running', 'draft'),
('running', 'closed'),
('running', 'cancelled'),
('cancelled', 'draft'),
}
cls._buttons.update(
{
'draft': {
'invisible':
Eval('state').in_(['draft', 'closed'])
},
'running': {
'invisible':
Eval('state').in_(['cancelled', 'running'])
},
'closed': {
'invisible':
Eval('state').in_(['draft', 'cancelled'])
},
'cancelled': {
'invisible':
Eval('state').in_(['draft', 'cancelled'])
},
}
)
})
cls._buttons.update({
'running': {'invisible': Eval('state').in_(['cancelled', 'running'])},
'cancelled': {'invisible': Eval('state').in_(['draft', 'cancelled'])}
})
@staticmethod
def default_company():
@@ -189,7 +106,7 @@ class Contract(Workflow, ModelSQL, ModelView):
Config = pool.get('optical_equipment.configuration')
config = Config(4)
if config.contract_sequence is not None:
if config.contract_sequence != None:
if not contracts[0].number:
try:
contracts[0].number = config.contract_sequence.get()
@@ -197,258 +114,40 @@ class Contract(Workflow, ModelSQL, ModelView):
except UserError:
raise UserError(str('Validation Error'))
else:
raise UserError(
gettext('optical_equipment.msg_not_sequence_equipment'))
@classmethod
def contract_expiration(cls):
contracts_to_expire = cls.search(
[('state', '=', 'running'), ('end_date', '<=', date.today())]
)
if contracts_to_expire != []:
for contract in contracts_to_expire:
cls.closed([contract])
@classmethod
@ModelView.button
@Workflow.transition('draft')
def draft(cls, contracts):
contract = contracts[0]
for equipment in contract.current_equipments:
equipment.state = 'uncontrated'
equipment.contract_history += (contract.id,)
equipment.save()
contract.save()
@classmethod
@ModelView.button
@Workflow.transition('closed')
def closed(cls, contracts):
contract = contracts[0]
for equipment in contract.current_equipments:
equipment.state = 'uncontrated'
equipment.save()
raise UserError(gettext('optical_equipment.msg_not_sequence_equipment'))
@classmethod
@ModelView.button
@Workflow.transition('running')
def running(cls, contracts):
contract = contracts[0]
for equipment in contract.current_equipments:
equipment.state = 'contrated'
for equipment in contract.equipments:
equipment.state = "contrated"
equipment.contract_history += (contract.id,)
equipment.save()
cls.set_number(contracts)
contract.state = 'running'
contract.state='running'
contract.save()
@classmethod
@ModelView.button
@Workflow.transition('cancelled')
def cancelled(cls, contracts):
contract = contracts[0]
for equipment in contract.current_equipments:
equipment.state = 'uncontrated'
equipment.save()
pass
class ContractMaintenanceServices(ModelSQL):
'Contract - Maintenance Services'
__name__ = 'optical_equipment_maintenance.service-equipment.contract'
maintenance_services = fields.Many2One(
'optical_equipment_maintenance.service',
'Maintenance Service',
)
contract = fields.Many2One('optical_equipment.contract', 'Contract')
maintenance_services = fields.Many2One('optical_equipment_maintenance.service', "Maintenance Service", select=True)
contract = fields.Many2One('optical_equipment.contract', "Contract")
class ContractEquipment(ModelSQL):
'Optical Equipment - Contract'
__name__ = 'optical_equipment.contract-optical_equipment.equipment'
equipment = fields.Many2One(
'optical_equipment.equipment',
'Equipment',
)
contract = fields.Many2One(
'optical_equipment.contract',
'Contract',
)
class ContractReport(CompanyReport):
__name__ = 'optical_equipment.contract'
@classmethod
def execute(cls, ids, data):
with Transaction().set_context(address_with_party=True):
return super(ContractReport, cls).execute(ids, data)
@classmethod
def get_context(cls, records, header, data):
pool = Pool()
Date = pool.get('ir.date')
context = super().get_context(records, header, data)
context['today'] = Date.today()
return context
class CreateContractInitial(ModelView, ModelSQL):
'Create Contract Inicial'
__name__ = 'optical_equipment_create.contract'
currency = fields.Many2One('currency.currency', 'Currency', required=True)
company = fields.Many2One(
'company.company',
'Company',
readonly=True,
required=True,
help='Make the subscription belong to the company.',
)
party = fields.Many2One(
'party.party', 'Party', required=True, help='The party who subscribes.'
)
invoice_address = fields.Many2One(
'party.address',
'Invoice Address',
required=True,
domain=[('party', '=', Eval('party'))],
)
payment_term = fields.Many2One(
'account.invoice.payment_term', 'Payment Term')
contact = fields.Many2One(
'party.contact_mechanism',
'Contact',
required=True,
domain=[('party', '=', Eval('party'))],
context={
'company': Eval('company', -1),
},
)
start_date = fields.Date('Start Date', required=True)
end_date = fields.Date(
'End Date',
domain=[
'OR',
(
'end_date',
'>=',
If(
Bool(Eval('start_date')),
Eval('start_date', datetime.date.min),
datetime.date.min,
),
),
('end_date', '=', None),
],
)
unit_price = Monetary(
'Unit Price', digits=price_digits, currency='currency', required=True
)
@staticmethod
def default_company():
return Transaction().context.get('company')
@staticmethod
def default_currency():
Company = Pool().get('company.company')
if Transaction().context.get('company'):
company = Company(Transaction().context['company'])
return company.currency.id
@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.customer_type == 'ips':
self.end_date = Date.today() + timedelta(days=182)
else:
self.end_date = Date.today() + timedelta(days=365)
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')
def default_start(self, fields):
if self.record:
default = {
'party': self.record.propietary.id,
'invoice_address': self.record.propietary_address.id,
'unit_price': (
self.record.sale_origin.amount
if self.record.sale_origin.__name__ == 'sale.line'
else self.record.sale_origin.total_amount
),
}
return default
@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,
unit_price=self.start.unit_price,
)
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,)
equipments = []
for line in maintenance_service.lines:
equipments.append(line.equipment.id)
if maintenance_service.contract_origin:
contract = maintenance_service.contract_origin
contract.history_equipments += tuple(equipments)
contract.current_equipments = equipments
contract.invoice_address = dates['invoice_address']
contract.contact = dates['contact']
contract.start_date = dates['start_date']
contract.end_date = dates['end_date']
contract.maintenance_services += prorogues
contract.state = 'draft'
contract.price_contract = dates['unit_price']
else:
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,
current_equipments=equipments,
state='draft',
price_contract=dates['unit_price'],
)
contract.save()
equipment = fields.Many2One('optical_equipment.equipment', 'Equipment', select=True)
contract = fields.Many2One('optical_equipment.contract', 'Contract', select=True)

View File

@@ -1,171 +1,128 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<!--This file file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="contract_view_form">
<field name="model">optical_equipment.contract</field>
<field name="type">form</field>
<field name="name">contract_form</field>
</record>
<record model="ir.ui.view" id="contract_view_list">
<field name="model">optical_equipment.contract</field>
<field name="type">tree</field>
<field name="name">contract_list</field>
</record>
<record model="ir.action.act_window" id="act_contract_form">
<field name="name">Contracts</field>
<field name="res_model">optical_equipment.contract</field>
</record>
<record model="ir.action.act_window.view"
id="act_contract_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="contract_view_list"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.view"
id="act_contract_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="contract_view_form"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_contract_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
<field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
<field name="count" eval="True"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_contract_form_domain_running">
<field name="name">Running</field>
<field name="sequence" eval="30"/>
<field name="domain" eval="[('state', '=', 'running')]" pyson="1"/>
<field name="count" eval="True"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_contract_form_domain_closed">
<field name="name">Closed</field>
<field name="sequence" eval="40"/>
<field name="domain" eval="[('state', '=', 'closed')]" pyson="1"/>
<field name="count" eval="True"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_contract_form_domain_all">
<field name="name">All</field>
<field name="sequence" eval="9999"/>
<field name="domain"></field>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.model.button" id="draft_running_button">
<field name="name">draft</field>
<field name="string">Draft</field>
<field name="model" search="[('model', '=', 'optical_equipment.contract')]"/>
</record>
<record model="ir.model.button" id="contrac_running_button">
<field name="name">running</field>
<field name="string">Run</field>
<field name="model" search="[('model', '=', 'optical_equipment.contract')]"/>
</record>
<record model="ir.model.button" id="contract_closed_button">
<field name="name">closed</field>
<field name="string">Closed</field>
<field name="model" search="[('model', '=', 'optical_equipment.contract')]"/>
</record>
<record model="ir.model.button" id="contract_cancelled_button">
<field name="name">cancelled</field>
<field name="string">Cancel</field>
<field name="model" search="[('model', '=', 'optical_equipment.contract')]"/>
</record>
<record model="res.group" id="group_contract_admin">
<field name="name">Contract Administration</field>
</record>
<record model="res.user-res.group"
<record model="ir.ui.view" id="contract_view_form">
<field name="model">optical_equipment.contract</field>
<field name="type">form</field>
<field name="name">contract_form</field>
</record>
<record model="ir.ui.view" id="contract_view_list">
<field name="model">optical_equipment.contract</field>
<field name="type">tree</field>
<field name="name">contract_list</field>
</record>
<record model="ir.action.act_window" id="act_contract_form">
<field name="name">Contracts</field>
<field name="res_model">optical_equipment.contract</field>
</record>
<record model="ir.action.act_window.view"
id="act_contract_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="contract_view_list"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.view"
id="act_contract_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="contract_view_form"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_contract_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
<field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
<field name="count" eval="True"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_contract_form_domain_running">
<field name="name">Running</field>
<field name="sequence" eval="30"/>
<field name="domain" eval="[('state', '=', 'running')]" pyson="1"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_contract_form_domain_closed">
<field name="name">Closed</field>
<field name="sequence" eval="40"/>
<field name="domain" eval="[('state', '=', 'closed')]" pyson="1"/>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_contract_form_domain_all">
<field name="name">All</field>
<field name="sequence" eval="9999"/>
<field name="domain"></field>
<field name="act_window" ref="act_contract_form"/>
</record>
<record model="ir.model.button" id="contrac_running_button">
<field name="name">running</field>
<field name="string">Run</field>
<field name="model" search="[('model', '=', 'optical_equipment.contract')]"/>
</record>
<record model="ir.model.button" id="contract_cancelled_button">
<field name="name">cancelled</field>
<field name="string">Cancel</field>
<field name="model" search="[('model', '=', 'optical_equipment.contract')]"/>
</record>
<record model="res.group" id="group_contract_admin">
<field name="name">Contract Administration</field>
</record>
<record model="res.user-res.group"
id="user_admin_group_contract_admin">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_contract_admin"/>
</record>
<record model="ir.sequence.type" id="sequence_type_contract">
<field name="name">Contract</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_contract_group_admin">
<field name="sequence_type" ref="sequence_type_contract"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_contract_group_contract_admin">
<field name="sequence_type" ref="sequence_type_contract"/>
<field name="group" ref="group_contract_admin"/>
</record>
<record model="ir.sequence" id="sequence_contract">
<field name="name">Contract</field>
<field name="sequence_type" ref="sequence_type_contract"/>
</record>
<record model="ir.ui.view" id="create_contract_view_form">
<field name="model">optical_equipment_create.contract</field>
<field name="type">form</field>
<field name="name">create_contract_form</field>
</record>
<record model="ir.action.wizard" id="maintenance_create_contract">
<field name="name">Create Contract</field>
<field name="wiz_name">optical_equipment.maintenance.contract</field>
<field name="model">optical_equipment_maintenance.service</field>
</record>
<record model="ir.action.keyword" id="maintenance_create_contract_keyword">
<field name="keyword">form_action</field>
<field name="model">optical_equipment_maintenance.service,-1</field>
<field name="action" ref="maintenance_create_contract"/>
</record>
<record model="ir.action.report" id="report_contract">
<field name="name">Contract</field>
<field name="model">optical_equipment.contract</field>
<field name="report_name">optical_equipment.contract</field>
<field name="report">optical_equipment/report/Contract.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_contract_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment.contract,-1</field>
<field name="action" ref="report_contract"/>
</record>
<record model="ir.action.report" id="report_prorrogation">
<field name="name">Prorrogation</field>
<field name="model">optical_equipment.contract</field>
<field name="report_name">optical_equipment.contract</field>
<field name="report">optical_equipment/report/Prorrogation.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_prorrogation_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment.contract,-1</field>
<field name="action" ref="report_prorrogation"/>
</record>
<record model="ir.ui.icon" id="optical_equipment_contract_icon">
<field name="name">equipment_contract</field>
<field name="path">icons/file-contract-solid.svg</field>
</record>
<menuitem
parent="menu_equipment"
name="Contracts Management"
sequence="50"
id="menu_contracts"
icon="equipment_contract"/>
<menuitem
parent="menu_contracts"
action="act_contract_form"
sequence="30"
id="menu_contract_form"
icon="equipment_contract"/>
<record model="ir.cron" id="cron_fe_delivery">
<field name="method">optical_equipment.contract|contract_expiration</field>
<field name="interval_number" eval="1"/>
<field name="interval_type">hours</field>
</record>
</data>
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_contract_admin"/>
</record>
<record model="ir.sequence.type" id="sequence_type_contract">
<field name="name">Contract</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_contract_group_admin">
<field name="sequence_type" ref="sequence_type_contract"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_contract_group_contract_admin">
<field name="sequence_type" ref="sequence_type_contract"/>
<field name="group" ref="group_contract_admin"/>
</record>
<record model="ir.sequence" id="sequence_contract">
<field name="name">Contract</field>
<field name="sequence_type" ref="sequence_type_contract"/>
</record>
<record model="ir.action.report" id="report_contract">
<field name="name">Contract</field>
<field name="model">optical_equipment.contract</field>
<field name="report_name">optical_equipment.contract</field>
<field name="report">optical_equipment/report/Contract.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_contract_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment.contract,-1</field>
<field name="action" ref="report_contract"/>
</record>
<record model="ir.action.report" id="report_prorrogation">
<field name="name">Prorrogation</field>
<field name="model">optical_equipment.contract</field>
<field name="report_name">optical_equipment.contract</field>
<field name="report">optical_equipment/report/Prorrogation.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_prorrogation_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment.contract,-1</field>
<field name="action" ref="report_prorrogation"/>
</record>
<menuitem
parent="menu_equipment"
name="Contracts Management"
sequence="50"
id="menu_contracts"/>
<menuitem
parent="menu_contracts"
action="act_contract_form"
sequence="30"
id="menu_contract_form"/>
</tryton>

View File

@@ -1,27 +1,22 @@
from trytond.model import (
ModelSQL, ModelView, fields)
class Diary(ModelSQL, ModelView):
'Diary'
__name__ = 'optical_equipment_maintenance.diary'
_rec_name = 'code'
code = fields.Char("Code", states={'readonly': True})
code = fields.Char("Code", select=True,states={'readonly': True })
date_expected = fields.DateTime("Expected Date", required=True)
date_estimated = fields.DateTime("Estimated Date")
date_end = fields.DateTime("Date End")
maintenance_service = fields.Many2One(
'optical_equipment_maintenance.service', 'Maintenance Service',
required=True)
maintenance_service = fields.Many2One('optical_equipment_maintenance.service', 'Maintenance Service', required=True)
technical = fields.Many2One('company.employee', "Technical", required=True)
state = fields.Selection([('draft', "Draft"),
('agended', "Agended"),
('in_progress', "In Progress"),
('failed', "Failed"),
('finished', "Finished")
], "State",
required=True, readonly=True, sort=True)
], "State", required=True, readonly=True, sort=True)
@classmethod
def default_state(self):

View File

@@ -94,19 +94,13 @@
<field name="name">Agended</field>
<field name="sequence_type" ref="sequence_type_agended"/>
</record>
<record model="ir.ui.icon" id="optical_equipment_schedule_icon">
<field name="name">equipment_schedule</field>
<field name="path">icons/calendar-days-solid.svg</field>
</record>
<menuitem parent="menu_equipment"
name="Diary"
sequence="10"
id="menu_diary"
icon="equipment_schedule"/>
id="menu_diary"/>
<menuitem parent="menu_diary"
action="act_agended_list_form"
sequence="20"
id="menu_agended_list_form"
icon="equipment_schedule"/>
id="menu_agended_list_form"/>
</data>
</tryton>

View File

@@ -1,10 +1,9 @@
########################
Optical Equipment Module
########################
###################
Smart Vision Module
###################
.. toctree::
:maxdepth: 2
usage
design
releases

View File

@@ -1,7 +0,0 @@
.. _releases-index:
=============
Release notes
=============
.. include:: ../CHANGELOG

View File

@@ -1,20 +1,23 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime
from collections import defaultdict
from trytond.pool import Pool
from trytond.model import \
DeactivableMixin, Workflow, ModelSQL, ModelView, fields
from trytond.pyson import Eval
from trytond.transaction import Transaction
from trytond.model import (
DeactivableMixin, Workflow, ModelSQL, ModelView, Unique, fields)
from trytond.pyson import Eval, If
from trytond.transaction import Transaction
from trytond.i18n import gettext
from trytond.exceptions import UserError
from trytond.model.exceptions import AccessError
from trytond.wizard import Button, StateAction, StateView, Wizard
from trytond.modules.company import CompanyReport
from trytond.wizard import (
Button, StateAction, StateTransition, StateView, Wizard)
_MAINTENANCE_FREQUENCY = [
('none', ''), ('6', 'Seis Meses'), ('12', 'Doce Meses')]
_MAINTENANCE_FREQUENCY = [("none", ''),
("6", 'Seis Meses'),
("12", 'Doce Meses')]
class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
'Optical Equipment'
@@ -22,190 +25,100 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
_rec_name = 'rec_name'
_order_name = 'code'
_states = {
_states={
'readonly': Eval('state') != 'draft',
}
_states_product = {'readonly': Eval('product', True)}
_depends = ['state']
_states_serial = {
_states_serial={
'readonly': Eval('state') != 'draft',
}
code = fields.Char('Code', states={'readonly': True})
code = fields.Char(
"Code", select=True,states={'readonly': True })
state = fields.Selection(
[
('draft', 'Draft'),
('registred', 'Registred'),
('uncontrated', 'UnContrated'),
('contrated', 'Contrated'),
],
'State',
required=True,
readonly=True,
sort=False,
)
state = fields.Selection([('draft', "Draft"),
('registred', "Registred"),
('uncontrated', "UnContrated"),
('contrated', "Contrated")
], "State",
required=True, readonly=True, sort=False)
contract = fields.Many2One('optical_equipment.contract', "Contract", ondelete='CASCADE')
company = fields.Many2One('company.company', "Company", readonly=True)
location = fields.Many2One('stock.location', "Location",
states=_states,)
propietary = fields.Many2One('party.party',"Propietary", required=True,
states=_states,)
propietary_address = fields.Many2One('party.address', "Propietary Address", required=True,
domain=[('party', '=', Eval('propietary'))],
states=_states
)
propietarys = fields.Many2Many('optical_equipment.equipment-party.party', 'equipment', 'party', "Propietarys")
product = fields.Many2One('product.product', "Product",
domain=[('equipment', '=', True)],
states=_states,
depends=['equipment']
)
refurbish = fields.Boolean("Refurbish",
states=_states,)
equipment_type = fields.Char('type', states={'readonly': If('product', True)})
risk = fields.Char('Type risk',states={'readonly': If('product', True)})
use = fields.Char('Use', states={'readonly': If('product', True)})
biomedical_class = fields.Char('Biomedical Class', states={'readonly': If('product', True)})
main_tecnology = fields.Char('Main tecnology', states={'readonly': If('product', True)})
calibration = fields.Boolean("Apply calibration", states={'readonly': If('product', True)})
mark_category = fields.Many2One('product.category', 'Mark', required=True,
domain=[('parent', '=', None),
('accounting', '=', False)],
states=_states
)
model_category = fields.Many2One('product.category', "Model", required=True,
domain=[('parent', '=', Eval('mark_category')),
('accounting', '=', False)],
states=_states,)
reference_category = fields.Many2One('product.category', "Reference",
domain=[('parent', '=', Eval('model_category'))],
states=_states,
depends=['model_category']
)
origin_country = fields.Many2One('country.country',"Origin Country",
states=_states,)
company = fields.Many2One('company.company', 'Company', readonly=True)
contract = fields.Many2One(
'optical_equipment.contract', 'Contract', ondelete='CASCADE'
)
location = fields.Many2One(
'stock.location',
'Location',
states=_states,
)
propietary = fields.Many2One(
'party.party',
'Propietary',
required=True,
states=_states,
)
propietary_address = fields.Many2One(
'party.address',
'Propietary Address',
required=True,
domain=[('party', '=', Eval('propietary'))],
states=_states,
)
propietarys = fields.Many2Many(
'optical_equipment.equipment-party.party',
'equipment', 'party', 'Propietarys'
)
product = fields.Many2One(
'product.product',
'Product',
domain=[('equipment', '=', True)],
states=_states,
)
refurbish = fields.Boolean(
'Refurbish',
states=_states,
)
equipment_type = fields.Char('type', states=_states_product)
risk = fields.Char('Type risk', states=_states_product)
use = fields.Char('Use', states=_states_product)
biomedical_class = fields.Char('Biomedical Class', states=_states_product)
main_tecnology = fields.Char('Main tecnology', states=_states_product)
calibration = fields.Boolean('Apply calibration', states=_states_product)
mark_category = fields.Many2One(
'product.category',
'Mark',
required=True,
domain=[('parent', '=', None), ('accounting', '=', False)],
states=_states,
)
model_category = fields.Many2One(
'product.category',
'Model',
required=True,
domain=[('parent', '=', Eval('mark_category')),
('accounting', '=', False)],
states=_states,
)
reference_category = fields.Many2One(
'product.category',
'Reference',
domain=[('parent', '=', Eval('model_category'))],
states=_states,
depends=['model_category'],
)
origin_country = fields.Many2One(
'country.country',
'Origin Country',
states=_states,
)
software_version = fields.Char(
'Software version',
size=None,
states=_states,
)
useful_life = fields.Integer(
'Useful life',
states=_states,
)
warranty = fields.Integer(
'Warranty',
states=_states,
)
serial = fields.Char('Serial', size=None,
states=_states_serial, depends=_depends)
health_register = fields.Char(
'Health Register',
size=None,
states=_states,
)
# contract_history =
# fields.Many2Many('optical_equipment.contract-optical_equipment.equipment',
# 'equipment','contract', 'Contracts', states={'readonly': True})
contract_history = fields.Function(
fields.One2Many('optical_equipment.contract',
'equipment', 'Contracts'),
'get_contracts_of_equipment',
)
software_version = fields.Char("Software version", size=None,
states=_states,)
useful_life = fields.Integer("Useful life",
states=_states,)
warranty = fields.Integer("Warranty",
states=_states,)
serial = fields.Char("Serial", size=None,
states=_states_serial,
depends=_depends)
health_register = fields.Char("Health Register", size=None,
states=_states,)
contract_history = fields.Many2Many('optical_equipment.contract-optical_equipment.equipment', 'equipment','contract', "Contracts", states={'readonly': True})
maintenance_history = fields.Function(
fields.Many2Many(
'optical_equipment.maintenance-optical_equipment.equipment',
'equipment',
'maintenance',
'Maintenances',
),
'get_maintenances_of_equipment',
)
software_version = fields.Char(
'Software version',
size=None,
states=_states,
)
fields.Many2Many('optical_equipment.maintenance-optical_equipment.equipment',
'equipment', 'maintenance',"Maintenances"), 'get_maintenances_of_equipment')
software_version = fields.Char("Software version", size=None,
states=_states,)
maintenance_frequency = fields.Selection(
_MAINTENANCE_FREQUENCY, 'Maintenance Frequency',
depends=['propietary']
)
purchase_origin = fields.Reference(
'Purchase Origin',
selection='get_origin', states={'readonly': True}
)
sale_destination = fields.Reference(
'Sale Destination',
selection='get_destination', states={'readonly': True}
)
shipment_destination = fields.Reference(
'Stock Move', selection='get_shipment', states={'readonly': True}
)
rec_name = fields.Function(fields.Char('rec_name'), 'get_rec_name')
technician_responsible = fields.Function(
fields.Char('Technician Responsible'), 'get_technical'
)
invima = fields.Function(fields.Char('Invima'), 'get_invima')
maintenance_frequency = fields.Selection(_MAINTENANCE_FREQUENCY, "Maintenance Frequency",
depends=['propietary'])
purchase_origin = fields.Reference("Purchase Origin", selection='get_origin',select=True,
states={'readonly': True})
sale_destination = fields.Reference("Sale Destination", selection='get_destination',select=True,
states={'readonly': True})
shipment_destination = fields.Reference("Stock Move", selection='get_shipment', select=True,
states={'readonly': True})
rec_name = fields.Function(fields.Char("rec_name"), 'get_rec_name')
del _states_serial, _states, _depends
def get_technical(self, name):
pool = Pool()
ConfigurationEquipment = pool.get('optical_equipment.configuration')
config = ConfigurationEquipment(1)
if config.technician_responsible:
technician_responsible = config.technician_responsible
return technician_responsible.party.name
def get_invima(self, name):
pool = Pool()
ConfigurationEquipment = pool.get('optical_equipment.configuration')
config = ConfigurationEquipment(1)
if config.technician_responsible.invima:
return config.technician_responsible.invima
@fields.depends('product', 'serial', 'code')
def get_rec_name(self, name):
name = str(self.product.name) + '@' + \
str(self.serial) + '/' + str(self.code)
name = str(self.product.name) + '@' + str(self.serial) + '/' + str(self.code)
return name
@@ -218,7 +131,7 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
'stock.shipment.out.return',
'stock.shipment.in.return',
'stock.shipment.internal',
]
]
@classmethod
def get_shipment(cls):
@@ -252,6 +165,7 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
return [Sale.__name__]
@classmethod
def get_destination(cls):
Model = Pool().get('ir.model')
@@ -260,24 +174,20 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
return [(None, '')] + [(m, get_name(m)) for m in models]
@classmethod
def __setup__(cls):
super(OpticalEquipment, cls).__setup__()
cls._transitions = {
cls._transitions = ({
('draft', 'registred'),
('registred', 'draft'),
('registred', 'uncontrated'),
('uncontrated', 'contrated'),
}
cls._buttons.update(
{
'draft': {'invisible': Eval('state') != 'registred'},
'registred': {
'invisible': Eval('state').in_(
['registred', 'uncontrated', 'contrated']
)
},
}
})
cls._buttons.update({
# 'draft': {
# 'invisible': Eval('state') == 'draft'},
'registred': {
'invisible': Eval('state').in_(['registred', 'uncontrated', 'contrated'])}}
)
@classmethod
@@ -287,7 +197,7 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
config = Config(1)
for equipment in equipments:
if config.equipment_sequence is not None:
if config.equipment_sequence != None:
if not equipment.code:
try:
equipment.code = config.equipment_sequence.get()
@@ -295,33 +205,14 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
except UserError:
raise UserError(str('Validation Error'))
else:
raise UserError(
gettext('optical_equipment.msg_not_sequence_equipment'))
def get_contracts_of_equipment(self, records):
pool = Pool()
ContractsEquipment = pool.get('optical_equipment.contract')
contractsEquipment = set()
contractsEquipment = ContractsEquipment.search(
[('party', '=', self.propietary),
('history_equipments', 'in', [self.id])]
)
contracts = []
for key in contractsEquipment:
contracts.append(key.id)
return contracts
raise UserError(gettext('optical_equipment.msg_not_sequence_equipment'))
def get_maintenances_of_equipment(self, records):
pool = Pool()
MaintenancesEquipment = pool.get('optical_equipment.maintenance')
maintenancesEquipment = set()
maintenancesEquipment = MaintenancesEquipment.search(
['equipment', '=', self.id]
)
maintenancesEquipment = MaintenancesEquipment.search(['equipment', '=', self.id])
maintenances = []
for key in maintenancesEquipment:
@@ -329,16 +220,9 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
return maintenances
def get_technician_signature(self):
pool = Pool()
ConfigurationEquipment = pool.get('optical_equipment.configuration')
config = ConfigurationEquipment(1)
if config.technician_signature:
return config.technician_signature
@classmethod
def default_state(cls):
return 'draft'
return 'draft'
@staticmethod
def default_company():
@@ -347,150 +231,104 @@ class OpticalEquipment(DeactivableMixin, Workflow, ModelSQL, ModelView):
@fields.depends('propietary', 'maintenance_frequency')
def on_change_propietary(self):
if self.propietary:
if self.propietary.customer_type == 'ips':
self.maintenance_frequency = '6'
else:
self.maintenance_frequency = '12'
if self.propietary.client_type == 'ips':
self.maintenance_frequency = "6"
else:
self.maintenance_frequency = "12"
else:
self.maintenance_frequency = 'none'
self.maintenance_frequency = "none"
@fields.depends('product', 'equipment_type',
'use', 'biomedical_class', 'calibration',
'mark_category', 'model_category')
@fields.depends('product', 'equipment_type','use',
'biomedical_class', 'calibration',
'mark_category', 'model_category')
def on_change_product(self):
if self.product:
self.equipment_type = self.product.equipment_type
self.use = self.product.use
self.biomedical_class = self.product.biomedical_class
self.calibration = self.product.calibration
self.mark_category = self.product.mark_category
self.model_category = self.product.model_category
self.reference_category = self.product.reference_category
self.useful_life = (
self.product.useful_life if self.product.useful_life else int(
0)
)
self.calibration = True if self.product.calibration else False
self.warranty =\
self.product.warranty if self.product.warranty else int(0)
self.risk = self.product.risk
self.origin_country = self.product.origin_country
self.use = self.product.use
self.biomedical_class = self.product.biomedical_class
self.equipment_type=self.product.equipment_type
self.use=self.product.use
self.biomedical_class=self.product.biomedical_class
self.calibration=self.product.calibration
self.mark_category=self.product.mark_category
self.model_category=self.product.model_category
self.reference_category=self.product.reference_category
self.useful_life=self.product.useful_life if self.product.useful_life else int(0)
self.calibration=True if self.product.calibration else False
self.warranty=self.product.warranty if self.product.warranty else int(0)
self.risk=self.product.risk
self.origin_country=self.product.origin_country
self.use=self.product.use
self.biomedical_class=self.product.biomedical_class
else:
self.equipment_type = None
self.use = None
self.biomedical_class = None
self.calibration = None
self.mark_category = None
self.model_category = None
self.reference_category = None
self.useful_life = None
self.calibration = False
self.warranty = None
self.risk = None
self.origin_country = None
self.use = None
self.biomedical_class = None
self.refurbish = None
self.serial = None
self.health_register = None
self.software_version = None
self.equipment_type=None
self.use=None
self.biomedical_class=None
self.calibration=None
self.mark_category=None
self.model_category=None
self.reference_category=None
self.useful_life=None
self.calibration=False
self.warranty=None
self.risk=None
self.origin_country=None
self.use=None
self.biomedical_class=None
self.refurbish=None
self.serial=None
self.health_register=None
self.software_version=None
@classmethod
def delete(cls, equipments):
for equipment in equipments:
for equipment in equipments:
if equipment.purchase_origin:
raise AccessError(gettext('estos equipos no se pueden borrar'))
elif equipment.state != 'draft' and equipment.serial is not None:
raise AccessError(gettext('estos equipos no se pueden borrar'))
raise AccessError(
gettext('estos equipos no se pueden borrar'))
elif equipment.state != 'draft' and equipment.serial != None:
raise AccessError(
gettext('estos equipos no se pueden borrar'))
super(OpticalEquipment, cls).delete(equipments)
@classmethod
@ModelView.button
@Workflow.transition('draft')
def draft(cls, equipments):
pass
@classmethod
@ModelView.button
@Workflow.transition('registred')
def registred(cls, equipments):
for i in equipments:
if i.serial is None:
raise UserError(str('El Equipo no cuenta con un Serial'))
if i.serial == None:
raise UserError(str("El Equipo no cuenta con un Serial"))
else:
cls.set_code(equipments)
class EquipmentMaintenance(ModelSQL, ModelView):
'Optical Equipment - Equipment - Maintenance'
__name__ = 'optical_equipment.maintenance-optical_equipment.equipment'
equipment = fields.Many2One(
'optical_equipment.equipment',
'Equipment',
)
maintenance = fields.Many2One(
'optical_equipment.maintenance',
'Maintenances',
)
__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',
)
contract = fields.Many2One(
'optical_equipment.contract',
'Contract',
)
equipment = fields.Many2One('optical_equipment.equipment', 'Equipment', select=True)
contract = fields.Many2One('optical_equipment.contract', 'Contract', select=True)
class EquipmentParty(ModelSQL, ModelView):
'Optical Equipment - Party'
__name__ = 'optical_equipment.equipment-party.party'
equipment = fields.Many2One(
'optical_equipment.equipment',
'Equipment',
)
party = fields.Many2One(
'party.party',
'Party',
)
equipment = fields.Many2One('optical_equipment.equipment', "Equipment", select=True)
party = fields.Many2One('party.party', "Party", select=True)
class ChangePropietary(ModelView):
'Change of Propietary Equipment'
__name__ = 'optical_equipment.change_propietary.form'
old_propietary = fields.Many2One(
'party.party', 'Old Propietary', states={'required': True}
)
equipments = fields.Many2Many(
'optical_equipment.equipment',
None,
None,
'Equipments',
domain=[('propietary', '=', Eval('old_propietary'))],
depends=['old_propietary'],
)
new_propietary = fields.Many2One(
'party.party', 'New Propietary', states={'required': True}
)
new_address = fields.Many2One(
'party.address',
'New Address',
required=True,
domain=[('party', '=', Eval('new_propietary'))],
states={'required': True},
)
change_date = fields.Date('Change Date', readonly=True)
equipment = fields.Many2One('optical_equipment.equipment', "Equipment")
new_propietary = fields.Many2One('party.party', "New Propietary")
new_address = fields.Many2One('party.address', "New Address", required=True,
domain=[('party', '=', Eval('new_propietary'))],)
change_date = fields.Date("Change Date", readonly=True)
@classmethod
def default_change_date(cls):
@@ -503,57 +341,20 @@ class NewPropietary(Wizard):
'Change Propietary'
__name__ = 'optical_equipment.change_propietary'
start = StateView(
'optical_equipment.change_propietary.form',
'optical_equipment.change_propietary_view_form',
[
Button('Cancel', 'end', 'tryton-cancel'),
Button('Create', 'change_propietary', 'tryton-ok', default=True),
],
)
change_propietary = StateAction(
'optical_equipment.act_optical_equipment_form')
start = StateView('optical_equipment.change_propietary.form',
'optical_equipment.change_propietary_view_form',[
Button('Cancel', 'end', 'tryton-cancel'),
Button('Create', 'change_propietary', 'tryton-ok', default=True),
])
change_propietary = StateAction('optical_equipment.act_optical_equipment_form')
def do_change_propietary(self, action):
equipments = self.start.equipments
equipment = self.start.equipment
new_propietary = self.start.new_propietary
new_address = self.start.new_address
for equipment in equipments:
equipment.propietarys += (equipment.propietary,)
equipment.propietary = new_propietary
equipment.propietary_address = new_address
equipment.maintenance_frequency = (
'6' if new_propietary.customer_type == 'ips' else '12'
)
equipment.save()
class ChangeEquipment(ModelSQL):
'Change Equipment'
__name__ = 'optical_equipment.equipment-change_propietary.form'
maintenance_service = fields.Many2One(
'optical_equipment_maintenance.service', 'Maintenance Service'
)
equipment = fields.Many2One('optical_equipment.equipment', 'Equipment')
change = fields.Many2One(
'optical_equipment.change_propietary.form', 'Change')
class EquipmentReport(CompanyReport):
__name__ = 'optical_equipment.equipment'
@classmethod
def execute(cls, ids, data):
with Transaction().set_context(address_with_party=True):
return super(EquipmentReport, cls).execute(ids, data)
@classmethod
def get_context(cls, records, header, data):
pool = Pool()
Date = pool.get('ir.date')
context = super().get_context(records, header, data)
context['today'] = Date.today()
return context
equipment.propietarys += (equipment.propietary,)
equipment.propietary = new_propietary
equipment.propietary_address = new_address
equipment.maintenance_frequency = "6" if new_propietary.client_type == 'ips' else "12"
equipment.save()

View File

@@ -11,6 +11,18 @@
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_equipment_admin"/>
</record>
<record model="res.group" id="group_maintenance_admin">
<field name="name">Maintenance Administration</field>
</record>
<record model="res.user-res.group"
id="user_admin_group_maintenance_admin">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_maintenance_admin"/>
</record>
<menuitem
name="Equipment"
sequence="40"
id="menu_equipment"/>
<record model="ir.action.act_window" id="act_optical_equipment_form">
<field name="name">Equipments</field>
<field name="res_model">optical_equipment.equipment</field>
@@ -19,12 +31,12 @@
<record model="ir.ui.view" id="optical_equipment_view_tree">
<field name="model">optical_equipment.equipment</field>
<field name="type">tree</field>
<field name="name">equipment_tree</field>
<field name="name">optical_equipment_tree</field>
</record>
<record model="ir.ui.view" id="optical_equipment_view_form">
<field name="model">optical_equipment.equipment</field>
<field name="type">form</field>
<field name="name">equipment_form</field>
<field name="name">optical_equipment_form</field>
</record>
<record model="ir.action.act_window.view" id="act_optical_equipment_view1">
<field name="sequence" eval="10"/>
@@ -63,6 +75,7 @@
<field name="count" eval="True"/>
<field name="act_window" ref="act_optical_equipment_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_optical_equipment_form_domain_contrated">
<field name="name">Contrated</field>
<field name="sequence" eval="30"/>
@@ -78,17 +91,18 @@
<field name="domain"></field>
<field name="act_window" ref="act_optical_equipment_form"/>
</record>
<record model="ir.model.button" id="draft_equipment_button">
<field name="name">draft</field>
<field name="string">Draft</field>
<field name="model" search="[('model', '=', 'optical_equipment.equipment')]"/>
</record>
<record model="ir.model.button" id="registred_equipment_button">
<field name="name">registred</field>
<field name="string">Registred</field>
<field name="confirm">Are you sure you want to registred these equipments?</field>
<field name="model" search="[('model', '=', 'optical_equipment.equipment')]"/>
</record>
<menuitem parent="menu_equipment"
action="act_optical_equipment_form"
sequence="60"
id="menu_optical_equipment_form"/>
<record model="ir.action.act_window" id="act_optical_equipment_form1">
<field name="name">Serials</field>
<field name="res_model">optical_equipment.equipment</field>
@@ -97,7 +111,7 @@
<record model="ir.ui.view" id="optical_equipment_view_tree1">
<field name="model">optical_equipment.equipment</field>
<field name="type">tree</field>
<field name="name">equipment_serial_tree</field>
<field name="name">optical_equipment_serial_tree</field>
</record>
<record model="ir.action.act_window.view" id="act_optical_equipment_view3">
<field name="sequence" eval="10"/>
@@ -113,6 +127,52 @@
<field name="count" eval="True"/>
<field name="act_window" ref="act_optical_equipment_form1"/>
</record>
<menuitem
parent="menu_equipment"
action="act_optical_equipment_form1"
sequence="70"
id="menu_optical_equipment_serial_form"/>
<record model="ir.ui.menu-res.group"
id="menu_party_group_equipment_admin">
<field name="menu" ref="menu_equipment"/>
<field name="group" ref="group_equipment_admin"/>
</record>
<record model="ir.sequence.type" id="sequence_type_equipment">
<field name="name">Equipment</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_equipment_group_admin">
<field name="sequence_type" ref="sequence_type_equipment"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_equipment_group_equipment_admin">
<field name="sequence_type" ref="sequence_type_equipment"/>
<field name="group" ref="group_equipment_admin"/>
</record>
<record model="ir.sequence" id="sequence_equipment">
<field name="name">Equipment</field>
<field name="sequence_type" ref="sequence_type_equipment"/>
</record>
<record model="ir.sequence.type" id="sequence_type_maintenances">
<field name="name">Maintenances</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_maintenance_group_admin">
<field name="sequence_type" ref="sequence_type_maintenances"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_maintenance_group_maintenance_admin">
<field name="sequence_type" ref="sequence_type_maintenances"/>
<field name="group" ref="group_maintenance_admin"/>
</record>
<record model="ir.sequence" id="sequence_maintenances">
<field name="name">Maintenance</field>
<field name="sequence_type" ref="sequence_type_maintenances"/>
</record>
<record model="ir.action.report" id="report_equipment">
<field name="name">Equipment</field>
<field name="model">optical_equipment.equipment</field>
@@ -152,31 +212,5 @@
<field name="model">optical_equipment.equipment,-1</field>
<field name="action" ref="equipment_change_propietary"/>
</record>
<record model="ir.ui.icon" id="optical_equipment_serials_icon">
<field name="name">equipment_serial</field>
<field name="path">icons/barcode-solid.svg</field>
</record>
<record model="ir.ui.icon" id="optical_equipment_optical_icon">
<field name="name">optical</field>
<field name="path">icons/microscope-solid.svg</field>
</record>
<menuitem
name="Equipment"
sequence="40"
id="menu_equipment"
icon="optical"/>
<menuitem
parent="menu_equipment"
action="act_optical_equipment_form"
sequence="60"
id="menu_optical_equipment_form"
icon="optical"/>
<menuitem
parent="menu_equipment"
action="act_optical_equipment_form1"
sequence="70"
id="menu_optical_equipment_serial_form"
icon="equipment_serial"/>
</data>
</tryton>

11
exceptions.py Normal file
View File

@@ -0,0 +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.exceptions import UserError
from trytond.model.exceptions import ValidationError
class InvalidNumberPurchases(UserError):
pass
class NotSequenceEquipment(ValidationError):
pass

View File

@@ -1,202 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M24 32C10.7 32 0 42.7 0 56V456c0 13.3 10.7 24 24 24H40c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H24zm88 0c-8.8 0-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V48c0-8.8-7.2-16-16-16zm72 0c-13.3 0-24 10.7-24 24V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H184zm96 0c-13.3 0-24 10.7-24 24V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H280zM448 56V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H472c-13.3 0-24 10.7-24 24zm-64-8V464c0 8.8 7.2 16 16 16s16-7.2 16-16V48c0-8.8-7.2-16-16-16s-16 7.2-16 16z"/></svg>

Before

Width:  |  Height:  |  Size: 814 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zm64 80v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zm128 0v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H336zM64 400v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H208zm112 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H336c-8.8 0-16 7.2-16 16z"/></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM80 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm54.2 253.8c-6.1 20.3-24.8 34.2-46 34.2H80c-8.8 0-16-7.2-16-16s7.2-16 16-16h8.2c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.7 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 349l-9.8 32.8z"/></svg>

Before

Width:  |  Height:  |  Size: 942 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M228.3 469.1L47.6 300.4c-4.2-3.9-8.2-8.1-11.9-12.4h87c22.6 0 43-13.6 51.7-34.5l10.5-25.2 49.3 109.5c3.8 8.5 12.1 14 21.4 14.1s17.8-5 22-13.3L320 253.7l1.7 3.4c9.5 19 28.9 31 50.1 31H476.3c-3.7 4.3-7.7 8.5-11.9 12.4L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9zM503.7 240h-132c-3 0-5.8-1.7-7.2-4.4l-23.2-46.3c-4.1-8.1-12.4-13.3-21.5-13.3s-17.4 5.1-21.5 13.3l-41.4 82.8L205.9 158.2c-3.9-8.7-12.7-14.3-22.2-14.1s-18.1 5.9-21.8 14.8l-31.8 76.3c-1.2 3-4.2 4.9-7.4 4.9H16c-2.6 0-5 .4-7.3 1.1C3 225.2 0 208.2 0 190.9v-5.8c0-69.9 50.5-129.5 119.4-141C165 36.5 211.4 51.4 244 84l12 12 12-12c32.6-32.6 79-47.5 124.6-39.9C461.5 55.6 512 115.2 512 185.1v5.8c0 16.9-2.8 33.5-8.3 49.1z"/></svg>

Before

Width:  |  Height:  |  Size: 916 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M160 32c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32c17.7 0 32 14.3 32 32V288c0 17.7-14.3 32-32 32c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32zM32 448H320c70.7 0 128-57.3 128-128s-57.3-128-128-128V128c106 0 192 86 192 192c0 49.2-18.5 94-48.9 128H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm80-64H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z"/></svg>

Before

Width:  |  Height:  |  Size: 690 B

View File

@@ -18,10 +18,6 @@ msgctxt "view:product.template:"
msgid "Calibration"
msgstr "Calibración"
msgctxt "view:product.template:"
msgid "Maintenance Activities"
msgstr "Actividades de Mantenimiento"
msgctxt "view:product.template:"
msgid "Measurements of Equipment"
msgstr "Medidas del Equipo"
@@ -74,10 +70,6 @@ msgctxt "field:product.template,calibration:"
msgid "Apply calibration"
msgstr "Aplica calibración"
msgctxt "field:product.template,maintenance_required:"
msgid "Maintenance Required"
msgstr "Requiere Mantenimiento"
msgctxt "field:product.template,observation:"
msgid "Observation"
msgstr "Observación"
@@ -138,10 +130,6 @@ msgctxt "field:product.template,uncertainy_pattern:"
msgid "Uncertainy Pattern"
msgstr "Incertidumbre Patrón"
msgctxt "field:product.template,use_pattern:"
msgid "Use Pattern"
msgstr "Patrón Utilizado"
msgctxt "field:product.template,k_pattern:"
msgid "K Pattern"
msgstr "Patrón K"
@@ -166,10 +154,6 @@ msgctxt "field:product.template,k_pattern_list:"
msgid "List of patterns K"
msgstr "Lista de patrones K"
msgctxt "field:product.template,preventive_activities:"
msgid "Preventive Activities"
msgstr "Actividades Preventivas"
msgctxt "field:optical_equipment.configuration,equipment_sequence:"
msgid "Equipment Sequence"
msgstr "Secuencia de Equipos"
@@ -363,16 +347,8 @@ msgid "Serials"
msgstr "Seriales"
msgctxt "model:ir.ui.menu,name:menu_maintenance_form"
msgid "Maintenance Lines"
msgstr "Líneas de Mantenimiento"
msgctxt "model:ir.ui.menu,name:menu_properties_equipments"
msgid "Properties of Equipments"
msgstr "Propiedades de Equipos"
msgctxt "model:ir.ui.menu,name:menu_pattern"
msgid "Pattern Use"
msgstr "Patrónes de Calibración"
msgid "Maintenances"
msgstr "Mantenimientos"
msgctxt "model:ir.sequence,name:sequence_equipment"
msgid "Equipment"
@@ -450,6 +426,7 @@ msgctxt "field:optical_equipment.contract,invoice_address:"
msgid "Invoice Address"
msgstr "Dirección de Facturación"
msgctxt "field:optical_equipment.contract,start_date:"
msgid "Start Date"
msgstr "Fecha Inicio"
@@ -674,18 +651,6 @@ msgctxt "field:optical_equipment_maintenance.service,code:"
msgid "Code"
msgstr "Código"
msgctxt "field:optical_equipment_maintenance.service,technician_responsible:"
msgid "Technician Responsible"
msgstr "Técnico Reponsable"
msgctxt "field:optical_equipment_maintenance.service,invima:"
msgid "Invima"
msgstr "Invima"
msgctxt "selection:optical_equipment.maintenance,maintenance_type:"
msgid "Initial"
msgstr "Inicial"
msgctxt "selection:optical_equipment.maintenance,maintenance_type:"
msgid "Preventive"
msgstr "Preventivo"
@@ -698,10 +663,6 @@ msgctxt "field:optical_equipment.maintenance,description_activity:"
msgid "Activity"
msgstr "Descripción del Mantenimiento"
msgctxt "field:optical_equipment.maintenance,equipment_calibrate:"
msgid "Calibrate Equipment"
msgstr "Equipo Calibrable"
msgctxt "field:optical_equipment.maintenance,temperature_min:"
msgid "Temp Min"
msgstr "Temp Min"
@@ -722,50 +683,6 @@ msgctxt "field:optical_equipment.maintenance,moisture_uom:"
msgid "Moisture UOM"
msgstr "Humedad UOM"
msgctxt "field:optical_equipment.maintenance.line,line_replace:"
msgid "Replace"
msgstr "Repuesto"
msgctxt "field:optical_equipment.maintenance.line,line_maintenance_activity:"
msgid "Maintenance Activity"
msgstr "Actividad de Mantenimiento"
msgctxt "field:optical_equipment.maintenance.line,maintenance:"
msgid "Maintenance"
msgstr "Mantenimiento"
msgctxt "field:optical_equipment.maintenance.line,replacement:"
msgid "Replacement"
msgstr "Reemplazo"
msgctxt "field:optical_equipment.maintenance.line,maintenance_activity:"
msgid "Maintenance activity"
msgstr "Actividad de Mantenimiento"
msgctxt "field:optical_equipment.maintenance.line,quantity:"
msgid "Quantity"
msgstr "Cantidad"
msgctxt "field:optical_equipment.maintenance.line,actual_quantity:"
msgid "Actual Quantity"
msgstr "Cantidad Actual"
msgctxt "field:optical_equipment.maintenance.line,unit:"
msgid "Unit"
msgstr "Unidad"
msgctxt "field:optical_equipment.maintenance.line,product_uom_category:"
msgid "Product Uom Category"
msgstr "Categoría de unidad de producto"
msgctxt "field:optical_equipment.maintenance.line,description:"
msgid "Description"
msgstr "Detalles"
msgctxt "field:optical_equipment.maintenance.line,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:optical_equipment.maintenance,temperature_uom:"
msgid "Temperature UOM"
msgstr "Temperatura UOM"
@@ -778,18 +695,6 @@ msgctxt "field:optical_equipment_maintenance.service,description:"
msgid "Description"
msgstr "Descripción"
msgctxt "field:sale.sale,quote_number:"
msgid "Quote Number"
msgstr "Cotización #"
msgctxt "field:sale.sale,payment_term_description:"
msgid "Payment Term"
msgstr "Plazo de Pago"
msgctxt "field:sale.sale,description:sale."
msgid "Description"
msgstr "Tiempo de Entrega"
msgctxt "field:optical_equipment_maintenance.service,sale_date:"
msgid "Sale Date"
msgstr "Fecha de Venta"
@@ -810,18 +715,6 @@ msgctxt "field:optical_equipment_maintenance.service,maintenance_type:"
msgid "Maintenance Type"
msgstr "Tipo de Mantenimiento"
msgctxt "selection:optical_equipment_maintenance.service,maintenance_type:"
msgid "Initial"
msgstr "Inicial"
msgctxt "selection:optical_equipment_maintenance.service,maintenance_type:"
msgid "Preventive"
msgstr "Preventivo"
msgctxt "selection:optical_equipment_maintenance.service,maintenance_type:"
msgid "Corrective"
msgstr "Correctivo"
msgctxt "field:optical_equipment_maintenance.service,propietary:"
msgid "Propietary"
msgstr "Propietario"
@@ -854,32 +747,12 @@ msgctxt "field:optical_equipment_maintenance.service,state:"
msgid "State"
msgstr "Estado"
msgctxt "field:optical_equipment_maintenance.service,temperature_min:"
msgid "Temp Min"
msgstr "Temp Mínima"
msgctxt "field:party.party,client_type:"
msgid "Client type"
msgstr "Tipo de Cliente"
msgctxt "field:optical_equipment_maintenance.service,temperature_max:"
msgid "Temp Max"
msgstr "Temp Máxima"
msgctxt "field:optical_equipment_maintenance.service,temperature_uom:"
msgid "Temperature UOM"
msgstr "Temperatura UOM"
msgctxt "field:optical_equipment_maintenance.service,moisture_min:"
msgid "Moisture Min"
msgstr "Humedad Mínima"
msgctxt "field:optical_equipment_maintenance.service,moisture_max:"
msgid "Moisture Max"
msgstr "Humedad Máxima"
msgctxt "field:optical_equipment_maintenance.service,moisture_uom:"
msgid "Moisture UOM"
msgstr "Humedad UOM"
msgctxt "field:party.party,customer_type:"
msgid "Customer type"
msgctxt "field:party.party,client_type:"
msgid "Client type"
msgstr "Tipo de Cliente"
msgctxt "field:product.template,software_required:"
@@ -1038,30 +911,6 @@ msgctxt "field:optical_equipment.configuration,contract_sequence:"
msgid "Contract Sequence"
msgstr "Secuencia de Contratos"
msgctxt "field:optical_equipment.configuration,temperature_min:"
msgid "Temp Min"
msgstr "Temp Mínima"
msgctxt "field:optical_equipment.configuration,temperature_max:"
msgid "Temp Max"
msgstr "Temp Máxima"
msgctxt "field:optical_equipment.configuration,temperature_uom:"
msgid "Temperature UOM"
msgstr "Temperatura UOM"
msgctxt "field:optical_equipment.configuration,moisture_min:"
msgid "Moisture Min"
msgstr "Humedad Mínima"
msgctxt "field:optical_equipment.configuration,moisture_max:"
msgid "Moisture Max"
msgstr "Humedad Máxima"
msgctxt "field:optical_equipment.configuration,moisture_uom:"
msgid "Moisture UOM"
msgstr "Humedad UOM"
msgctxt "view:optical_equipment_maintenance.diary:"
msgid "Dates"
msgstr "Fechas"
@@ -1230,14 +1079,6 @@ msgctxt "selection:optical_equipment.maintenance,state:"
msgid "Finished"
msgstr "Finalizado"
msgctxt "model:ir.model.button,string:assing_agended_button"
msgid "Assing Agended"
msgstr "Agendar"
msgctxt "model:ir.model.button,string:reassing_agended_button"
msgid "Reassing Agended"
msgstr "Reagendar"
msgctxt "model:ir.model.button,string:maintenance_service_draft_button"
msgid "Draft"
msgstr "Borrador"
@@ -1430,21 +1271,13 @@ msgctxt "field:optical_equipment_create.contract,end_date:"
msgid "End Date"
msgstr "Fecha Final"
msgctxt "field:optical_equipment_create.contract,unit_price:"
msgid "Unit Price"
msgstr "Precio Unitario"
msgctxt "field:stock.move,equipment:"
msgid "Equipment"
msgstr "Equipo"
msgctxt "field:optical_equipment.change_propietary.form,equipments:"
msgid "Equipments"
msgstr "Equipos"
msgctxt "field:optical_equipment.change_propietary.form,old_propietary:"
msgid "Old Propietary"
msgstr "Antiguo Propietario"
msgctxt "field:optical_equipment.change_propietary.form,equipment:"
msgid "Equipment"
msgstr "Equipo"
msgctxt "field:optical_equipment.change_propietary.form,new_propietary:"
msgid "New Propietary"
@@ -1457,141 +1290,3 @@ msgstr "Nueva Dirección"
msgctxt "field:optical_equipment.change_propietary.form,change_date:"
msgid "Change Date"
msgstr "Fecha de Cambio"
msgctxt "field:optical_equipment.change_propietary_maintenance.form,maintenance_service:"
msgid "Maintenance Service"
msgstr "Servicios de Mantenimiento"
msgctxt "field:optical_equipment.change_propietary_maintenance.form,old_propietary:"
msgid "Old Propietary"
msgstr "Antiguo Propietario"
msgctxt "field:optical_equipment.change_propietary_maintenance.form,new_propietary:"
msgid "New Propietary"
msgstr "Nuevo Propietario"
msgctxt "field:optical_equipment.change_propietary_maintenance.form,new_address:"
msgid "New Address"
msgstr "Nueva Dirección"
msgctxt "field:optical_equipment.change_propietary_maintenance.form,change_date:"
msgid "Change Date"
msgstr "Fecha de Cambio"
msgctxt "field:stock.shipment.out,service_maintenance_initial:"
msgid "Maintenance Initial"
msgstr "Mantenimiento Inicial"
msgctxt "field:optical_equipment.print_balance_sale_party.start,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:optical_equipment.print_balance_sale_party.start,party:"
msgid "Party"
msgstr "Tercero"
msgctxt "field:optical_equipment.print_balance_sale_party.start,start_period:"
msgid "Start Period"
msgstr "Periodo Inicial"
msgctxt "field:optical_equipment.print_balance_sale_party.start,end_period:"
msgid "End Period"
msgstr "Periodo Final"
msgctxt "field:optical_equipment.print_balance_sale_party.start,party_type:"
msgid "Party Type"
msgstr "Tipo"
msgctxt "selection:optical_equipment.print_balance_sale_party.start,party_type:"
msgid "Customer"
msgstr "Cliente"
msgctxt "model:ir.ui.menu,name:menu_print_balance_sale_party"
msgid "Print Balance Sale by Party"
msgstr "Estado de Cuenta por Tercero"
msgctxt "model:ir.model.button,string:maintenance_initial_button"
msgid "Maintenance Initial"
msgstr "Mantenimiento Inicial"
msgctxt "model:ir.model.button,string:maintenance_samples_button"
msgid "Generate Samples"
msgstr "Generar Muestras"
msgctxt "model:ir.action,name:report_sale"
msgid "Sale Equipments"
msgstr "Venta de Equipos"
msgctxt "model:ir.action,name:report_sale_internal"
msgid "Sale Equipments Internal"
msgstr "Venta Interna de Equipos"
msgctxt "model:ir.action,name:report_purchase"
msgid "Purchase"
msgstr "Compra de Equipos"
msgctxt "model:ir.action,name:report_maintenance_service"
msgid "Maintenance Service"
msgstr "Servicio de Mantenimiento"
msgctxt "model:ir.action,name:report_calibration"
msgid "Calibration"
msgstr "Calibración"
msgctxt "model:ir.action,name:report_calibrations"
msgid "Calibrations"
msgstr "Calibraciones"
msgctxt "model:ir.action,name:report_maintenance_timeline"
msgid "Time Line Maintenance Service"
msgstr "Cronograma de Mantenimiento"
msgctxt "model:ir.action,name:report_service"
msgid "Service"
msgstr "Registro de Mantenimiento Preventivo"
msgctxt "model:ir.action,name:report_equipment"
msgid "Equipment"
msgstr "Hoja de Vida"
msgctxt "model:ir.action,name:report_history_maintenance"
msgid "Maintenance History"
msgstr "Historico de Mantenimiento"
msgctxt "model:ir.action,name:report_historys_maintenances"
msgid "Maintenances Historys"
msgstr "Historicos de Mantenimiento"
msgctxt "model:ir.action,name:report_capacitation"
msgid "Capacitation"
msgstr "Certificado de Capacitación"
msgctxt "model:ir.action,name:equipment_change_propietary"
msgid "Change Propietary"
msgstr "Cambiar Propietario"
msgctxt "model:ir.action,name:equipment_change_propietary_maintenance"
msgid "Change Propietary Maintenance"
msgstr "Cambiar Propietario al Servicio de Mantenimiento"
msgctxt "model:ir.action,name:maintenance_create_contract"
msgid "Create Contract"
msgstr "Crear Contrato"
msgctxt "model:optical_equipment.use_pattern,name_pattern:schematic_eye"
msgid "Schematic Eye"
msgstr "Ojo Esquemático"
msgctxt "model:optical_equipment.use_pattern,name_pattern:trial_lens"
msgid "Trial Lens"
msgstr "Lentes de Prueba"
msgctxt "model:optical_equipment.use_pattern,name_pattern:calibration_weights"
msgid "Calibration Weights"
msgstr "Pesas de Calibración"
msgctxt "model:optical_equipment.use_pattern,name_pattern:calibration_spheres"
msgid "Calibration Spheres"
msgstr "Esferas de Calibración"

File diff suppressed because it is too large Load Diff

View File

@@ -3,12 +3,27 @@
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.action.act_window" id="act_maintenance_form">
<field name="name">Maintenances</field>
<field name="res_model">optical_equipment.maintenance</field>
<field name="search_value"></field>
</record>
<record model="ir.ui.view" id= "maintenance_view_tree">
<field name="model">optical_equipment.maintenance</field>
<field name="type">tree</field>
<field name="name">maintenance_tree</field>
</record>
<record model="ir.ui.view" id="maintenance_view_form">
<field name="model">optical_equipment.maintenance</field>
<field name="type">form</field>
<field name="name">maintenance_form</field>
</record>
<record model="ir.action.act_window" id="act_maintenance_service_form">
<field name="name">Services Maintenance</field>
<field name="res_model">optical_equipment_maintenance.service</field>
<field name="search_value"></field>
</record>
<record model="ir.ui.view" id="maintenance_service_view_tree">
<record model="ir.ui.view" id= "maintenance_service_view_tree">
<field name="model">optical_equipment_maintenance.service</field>
<field name="type">tree</field>
<field name="name">maintenance_service_tree</field>
@@ -18,16 +33,82 @@
<field name="type">form</field>
<field name="name">maintenance_service_form</field>
</record>
<record model="ir.action.act_window.view" id="act_maintenance_service_view1">
<record model="ir.ui.view" id= "maintenance_equipment_view_form">
<field name="model">optical_equipment.maintenance-optical_equipment.equipment</field>
<field name="inherit" ref="maintenance_view_form"/>
<field name="name">maintenance_equipment_form</field>
</record>
<record model="ir.ui.view" id="maintenance_activity_view_form">
<field name="model">optical_equipment_maintenance.activity</field>
<field name="type">form</field>
<field name="name">maintenance_activity_form</field>
</record>
<record model="ir.ui.view" id="maintenance_activity_view_tree">
<field name="model">optical_equipment_maintenance.activity</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">maintenance_activity_tree</field>
</record>
<record model="ir.action.act_window.view" id="act_maintenance_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="maintenance_service_view_tree"/>
<field name="act_window" ref="act_maintenance_service_form"/>
<field name="view" ref="maintenance_view_tree"/>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.action.act_window.view" id="act_maintenance_service_view2">
<record model="ir.action.act_window.view" id="act_maintenance_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="maintenance_service_view_form"/>
<field name="act_window" ref="act_maintenance_service_form"/>
<field name="view" ref="maintenance_view_form"/>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_maintenance_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
<field name="domain"
eval="[('state', '=', 'draft')]"
pyson="1"/>
<field name="count" eval="True"/>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_maintenance_form_domain_finished">
<field name="name">Finished</field>
<field name="sequence" eval="40"/>
<field name="domain"
eval="[('state', '=', 'finished')]"
pyson="1"/>
<field name="count" eval="True"/>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_maintenance_form_domain_all">
<field name="name">All</field>
<field name="sequence" eval="9999"/>
<field name="domain"></field>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.model.button" id="maintenance_service_draft_button">
<field name="name">draft</field>
<field name="string">Draft</field>
<field name="model" search="[('model', '=', 'optical_equipment_maintenance.service')]"/>
</record>
<record model="ir.model.button" id="maintenance_service_in_progress_button">
<field name="name">in_progress</field>
<field name="string">In progress</field>
<field name="model" search="[('model', '=', 'optical_equipment_maintenance.service')]"/>
</record>
<record model="ir.model.button" id="maintenance_service_finished_button">
<field name="name">finished</field>
<field name="string">Finished</field>
<field name="model" search="[('model', '=', 'optical_equipment_maintenance.service')]"/>
</record>
<record model="ir.model.button" id="maintenance_finished_button">
<field name="name">finished</field>
<field name="string">Finished</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance')]"/>
</record>
<record model="ir.model.button" id="maintenance_calibrate_button">
<field name="name">calibrate</field>
<field name="string">Calibrate</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance')]"/>
</record>
<record model="ir.action.act_window.domain" id="act_maintenance_service_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
@@ -79,76 +160,6 @@
<field name="domain"></field>
<field name="act_window" ref="act_maintenance_service_form"/>
</record>
<record model="ir.action.act_window" id="act_maintenance_form">
<field name="name">Maintenance Lines</field>
<field name="res_model">optical_equipment.maintenance</field>
<field name="search_value"></field>
</record>
<record model="ir.ui.view" id= "maintenance_view_tree">
<field name="model">optical_equipment.maintenance</field>
<field name="type">tree</field>
<field name="name">maintenance_tree</field>
</record>
<record model="ir.ui.view" id="maintenance_view_form">
<field name="model">optical_equipment.maintenance</field>
<field name="type">form</field>
<field name="name">maintenance_form</field>
</record>
<record model="ir.action.act_window.view" id="act_maintenance_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="maintenance_view_tree"/>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.action.act_window.view" id="act_maintenance_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="maintenance_view_form"/>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.ui.view" id="change_propietary_maintenance_view_form">
<field name="model">optical_equipment.change_propietary_maintenance.form</field>
<field name="type">form</field>
<field name="name">change_propietary_maintenance_form</field>
</record>
<record model="ir.ui.view" id= "maintenance_equipment_view_form">
<field name="model">optical_equipment.maintenance-optical_equipment.equipment</field>
<field name="type">form</field>
<field name="name">maintenance_equipment_form</field>
</record>
<record model="ir.ui.view" id="maintenance_activity_view_form">
<field name="model">optical_equipment_maintenance.activity</field>
<field name="type">form</field>
<field name="name">maintenance_activity_form</field>
</record>
<record model="ir.ui.view" id="maintenance_activity_view_tree">
<field name="model">optical_equipment_maintenance.activity</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">maintenance_activity_tree</field>
</record>
<record model="ir.action.act_window.domain" id="act_maintenance_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
<field name="domain"
eval="[('state', '=', 'draft')]"
pyson="1"/>
<field name="count" eval="True"/>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_maintenance_form_domain_finished">
<field name="name">Finished</field>
<field name="sequence" eval="40"/>
<field name="domain"
eval="[('state', '=', 'finished')]"
pyson="1"/>
<field name="count" eval="True"/>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_maintenance_form_domain_all">
<field name="name">All</field>
<field name="sequence" eval="9999"/>
<field name="domain"></field>
<field name="act_window" ref="act_maintenance_form"/>
</record>
<record model="ir.ui.view" id="maintenance_line_view_form">
<field name="model">optical_equipment.maintenance.line</field>
<field name="type">form</field>
@@ -159,75 +170,83 @@
<field name="type">tree</field>
<field name="name">maintenance_line_tree</field>
</record>
<record model="ir.model.button" id="assing_agended_button">
<field name="name">assing_agended</field>
<field name="string">Assing Agended</field>
<field name="model" search="[('model', '=', 'optical_equipment_maintenance.service')]"/>
<record model="ir.ui.view" id="maintenance_calibration_view_form">
<field name="model">optical_equipment.maintenance.calibration_sample</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_sample</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">maintenance_calibration_tree</field>
</record>
<record model="ir.ui.view" id="calibration_total_view_tree">
<field name="model">optical_equipment.maintenance.calibration</field>
<field name="type">tree</field>
<field name="name">calibration_total_tree</field>
</record>
<record model="ir.ui.view" id="calibration_total_view_form">
<field name="model">optical_equipment.maintenance.calibration</field>
<field name="type">form</field>
<field name="name">calibration_total_form</field>
</record>
<record model="ir.ui.view" id="assing_agended_view_form">
<field name="model">optical_equipment_maintenance.agended</field>
<field name="type">form</field>
<field name="name">assing_agended_form</field>
</record>
<record model="ir.model.button" id="reassing_agended_button">
<field name="name">reassing_agended</field>
<field name="string">Reassing Agended</field>
<field name="model" search="[('model', '=', 'optical_equipment_maintenance.service')]"/>
<record model="ir.action.wizard" id="act_assing_agended">
<field name="name">Assing Agended</field>
<field name="wiz_name">optical_equipment_maintenance.assing_agended</field>
</record>
<record model="ir.model.button" id="maintenance_service_draft_button">
<field name="name">draft</field>
<field name="string">Draft</field>
<field name="model" search="[('model', '=', 'optical_equipment_maintenance.service')]"/>
<record model="ir.ui.view" id="reassing_agended_view_form">
<field name="model">optical_equipment_maintenance.reagended</field>
<field name="type">form</field>
<field name="name">reassing_agended_form</field>
</record>
<record model="ir.model.button" id="maintenance_service_in_progress_button">
<field name="name">in_progress</field>
<field name="string">In progress</field>
<field name="model" search="[('model', '=', 'optical_equipment_maintenance.service')]"/>
<record model="ir.action.wizard" id="act_reassing_agended">
<field name="name">ReAssing Agended</field>
<field name="wiz_name">optical_equipment_maintenance.reassing_agended</field>
</record>
<record model="ir.model.button" id="maintenance_service_finished_button">
<field name="name">finished</field>
<field name="string">Finished</field>
<field name="model" search="[('model', '=', 'optical_equipment_maintenance.service')]"/>
<record model="ir.ui.view" id="create_contract_view_form">
<field name="model">optical_equipment_create.contract</field>
<field name="type">form</field>
<field name="name">create_contract_form</field>
</record>
<record model="ir.model.button" id="maintenance_in_progress_button">
<field name="name">in_progress</field>
<field name="string">In progress</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance')]"/>
<record model="ir.action.wizard" id="maintenance_create_contract">
<field name="name">Create Contract</field>
<field name="wiz_name">optical_equipment.maintenance.contract</field>
<field name="model">optical_equipment_maintenance.service</field>
</record>
<record model="ir.model.button" id="maintenance_finished_button">
<field name="name">finished</field>
<field name="string">Finished</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance')]"/>
<record model="ir.action.keyword" id="maintenance_create_contract_keyword">
<field name="keyword">form_action</field>
<field name="model">optical_equipment_maintenance.service,-1</field>
<field name="action" ref="maintenance_create_contract"/>
</record>
<record model="ir.action.report" id="report_calibration">
<field name="name">Calibration</field>
<field name="model">optical_equipment.maintenance</field>
<field name="report_name">optical_equipment.maintenance</field>
<field name="report">optical_equipment/report/Calibration.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_calibration_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment.maintenance,-1</field>
<field name="action" ref="report_calibration"/>
</record>
<record model="ir.model.button" id="maintenance_samples_button">
<field name="name">samples</field>
<field name="string">Generate Samples</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance')]"/>
</record>
<record model="ir.model.button" id="maintenance_calibrate_button">
<field name="name">calibrate</field>
<field name="string">Calibrate</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance')]"/>
</record>
<record model="ir.action.report" id="report_service">
<field name="name">Service</field>
<record model="ir.action.report" id="report_capacitation">
<field name="name">Capacitation</field>
<field name="model">optical_equipment_maintenance.service</field>
<field name="report_name">optical_equipment_maintenance.service</field>
<field name="report">optical_equipment/report/Service.fodt</field>
<field name="report">optical_equipment/report/Capacitation.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_service_keyword">
<record model="ir.action.keyword" id="report_capacitation_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment_maintenance.service,-1</field>
<field name="action" ref="report_service"/>
</record>
<record model="ir.action.report" id="report_cvs">
<field name="name">Hojas de Vida</field>
<field name="model">optical_equipment_maintenance.service</field>
<field name="report_name">optical_equipment_maintenance.service</field>
<field name="report">optical_equipment/report/CVS_Equipments.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_cvs_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment_maintenance.service,-1</field>
<field name="action" ref="report_cvs"/>
<field name="action" ref="report_capacitation"/>
</record>
<record model="ir.action.report" id="report_maintenance_service">
<field name="name">Maintenance Service</field>
@@ -242,53 +261,32 @@
<field name="action" ref="report_maintenance_service"/>
</record>
<record model="ir.action.report" id="report_maintenance_timeline">
<field name="name">Time Line Maintenance Service</field>
<field name="model">optical_equipment_maintenance.service</field>
<field name="report_name">optical_equipment_maintenance.service</field>
<field name="name">Maintenance Service</field>
<field name="model">optical_equipment.maintenance</field>
<field name="report_name">optical_equipment.maintenance</field>
<field name="report">optical_equipment/report/Maintenance_Timeline.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_maintenance_timeline_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment_maintenance.service,-1</field>
<field name="model">optical_equipment.maintenance,-1</field>
<field name="action" ref="report_maintenance_timeline"/>
</record>
<record model="ir.action.report" id="report_historys_maintenances">
<field name="name">Maintenances Historys</field>
<field name="model">optical_equipment_maintenance.service</field>
<field name="report_name">optical_equipment_maintenance.service</field>
<field name="report">optical_equipment/report/Maintenances_Historys.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_historys_maintenances_keyword">
<field name="keyword">form_print</field>
<field name="model">optical_equipment_maintenance.service,-1</field>
<field name="action" ref="report_historys_maintenances"/>
</record>
<record model="ir.action.wizard" id="equipment_change_propietary_maintenance">
<field name="name">Change Propietary Maintenance</field>
<field name="wiz_name">optical_equipment.change_propietary_maintenance</field>
<field name="model">optical_equipment_maintenance.service</field>
</record>
<record model="ir.action.keyword" id="equipment_change_propietary_maintenance_keyword">
<field name="keyword">form_action</field>
<field name="model">optical_equipment_maintenance.service,-1</field>
<field name="action" ref="equipment_change_propietary_maintenance"/>
</record>
<record model="ir.ui.icon" id="optical_equipment_health_icon">
<field name="name">equipment_health</field>
<field name="path">icons/heart-pulse-solid.svg</field>
</record>
<menuitem parent="menu_equipment"
action="act_maintenance_service_form"
sequence="20"
id="menu_maintenance_service_form"
icon="equipment_health"/>
id="menu_maintenance_service_form"/>
<menuitem parent="menu_maintenance_service_form"
action="act_maintenance_form"
sequence="30"
id="menu_maintenance_form"
icon="equipment_health"/>
id="menu_maintenance_form"/>
<menuitem parent="menu_diary"
action="act_assing_agended"
sequence="30"
id="menu_assing_agended_form"/>
<menuitem parent="menu_diary"
action="act_reassing_agended"
sequence="40"
id="menu_reassing_agended_form"/>
</data>
</tryton>

16
message.xml Normal file
View File

@@ -0,0 +1,16 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data grouped="1">
<record model="ir.message" id="msg_invalid_number_purchases">
<field name="text">Please, select only one purchase.</field>
</record>
<record model="ir.message" id="msg_serial_unique">
<field name="text">The serial number of equipment, should be unique.</field>
</record>
<record model="ir.message" id="msg_not_sequence_equipment">
<field name="text">You do not have a sequence assigned for equipments</field>
</record>
</data>
</tryton>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data grouped="1">
<record model="ir.message" id="line_without_serial">
<field name="text">La linea de envio se encuentra sin serial. Debe asignar un equipo a cada linea correspondiente.</field>
</record>
<record model="ir.message" id="msg_not_sequence_equipment">
<field name="text">Asigne una secuencia para enumerar equipos.</field>
</record>
<record model="ir.message" id="msg_finished_mantenance_service">
<field name="text">Debe finalizar las líneas de Mantenimiento Primero.</field>
</record>
</data>
</tryton>

444
move.py
View File

@@ -1,88 +1,30 @@
from trytond.model import fields, ModelView, Workflow
from trytond.modules.company import CompanyReport
from trytond.modules.company.model import set_employee
from trytond.model import fields, ModelSQL, ModelView, Workflow, dualmethod
from trytond.modules.company.model import employee_field, set_employee
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval, If
from trytond.exceptions import UserError
from itertools import groupby
from trytond.transaction import Transaction, without_check_access
from trytond.model.exceptions import ValidationError
from trytond.i18n import gettext
from functools import wraps
def process_sale(moves_field):
def _process_sale(func):
@wraps(func)
def wrapper(cls, shipments):
pool = Pool()
Sale = pool.get('sale.sale')
transaction = Transaction()
context = transaction.context
with without_check_access():
sales = set(
m.sale
for s in cls.browse(shipments)
for m in getattr(s, moves_field)
if m.sale
)
func(cls, shipments)
if sales:
with transaction.set_context(
queue_batch=context.get('queue_batch', True)
):
Sale.__queue__.process(sales)
return wrapper
return _process_sale
from trytond.transaction import Transaction
class Move(metaclass=PoolMeta):
'Stock Move'
__name__ = 'stock.move'
"Stock Move"
__name__ = "stock.move"
_states = {
'invisible': ~Eval('product_equipment'),
'readonly': (Eval('state').in_(['cancelled', 'done'])),
}
equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
domain=[('state', '=', 'registred'),
('product','=', Eval('product'))
],
states={'invisible': If(~Eval('product_equipment'), True),
'readonly': (Eval('state').in_(['cancelled', 'done'])),},
depends=['product_equipment'])
equipment_serial = fields.Function(fields.Char('Serial',
states={'readonly': True,
'invisible': If(~Eval('product_equipment'), True)},
depends=['product_equipment']),
'get_equipment_serial')
product_equipment = fields.Function(fields.Boolean("It Equipment"),'get_product_equipment')
product_equipment = fields.Function(
fields.Boolean('It Equipment'), 'get_product_equipment'
)
return_equipment = fields.Boolean(
'Devolución',
states=_states)
equipment = fields.Many2One(
'optical_equipment.equipment',
'Equipment',
domain=[
If(
Eval('return_equipment', True),
('state', 'in', ['uncontrated', 'contrated']),
('state', '=', 'registred'),
),
('product', '=', Eval('product')),
],
states=_states,
depends=['product_equipment'],
)
equipment_serial = fields.Function(
fields.Char(
'Serial',
states=_states,
depends=['product_equipment'],
),
'get_equipment_serial',
)
@classmethod
def __setup__(cls):
super(Move, cls).__setup__()
cls.origin.states['required'] = False
@fields.depends('product')
def get_product_equipment(self, product):
@@ -98,7 +40,14 @@ class Move(metaclass=PoolMeta):
else:
return None
@fields.depends('equipment', methods=['get_equipment_serial'])
@fields.depends('product', 'equipment', 'uom')
def on_change_product(self):
if self.product:
if (not self.uom
or self.uom.category != self.product.default_uom.category):
self.uom = self.product.default_uom
@fields.depends(methods=['get_equipment_serial'])
def on_change_equipment(self):
if self.equipment:
self.product = self.equipment.product.id
@@ -108,95 +57,36 @@ class Move(metaclass=PoolMeta):
class ShipmentOut(metaclass=PoolMeta):
'Customer Shipment'
"Customer Shipment"
__name__ = 'stock.shipment.out'
service_maintenance_initial = fields.Boolean(
'Maintenance Initial', states={'readonly': True}
)
sale_type = fields.Char('Type sale origin')
service_maintenance_initial = fields.Boolean('Maintenance Initial', states={'readonly': True})
@classmethod
def __setup__(cls):
super(ShipmentOut, cls).__setup__()
cls._buttons.update(
{
'maintenance_initial': {
'invisible': (
(Eval('service_maintenance_initial', True))
| (Eval('sale_type').in_(['maintenance', 'replaces']))
)
}
}
)
cls._buttons.update({
'maintenance_initial': {'invisible': If(Eval('service_maintenance_initial') == True, True)}})
def get_outgoing_moves(self, name):
moves = []
if self.state == 'done':
for move in self.inventory_moves:
moves.append(move.id)
return moves
else:
for move in self.moves:
if move.from_location == self.warehouse_output:
moves.append(move.id)
return moves
@classmethod
def view_attributes(cls):
return super(ShipmentOut, cls).view_attributes() + [
(
"//page[@name='inventory_moves']",
'states',
{
'invisible': False,
},
),
]
@classmethod
@ModelView.button
@Workflow.transition('done')
@set_employee('done_by')
@process_sale('outgoing_moves')
def done(cls, shipments):
pool = Pool()
Move = pool.get('stock.move')
Date = pool.get('ir.date')
Locations = pool.get('stock.location')
Equipments = pool.get('optical_equipment.equipment')
for shipment in shipments:
for move in shipment.inventory_moves:
count = 0
if not move.equipment:
count += 1
continue
equipment = move.equipment
Id = equipment.id
equipment = Equipments.search(['id', '=', Id])[0]
equipment.propietary = shipment.customer.id
equipment.propietary_address = shipment.delivery_address.id
equipment.location = Locations.search(
['name', '=', 'Customer'])[0].id
equipment.state = 'uncontrated'
equipment.shipment_destination = shipment
equipment.sale_destination =\
shipment.outgoing_moves[count].origin
equipment.propietarys += (shipment.customer,)
equipment.maintenance_frequency = (
'6'
if shipment.customer.customer_type == 'ips'
else '12'
)
count += 1
equipment.save()
Move.delete([
m for s in shipments
for m in s.outgoing_moves
if m.state == 'staging'
])
Move.do([m for s in shipments for m in s.outgoing_moves])
iterator = groupby(shipments, key=lambda s: s.company)
for company, c_shipments in iterator:
with Transaction().set_context(company=company.id):
today = Date.today()
cls.write(
[s for s in c_shipments if not s.effective_date],
{
'effective_date': today,
},
)
('//page[@name="inventory_moves"]', 'states', {
'invisible': False,
}),]
@classmethod
@ModelView.button
@@ -204,100 +94,101 @@ class ShipmentOut(metaclass=PoolMeta):
pool = Pool()
MaintenanceService = pool.get('optical_equipment_maintenance.service')
Maintenance = pool.get('optical_equipment.maintenance')
SaleLine = pool.get('sale.line')
Equipments = pool.get('optical_equipment.equipment')
for shipment in shipments:
for move in shipment.inventory_moves:
count = 0
if move.equipment:
equipment = move.equipment
Id = equipment.id
equipment = Equipments.search(['id', '=',Id])[0]
equipment.propietary = shipment.customer.id
equipment.propietary_address= shipment.delivery_address.id
equipment.state="uncontrated"
equipment.shipment_destination = shipment
equipment.sale_destination = shipment.outgoing_moves[count].origin
equipment.propietarys += (shipment.customer,)
equipment.maintenance_frequency = "6" if shipment.customer.client_type == "ips" else "12"
count+=1
equipment.save()
else:
count+=1
for shipment in shipments:
sale_origin = shipment.outgoing_moves[0].origin.sale.id
saleLine = SaleLine(
type='line',
quantity=1,
unit_price=0,
sale=sale_origin)
saleLine.save()
maintenanceService = MaintenanceService(
sale_date=shipment.outgoing_moves[0].origin.sale.sale_date,
sale_origin=saleLine,
maintenance_type='initial',
propietary=shipment.customer.id,
propietary_address=shipment.delivery_address.id)
maintenanceService.save()
serial = False
number_equipments = 0
maintenance_required = 0
for move in shipment.inventory_moves:
if move.product_equipment and move.equipment:
serial = True
number_equipments += 1
if move.equipment.product.maintenance_required:
maintenance_required += 1
elif not move.product_equipment:
serial = True
else:
serial = False
if number_equipments < 1 or maintenance_required < 1:
shipment.service_maintenance_initial = True
shipment.save()
break
sale_origin = shipment.outgoing_moves[0].origin.sale
maintenanceService = MaintenanceService.search(
['sale_origin', '=', sale_origin]
)
if maintenanceService == []:
maintenanceService = MaintenanceService(
sale_date=shipment.outgoing_moves[0].origin.sale.sale_date,
sale_origin=shipment.outgoing_moves[0].origin.sale,
maintenance_type='initial',
propietary=shipment.customer.id,
propietary_address=shipment.delivery_address.id,
state='draft',
)
maintenanceService.save()
if serial == True:
for move in shipment.inventory_moves:
if move.product_equipment and move.equipment:
maintenance = Maintenance(
service_maintenance=maintenanceService.id,
maintenance_type='initial',
propietary=shipment.customer.id,
propietary_address=shipment.delivery_address.id,
equipment=move.equipment.id)
maintenance.save()
shipment.service_maintenance_initial = True
else:
maintenanceService = maintenanceService[0]
maintenanceService.state = 'draft'
maintenanceService.save()
raise UserError(str('Por favor Primero debe Asignar un serial a todos los Equipos.'))
if not serial:
error = 'Por favor Primero debe Asignar'
+ 'un serial a todos los Equipos.'
raise UserError(str(error))
def _get_inventory_move(self, move):
'Return inventory move for the outgoing move if necessary'
pool = Pool()
Move = pool.get('stock.move')
Uom = pool.get('product.uom')
quantity = move.quantity
for move in shipment.inventory_moves:
valid = \
move.product_equipment \
and move.equipment \
and move.equipment.product.template.maintenance_required
for inventory_move in self.inventory_moves:
if (inventory_move.origin == move
and inventory_move.state != 'cancelled'):
quantity -= Uom.compute_qty(
inventory_move.uom, inventory_move.quantity, move.uom)
quantity = move.uom.round(quantity)
if (not valid):
continue
if quantity <= 0:
return
template = move.equipment.product.template
maintenance = Maintenance(
service_maintenance=maintenanceService.id,
maintenance_type='initial',
propietary=shipment.customer.id,
equipment_calibrate=(
True if move.equipment.product.calibration else False
),
propietary_address=shipment.delivery_address.id,
equipment=move.equipment.id,
initial_operation=move.equipment.product.initial_operation,
check_equipment=template.check_equipment,
check_electric_system=template.check_electric_system,
clean_int_ext=template.clean_int_ext,
clean_eyes=template.clean_eyes,
check_calibration=template.check_calibration,
temperature_min=maintenanceService.temperature_min,
temperature_max=maintenanceService.temperature_max,
temperature_uom=maintenanceService.temperature_uom.id,
moisture_min=maintenanceService.moisture_min,
moisture_max=maintenanceService.moisture_max,
moisture_uom=maintenanceService.moisture_uom.id,
)
maintenance.save()
inventory_move = Move(
from_location=self.warehouse_storage,
to_location=move.from_location,
product=move.product,
uom=move.uom,
quantity=quantity,
shipment=self,
planned_date=move.planned_date,
company=move.company,
origin=move,
state='staging' if move.state == 'staging' else 'draft',
)
shipment.service_maintenance_initial = True
shipment.save()
@classmethod
@ModelView.button
@Workflow.transition('picked')
@set_employee('picked_by')
def pick(cls, shipments):
super(ShipmentOut, cls).pick(shipments)
for shipment in shipments:
for line in shipment.inventory_moves:
if line.product.equipment and not line.equipment:
raise ValidationError(
gettext("optical_equipment.line_without_serial"))
if inventory_move.on_change_with_unit_price_required():
inventory_move.unit_price = move.unit_price
inventory_move.currency = move.currency
return inventory_move
class ShipmentInternal(metaclass=PoolMeta):
'Shipment Interncal'
@@ -319,86 +210,5 @@ class ShipmentInternal(metaclass=PoolMeta):
move.equipment.save()
Move.do([m for s in shipments for m in s.incoming_moves])
cls.write(
[s for s in shipments if not s.effective_date],
{
'effective_date': Date.today(),
},
)
class ShipmentOutReturn(metaclass=PoolMeta):
'Customer Shipment Return'
__name__ = 'stock.shipment.out.return'
service_maintenance_initial = fields.Boolean(
'Maintenance Initial', states={'readonly': True}
)
sale_type = fields.Char('Type sale origin')
@classmethod
@ModelView.button
@Workflow.transition('received')
@set_employee('received_by')
def receive(cls, shipments):
Move = Pool().get('stock.move')
Equipments = Pool().get('optical_equipment.equipment')
Move.do([m for s in shipments for m in s.incoming_moves])
for s in shipments:
for m in s.incoming_moves:
if not m.equipment:
continue
equipment = m.equipment
Id = equipment.id
equipment = Equipments.search(['id', '=', Id])[0]
equipment.propietary = s.company.party.id
equipment.propietary_address = s.company.party.addresses[0].id
equipment.location = m.to_location.id
equipment.state = 'registred'
equipment.save()
cls.create_inventory_moves(shipments)
# Set received state to allow done transition
cls.write(shipments, {'state': 'received'})
to_do = [
s for s in shipments if s.warehouse_storage == s.warehouse_input]
if to_do:
cls.done(to_do)
class PickingListDeliveryReport(CompanyReport):
__name__ = 'stock.shipment.out.picking_list1'
@classmethod
def execute(cls, ids, data):
with Transaction().set_context(address_with_party=True):
return super(PickingListDeliveryReport, cls).execute(ids, data)
@classmethod
def get_context(cls, records, header, data):
pool = Pool()
Date = pool.get('ir.date')
context = super().get_context(records, header, data)
context['today'] = Date.today()
return context
class CapacitationReport(CompanyReport):
__name__ = 'stock.shipment.out.capacitation_note'
@classmethod
def execute(cls, ids, data):
with Transaction().set_context(address_with_party=True):
return super(CapacitationReport, cls).execute(ids, data)
@classmethod
def get_context(cls, records, header, data):
pool = Pool()
Date = pool.get('ir.date')
context = super().get_context(records, header, data)
context['today'] = Date.today()
return context
cls.write([s for s in shipments if not s.effective_date], {
'effective_date': Date.today(),})

View File

@@ -2,43 +2,30 @@
<!--This file file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="move_view_list_shipment">
<field name="model">stock.move</field>
<field name="inherit" ref="stock.move_view_list_shipment"/>
<field name="name">move_list_shipment</field>
</record>
<record model="ir.ui.view" id="move_view_form">
<field name="model">stock.move</field>
<field name="inherit" ref="stock.move_view_form"/>
<field name="name">move_form</field>
</record>
<record model="ir.model.button" id="maintenance_initial_button">
<field name="name">maintenance_initial</field>
<field name="string">Maintenance Initial</field>
<field name="model" search="[('model', '=', 'stock.shipment.out')]"/>
</record>
<record model="ir.action.report" id="report_shipment_out_picking_list1">
<record model="ir.ui.view" id="move_view_list_shipment">
<field name="model">stock.move</field>
<field name="inherit" ref="stock.move_view_list_shipment"/>
<field name="name">move_list_shipment</field>
</record>
<record model="ir.ui.view" id="move_view_form">
<field name="model">stock.move</field>
<field name="inherit" ref="stock.move_view_form"/>
<field name="name">move_form</field>
</record>
<record model="ir.model.button" id="maintenance_initial_button">
<field name="name">maintenance_initial</field>
<field name="string">Maintenance Initial</field>
<field name="model" search="[('model', '=', 'stock.shipment.out')]"/>
</record>
<record model="ir.action.report" id="report_shipment_out_picking_list1">
<field name="name">Acta Entrega</field>
<field name="model">stock.shipment.out</field>
<field name="report_name">stock.shipment.out.picking_list1</field>
<field name="report">optical_equipment/report/Delivery_Certificated.fodt</field>
</record>
<record model="ir.action.keyword" id="report_shipment_out_picking_list1_keyword">
</record>
<record model="ir.action.keyword" id="report_shipment_out_picking_list1_keyword">
<field name="keyword">form_print</field>
<field name="model">stock.shipment.out,-1</field>
<field name="action" ref="report_shipment_out_picking_list1"/>
</record>
<record model="ir.action.report" id="report_capacitation">
<field name="name">Capacitation</field>
<field name="model">stock.shipment.out</field>
<field name="report_name">stock.shipment.out.picking_list1</field>
<field name="report">optical_equipment/report/Capacitation.fodt</field>
</record>
<record model="ir.action.keyword" id="report_capacitation_keyword">
<field name="keyword">form_print</field>
<field name="model">stock.shipment.out,-1</field>
<field name="action" ref="report_capacitation"/>
</record>
</data>
</record>
</tryton>

View File

@@ -1,28 +1,12 @@
# 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.pool import PoolMeta
from trytond.model import fields
from trytond.pyson import Eval
_CUSTOMER_TYPE = [("ips", "IPS"), ("optica", "Optica"), ("otro", "Otro")]
from trytond.model import ModelSQL, ModelView, fields
from . import equipment
_CLIENT_TYPE = [('ips', 'IPS'),
('optica', 'Optica'),
('otro', 'Otro')]
class Party(metaclass=PoolMeta):
__name__ = "party.party"
__name__ = 'party.party'
customer_type = fields.Selection(_CUSTOMER_TYPE, "Customer Type")
@classmethod
def default_customer_type(csl):
return "otro"
class Address(metaclass=PoolMeta):
__name__ = "party.address"
campus = fields.Boolean("Campus")
party_related = fields.Many2One(
"party.party", "Party Related", states={"invisible": (~Eval("campus"))}
)
client_type = fields.Selection(_CLIENT_TYPE, 'Client type')

View File

@@ -2,27 +2,14 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="party_view_tree">
<field name="model">party.party</field>
<field name="inherit" ref="party.party_view_tree"/>
<field name="name">party_tree</field>
</record>
<record model="ir.ui.view" id="party_view_form">
<record model="ir.ui.view" id="party_view_form">
<field name="model">party.party</field>
<field name="inherit" ref="party.party_view_form"/>
<field name="name">party_form</field>
</record>
<!-- Party Address -->
<record model="ir.ui.view" id="address_view_tree">
<field name="model">party.address</field>
<field name="inherit" ref="party.address_view_tree"/>
<field name="name">address_tree</field>
</record>
<record model="ir.ui.view" id="address_view_form">
<field name="model">party.address</field>
<field name="inherit" ref="party.address_view_form"/>
<field name="name">address_form</field>
</record>
</data>
</record>
<record model="ir.ui.view" id="party_view_tree">
<field name="model">party.party</field>
<field name="inherit" ref="party.party_view_tree"/>
<field name="name">party_tree</field>
</record>
</tryton>

View File

@@ -1,503 +1,347 @@
# 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.pool import Pool, PoolMeta
from trytond.model import ModelView, ModelSQL, fields
#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.pool import Pool, PoolMeta
from trytond.model import (
ModelView, ModelSQL, fields, Exclude)
from trytond.pyson import Bool, If, Eval, Id
from trytond.exceptions import UserError
_RISK = [
("n/a", "No aplíca"),
("uno", "I"),
("dosA", "IIA"),
("dosB", "IIB")]
_RISK = [('n/a', "No aplíca"),
('uno', 'I'),
('dosA', 'IIA'),
('dosB', 'IIB')]
_USE = [
("", ""),
("medico", "Médico"),
("basico", "Basico"),
("apoyo", "Apoyo")]
_USE = [('', ""),
('medico', 'Médico'),
('basico', 'Basico'),
('apoyo', 'Apoyo')]
_BIOMEDICAL_CLASS = [
("n/a", "No aplíca"),
("diagnostico", "Diagnóstico"),
("rehabilitación", "Rehabilitación"),
]
('n/a', "No aplíca"),
('diagnostico', 'Diagnóstico'),
('rehabilitación', 'Rehabilitación')]
_MAIN_TECNOLOGY = [
("", ""),
("mecanico", "Mecánico"),
("electrico", "Electrico"),
("electronico", "Electrónico"),
("hidraulico", "Hidraulico"),
("neumatico", "Neumatico"),
]
('', ""),
('mecanico', 'Mecánico'),
('electrico', 'Electrico'),
('electronico', 'Electrónico'),
('hidraulico', 'Hidraulico'),
('neumatico', 'Neumatico')]
_EQUIPMENT_TYPE = [
("", ""),
("mobiliario_optico", "Mobiliario óptico"),
("refraccion", "Refracción"),
("medico", "Medicion"),
("accesorios", "Accesorios"),
]
('', ""),
('mobiliario_optico', 'Mobiliario óptico'),
('refraccion', 'Refracción'),
('medico', 'Medicion'),
('accesorios', 'Accesorios')]
NON_MEASURABLE = ["service"]
NON_MEASURABLE = ['service']
class Template(metaclass=PoolMeta):
"Template"
__name__ = "product.template"
'Template'
__name__ = 'product.template'
product = fields.Many2One(
"optical_equipment.maintenance",
"Maintenance Activity",
ondelete="CASCADE",
)
equipment = fields.Boolean(
"It is equipment",
states={
"invisible": Eval("type", "goods") != "goods",
},
)
maintenance_activity = fields.Boolean(
"Maintenance Activity",
states={
"invisible": Eval("type", "service") != "service",
"readonly": If(Eval("equipment", True), True)
| If(Eval("replacement", True), True),
},
)
replacement = fields.Boolean(
"Replacement",
states={
"invisible": Eval("type", "goods") != "goods",
"readonly": If(Eval("equipment", True), True)
| If(Eval("maintenance_activity", True), True),
},
)
maintenance_required = fields.Boolean(
"Miantenance Required",
states={
"invisible": (Eval("type", "goods") != "goods")}
)
equipment_type = fields.Selection(
_EQUIPMENT_TYPE, "Equipment type",
states={"required": Eval("equipment", False)}
)
risk = fields.Selection(_RISK, "Type risk")
use = fields.Selection(
_USE,
"Use",
states={"required": Eval("equipment", False)},
depends={"equipment"},
)
biomedical_class = fields.Selection(
_BIOMEDICAL_CLASS,
"Biomedical Class",
states={"required": Eval("equipment", False)},
)
main_tecnology = fields.Selection(
_MAIN_TECNOLOGY, "Main tecnology",
states={"required": Eval("equipment", False)})
product = fields.Many2One('optical_equipment.maintenance', "Maintenance Activity",
ondelete='CASCADE', select=True)
equipment = fields.Boolean('It is equipment',
states={'invisible': Eval('type', 'goods') != 'goods',
},depends=['type']
)
maintenance_activity = fields.Boolean('Maintenance Activity',
states={'invisible': Eval('type', 'service') != 'service',
'readonly': If(Eval('equipment',True), True)
| If(Eval('replacement',True), True)
},depends=['type']
)
replacement = fields.Boolean('Replacement',
states={'invisible': Eval('type', 'goods') != 'goods',
'readonly': If(Eval('equipment',True), True)
| If(Eval('maintenance_activity',True), True)
},depends=['type']
)
equipment_type = fields.Selection(_EQUIPMENT_TYPE, 'Equipment type',
states={'required': Eval('equipment', False)},
depends=['equipment']
)
risk = fields.Selection(_RISK, 'Type risk')
use = fields.Selection(_USE, 'Use',
states={'required': Eval('equipment', False)},
depends=['equipment']
)
biomedical_class = fields.Selection(_BIOMEDICAL_CLASS,'Biomedical Class',
states={'required': Eval('equipment', False)},
depends=['equipment']
)
main_tecnology = fields.Selection(_MAIN_TECNOLOGY,'Main tecnology',
states={'required': Eval('equipment', False)},
depends=['equipment']
)
calibration = fields.Boolean("Apply calibration")
observation = fields.Text("Observation")
# Mark, Category, Reference
mark_category = fields.Many2One(
"product.category",
"Mark",
domain=[("parent", "=", None), ("accounting", "=", False)],
states={"required": Eval("equipment", False)},
)
model_category = fields.Many2One(
"product.category",
"Model",
domain=[
("parent", "=", Eval("mark_category")),
("accounting", "=", False)],
states={"required": Eval("equipment", False)})
reference_category = fields.Many2One(
"product.category",
"Reference",
states={
"required": (Eval("equipment", True))
},
domain=[("parent", "=", Eval("model_category"))])
# Information Equipment
origin_country = fields.Many2One("country.country", "Origin Country")
refurbish = fields.Boolean("Refurbish")
observation = fields.Text('Observation')
mark_category = fields.Many2One('product.category', 'Mark',
domain=[('parent', '=', None),
('accounting', '=', False)],
states={'required': Eval('equipment', False)},
depends=['equipment']
)
model_category = fields.Many2One('product.category', "Model",
domain=[('parent', '=', Eval('mark_category')),
('accounting', '=', False)],
states={'required': Eval('equipment', False)},
depends=['equipment']
)
reference_category = fields.Many2One('product.category', "Reference",
domain=[('parent', '=', Eval('model_category'))],
)
origin_country = fields.Many2One('country.country',"Origin Country")
refurbish = fields.Boolean('Refurbish')
software_required = fields.Boolean("Software Required")
software_version = fields.Char(
"Software version",
states={"invisible": ~Eval("software_required", True)},
depends={"software_required"},
)
software_version = fields.Char("Software version",
states={'invisible': If(~Eval('software_required'), True)},
depends=['software_required'])
# These are measurements required for the equipments, are in this place
#These are measurements required for the equipments, are in this place
# for manage of class 'product.template'
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': (~Eval('temperature_min', True))}
)
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']
)
frequency = fields.Float("Frequency")
frequency_uom = fields.Many2One(
"product.uom",
"Frequency UOM",
domain=[
("category", "=", Id("optical_equipment", "uom_cat_frequency"))],
states={'invisible': (Eval('frequency', True))})
frequency_uom = fields.Many2One('product.uom', "Frequency UOM",
domain=[('category', '=', Id('optical_equipment', 'uom_cat_frequency'))],
states={'invisible' : If(Eval('frequency') == None, True)},
depends=['frequency']
)
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': (~Eval('moisture_min', True))})
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']
)
electrical_equipment = fields.Boolean("Electrical Equipment")
frequency = fields.Float(
"Frequency", states={"invisible": ~Bool(Eval("electrical_equipment"))}
)
frequency_uom = fields.Many2One(
"product.uom",
"Frequency UOM",
domain=[
("category", "=", Id("optical_equipment", "uom_cat_frequency"))],
states={'invisible': (~Eval('frequency', True))
| ~Eval('electrical_equipment', True)},)
voltageAC = fields.Float(
"Voltage AC", states={"invisible": ~Bool(Eval("electrical_equipment"))}
)
voltageAC_uom = fields.Many2One(
"product.uom",
"Voltage AC UOM",
domain=[
("category", "=", Id(
"optical_equipment", "uom_cat_electrical_tension"))
],
states={'invisible': (~Eval('voltageAC', True))
| ~Eval('electrical_equipment', True)},
)
voltageDC = fields.Float(
"Voltage DC", states={"invisible": ~Bool(Eval("electrical_equipment"))}
)
voltageDC_uom = fields.Many2One(
"product.uom",
"Voltage DC UOM",
domain=[
("category", "=", Id(
"optical_equipment", "uom_cat_electrical_tension"))],
states={'invisible': (
~Eval('voltageDC', True) | ~Eval(
'electrical_equipment', True))},)
frequency = fields.Float("Frequency",
states={'invisible': ~Bool(Eval('electrical_equipment'))})
frequency_uom = fields.Many2One('product.uom', "Frequency UOM",
domain=[('category', '=', Id('optical_equipment', 'uom_cat_frequency'))],
states={'invisible' : If(Eval('frequency') == None, True) |
~Eval('electrical_equipment', True)},
depends=['frequency']
)
voltageAC = fields.Float("Voltage AC",
states={'invisible': ~Bool(Eval('electrical_equipment'))})
voltageAC_uom = fields.Many2One('product.uom', "Voltage AC UOM",
domain=[('category', '=', Id('optical_equipment', 'uom_cat_electrical_tension'))],
states={'invisible' : If(Eval('voltageAC') == None, True) |
~Eval('electrical_equipment', True)},
depends=['voltageAC']
)
voltageDC = fields.Float("Voltage DC",
states={'invisible': ~Bool(Eval('electrical_equipment'))})
voltageDC_uom = fields.Many2One('product.uom', "Voltage DC UOM",
domain=[('category', '=', Id('optical_equipment', 'uom_cat_electrical_tension'))],
states={'invisible' : If(Eval('voltageDC') == None, True) |
~Eval('electrical_equipment', True)},
depends=['voltageDC'])
useful_life = fields.Integer("Useful life")
warranty = fields.Integer("Warranty")
# calibration parameters
use_pattern = fields.Many2One(
"optical_equipment.use_pattern",
"Use Pattern",
ondelete="RESTRICT",
states={"required": Eval("calibration", True)},)
measuring_range = fields.Selection(
[("dioptria", "Dioptria"),
("mmhg", "mmHg")], "Rango de Medición")
MEP = fields.Float(
"MEP",
states={"required": Eval("calibration", False)},)
uncertainy_pattern = fields.Float(
"Uncertainy Pattern",
states={"required": Eval("calibration", True)},
help="Agregar valores separados por ',' Ej:-5,+5,-10,+10",)
k_pattern = fields.Char(
"K Pattern",
states={"required": Eval("calibration", False)},
help="Agregar valores separados por ',' Ej:-5,+5,-10,+10",
)
k_pattern_list = fields.One2Many(
"optical_equipment.product_pattern",
"product",
"List of patterns K",
states={"required": Eval("calibration", False)},
)
resolution_type = fields.Selection(
[("", ""), ("analoga", "Analoga"), ("digital", "Digital")],
"Resolution Type",
states={"required": Eval("calibration", False)},
)
#### calibration parameters
measuring_range = fields.Selection([
('dioptria', "Dioptria"),
('mmhg', "mmHg")], "Rango de Medición")
MEP = fields.Float("MEP", states={'required': Eval('calibration', False)},)
uncertainy_pattern = fields.Float("Uncertainy Pattern", states={'required': Eval('calibration', True)},
help="Agregar valores separados por ',' Ej:-5,+5,-10,+10")
k_pattern = fields.Char("K Pattern",states={'required': Eval('calibration', False)},
help="Agregar valores separados por ',' Ej:-5,+5,-10,+10")
k_pattern_list = fields.One2Many('optical_equipment.product_pattern', 'product', "List of patterns K",
states={'required': Eval('calibration', False)},)
resolution_type = fields.Selection([('',""),
('analoga', "Analoga"),
('digital', "Digital")], "Resolution Type",
states={'required': Eval('calibration', False)},
depends=['calibration'])
d_resolution = fields.Float("Resolution d",
states={'invisible': If(Eval('resolution_type') != 'digital', True)},
depends=['resolution_type'])
analog_resolution = fields.Float("Analog resolution",
states={'invisible': If(Eval('resolution_type') != 'analoga', True),},
depends=['resolution_type'])
a_factor_resolution = fields.Float("(a) Resolution",
states={'invisible': If(Eval('resolution_type') != 'analoga', True)},
depends=['resolution_type'])
Usubi = fields.Integer("Usub i",states={'required': Eval('calibration', False)},)
d_resolution = fields.Float(
"Resolution d",
states={
'invisible': (Eval('resolution_type') != 'digital'),
'required': (Eval('resolution_type') == 'digital')
})
analog_resolution = fields.Float(
"Analog resolution",
states={'invisible': (Eval('resolution_type') != 'analoga'), },
)
a_factor_resolution = fields.Float(
"(a) Resolution",
states={'invisible': (Eval('resolution_type') != 'analoga')},
)
Usubi = fields.Integer("Usub i", states={
"required": Eval("calibration", False)})
# maintenance activities
initial_operation = fields.Boolean(
"Verificación inicial de funcionamiento")
check_equipment = fields.Boolean("Revisión del Equipo")
check_electric_system = fields.Boolean("Revisión del sistema electríco")
clean_int_ext = fields.Boolean("Limpieza interior y exterior")
clean_eyes = fields.Boolean("Limpieza de lentes y espejos")
optical = fields.Boolean("Optical")
check_calibration = fields.Boolean("Verificar Calibración")
# Maintenance activites Preventives
preventive_activities = fields.Text("Preventive Activities")
@classmethod
def view_attributes(cls):
return super(Template, cls).view_attributes() + [
(
"//page[@id='features']",
"states",
{
"invisible": ~Eval("equipment"),
},
),
(
"//page[@id='calibration']",
"states",
{"invisible": ~Eval("calibration")},
),
(
"//page[@id='maintenance_activities']",
"states",
{"invisible": ~Eval("maintenance_required")},
),
]
('//page[@id="features"]', 'states', {
'invisible': ~Eval('equipment'),
}),
('//page[@id="calibration"]', 'states', {
'invisible': ~Eval('calibration')},)
]
@classmethod
@fields.depends("measuring_range")
@fields.depends('measuring_range')
def default_measuring_range(self):
return "dioptria"
return 'dioptria'
@classmethod
@fields.depends("temperature_min")
@fields.depends('temperature_min')
def default_temperature_min(self):
return 0
@classmethod
@fields.depends("temperature_max")
@fields.depends('temperature_max')
def default_temperature_max(self):
return 0
@classmethod
def default_frequency(cls):
@fields.depends('temperature')
def default_temperature_uom(self):
pool = Pool()
Measurements = pool.get('product.uom')
measurement = Measurements.search(['name', '=', 'Celsius'])[0].id
return measurement
@staticmethod
def default_frequency():
return 0
@classmethod
def default_moisture_min(cls):
@staticmethod
def default_frequency_uom():
pool = Pool()
Measurements = pool.get('product.uom')
measurement = Measurements.search(['name', '=', 'Hertz'])[0].id
return measurement
@staticmethod
def default_moisture_min():
return 0
@classmethod
def default_moisture_max(cls):
@staticmethod
def default_moisture_max():
return 0
@classmethod
def default_voltageDC(cls):
@staticmethod
def default_moisture_uom():
pool = Pool()
Measurements = pool.get('product.uom')
measurement = Measurements.search(['name', '=', 'Relative Humedity'])[0].id
return measurement
@staticmethod
def default_voltageAC():
return 0
@classmethod
def default_voltageAC(cls):
@staticmethod
def default_voltageAC_uom():
pool = Pool()
Measurements = pool.get('product.uom')
measurement = Measurements.search(['name', '=', 'Volt'])[0].id
return measurement
@staticmethod
def default_voltageDC():
return 0
@fields.depends('voltageDC', 'voltageDC_uom')
def on_change_voltageDC_uom(self):
pool = Pool()
Measurements = pool.get('product.uom')
measurement = Measurements.search(['name', '=', 'Volt'])[0].id
self.voltageDC_uom = measurement
@staticmethod
def default_risk():
return "n/a"
return 'n/a'
@staticmethod
def default_use():
return None
@staticmethod
def default_biomedical_class():
return "n/a"
return 'n/a'
@staticmethod
def default_main_tecnology():
return None
@staticmethod
def default_calibration():
return False
@staticmethod
def default_refurbish():
return False
@classmethod
@fields.depends("temperature")
def default_temperature_uom(self):
pool = Pool()
Measurements = pool.get("product.uom")
measurement = Measurements.search(["name", "=", "Celsius"])[0].id
@staticmethod
def default_refurbish():
return False
return measurement
@classmethod
def default_frequency_uom(cls):
pool = Pool()
Measurements = pool.get("product.uom")
measurement = Measurements.search(["name", "=", "Hertz"])[0].id
@fields.depends('software_required', 'software_version')
def on_change_with_sotfware_required(self):
self.software_version = None
return measurement
@classmethod
def default_moisture_uom(cls):
pool = Pool()
Measurements = pool.get("product.uom")
measurement = Measurements.search(
["name", "=", "Relative Humedity"])[0].id
return measurement
@classmethod
def default_voltageAC_uom(cls):
pool = Pool()
Measurements = pool.get("product.uom")
measurement = Measurements.search(["name", "=", "Volt"])[0].id
return measurement
@classmethod
def default_voltageDC_uom(cls):
pool = Pool()
Measurements = pool.get("product.uom")
measurement = Measurements.search(["name", "=", "Volt"])[0].id
return measurement
@fields.depends("voltageDC", "voltageDC_uom")
def on_change_voltageDC_uom(self):
pool = Pool()
Measurements = pool.get("product.uom")
measurement = Measurements.search(["name", "=", "Volt"])[0].id
self.voltageDC_uom = measurement
# @fields.depends('software_required', 'software_version')
# def on_change_with_sotfware_required(self):
# self.software_version = None
@fields.depends("d_resolution", "analog_resolution", "a_factor_resolution")
@fields.depends('d_resolution', 'analog_resolution', 'a_factor_resolution')
def on_change_resolution_type(self):
self.d_resolution = None
self.analog_resolution = None
self.a_factor_resolution = None
@fields.depends("equipment", "replacement")
@fields.depends('equipment', 'replacement')
def on_change_equipment(self):
if self.equipment:
self.replacement = False
self.maintenance_activity = False
self.calibration = False
self.mark_category = None
self.model_category = None
self.reference_category = None
self.equipment_type = None
self.risk = "n/a"
self.biomedical_class = "n/a"
self.use = ""
self.useful_life = 0
self.warranty = 0
self.replacement=False
self.maintenance_activity=False
self.calibration=False
@fields.depends("mark_category", "model_category", "reference_category")
@fields.depends('mark_category', 'model_category', 'reference_category')
def on_change_mark_category(self):
if not self.mark_category:
self.model_category = None
self.reference_category = None
@fields.depends("model_category", "reference_category")
@fields.depends('model_category', 'reference_category')
def on_change_model_category(self):
if not self.model_category:
self.reference_category = None
@fields.depends("electrical_equipment")
@fields.depends('electrical_equipment')
def on_change_electrical_equipment(self):
if self.electrical_equipment:
self.voltageAC = 0
self.voltageDC = 0
self.frequency = 0
@classmethod
def copy(cls, templates, default=None):
if default is None:
default = {}
else:
default = default.copy()
default.setdefault("code", None)
default.setdefault("images", None)
return super().copy(templates, default=default)
class Product(metaclass=PoolMeta):
__name__ = "product.product"
@classmethod
def copy(cls, products, default=None):
if default is None:
default = {}
else:
default = default.copy()
default.setdefault("suffix_code", None)
default.setdefault("code", None)
default.setdefault("poduct", None)
default.setdefault("images", None)
return super().copy(products, default=default)
class Image(metaclass=PoolMeta):
__name__ = "product.image"
@classmethod
def __setup__(cls):
super().__setup__()
@classmethod
def copy(cls, images, default=None):
if default is None:
default = {}
else:
default = default.copy()
default.setdefault("template", None)
default.setdefault("product", None)
return super().copy(images, default=default)
class UsePattern(ModelSQL, ModelView):
"Use Pattern"
__name__ = "optical_equipment.use_pattern"
_rec_name = "name_pattern"
name_pattern = fields.Char("Name Pattern", required=True)
__name__ = 'product.product'
class Pattern(ModelSQL, ModelView):
"Pattern K of equipment"
__name__ = "optical_equipment.product_pattern"
_rec_name = "rec_name"
__name__ = 'optical_equipment.product_pattern'
_rec_name = 'pattern'
product = fields.Many2One(
"product.template", "Template", ondelete="CASCADE")
product = fields.Many2One('product.template', "Template", ondelete='CASCADE')
pattern = fields.Float("Value Pattern")
rec_name = fields.Function(fields.Char("rec_name"), "get_rec_name")
@fields.depends("pattern")
def get_rec_name(self, name):
if self.pattern:
return str(self.pattern)

View File

@@ -3,53 +3,16 @@
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.action.act_window" id="act_use_pattern">
<field name="name">Use Pattern</field>
<field name="res_model">optical_equipment.use_pattern</field>
</record>
<record model="ir.ui.view" id="use_pattern_view_tree">
<field name="model">optical_equipment.use_pattern</field>
<field name="type">tree</field>
<field name="name">use_pattern_tree</field>
</record>
<record model="ir.ui.view" id="use_pattern_view_form">
<field name="model">optical_equipment.use_pattern</field>
<field name="type">form</field>
<field name="name">use_pattern_form</field>
</record>
<record model="ir.action.act_window.view" id="act_use_pattern_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="use_pattern_view_tree"/>
<field name="act_window" ref="act_use_pattern"/>
</record>
<record model="ir.action.act_window.view" id="act_use_pattern_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="use_pattern_view_form"/>
<field name="act_window" ref="act_use_pattern"/>
</record>
<menuitem
name="Properties of Equipments"
parent="product.menu_configuration"
sequence="10"
id="menu_properties_equipments"
icon="tryton-settings"/>
<menuitem
parent="menu_properties_equipments"
name="Pattern Use"
action="act_use_pattern"
sequence="10"
id="menu_pattern"
icon="tryton-list"/>
<record model="ir.ui.view" id="template_view_form1">
<field name="model">product.template</field>
<field name="inherit" ref="product.template_view_form"/>
<field name="name">template_form</field>
</record>
<!-- <record model="ir.ui.view" id="template_view_tree1"> -->
<!-- <field name="model">product.template</field> -->
<!-- <field name="inherit" ref="product.template_view_tree"/> -->
<!-- <field name="name">template_tree</field> -->
<!-- </record> -->
<record model="ir.ui.view" id="template_view_tree1">
<field name="model">product.template</field>
<field name="inherit" ref="product.template_view_tree"/>
<field name="name">template_tree</field>
</record>
<record model="ir.ui.view" id="pattern_view_form">
<field name="model">optical_equipment.product_pattern</field>
<field name="type">form</field>
@@ -60,19 +23,5 @@
<field name="type">tree</field>
<field name="name">pattern_tree</field>
</record>
<!--Patterns use-->
<record model="optical_equipment.use_pattern" id="schematic_eye">
<field name="name_pattern">Schematic Eye</field>
</record>
<record model="optical_equipment.use_pattern" id="trial_lens">
<field name="name_pattern">Trial Lens</field>
</record>
<record model="optical_equipment.use_pattern" id="calibration_weights">
<field name="name_pattern">Calibration Weights</field>
</record>
<record model="optical_equipment.use_pattern" id="calibration_spheres">
<field name="name_pattern">Calibration Spheres</field>
</record>
</data>
</tryton>

View File

@@ -1,16 +1,19 @@
# 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 file is part of Tryton. The COPYRIGHT file at the top level of
#txhis repository contains the full copyright notices and license terms
from trytond.pool import Pool, PoolMeta
from trytond.model import ModelView, fields
from trytond.modules.product import round_price
from trytond.model import (
ModelView, ModelSQL, Workflow, fields)
from trytond.modules.product import price_digits, round_price
from trytond.pyson import Eval, If, Bool
from trytond.exceptions import UserError
from trytond.i18n import gettext
from .exceptions import (
InvalidNumberPurchases)
from trytond.transaction import Transaction
class Purchase(metaclass=PoolMeta):
"Purchase Equipment"
__name__ = "purchase.purchase"
__name__ = 'purchase.purchase'
equipment_create = fields.Boolean("Equipments Creates", readonly=True)
@@ -18,124 +21,89 @@ class Purchase(metaclass=PoolMeta):
def __setup__(cls):
super(Purchase, cls).__setup__()
cls._buttons.update({
"create_equipments": {
"invisible": If(Eval("invoice_state") == "none", True)
| If(Bool(Eval("equipment_create")), True),
"depends": ["invoice_state"]}
'create_equipments': {
'invisible': If(Eval('invoice_state') == 'none', True) |
If(Bool(Eval('equipment_create')), True),
'depends': ['invoice_state'],}
})
@classmethod
def copy(cls, purchases, default=None):
if default is None:
default = {}
else:
default = default.copy()
default.setdefault("number", None)
default.setdefault("invoice_state", "none")
default.setdefault("invoices_ignored", None)
default.setdefault("moves", None)
default.setdefault("shipment_state", "none")
default.setdefault("purchase_date", None)
default.setdefault("quoted_by")
default.setdefault("confirmed_by")
default.setdefault("equipment_create", None)
return super(Purchase, cls).copy(purchases, default=default)
@classmethod
@ModelView.button
def create_equipments(cls, purchases):
if len(purchases) == 1:
pool = Pool()
Equipment = pool.get("optical_equipment.equipment")
Equipment = pool.get('optical_equipment.equipment')
Config = pool.get('optical_equipment.configuration')
config = Config(1)
purchase = purchases[0]
for line in purchase.lines:
if not line.product.equipment:
if line.product.equipment:
for i in range(0,int(line.quantity)):
equipment = Equipment(
company=line.company,
location=line.to_location,
equipment_type=line.product.equipment_type,
propietary=line.company.party,
propietary_address=line.address_equipment,
product=line.product,
model_category=line.product.model_category,
mark_category=line.product.mark_category,
reference_category=line.product.reference_category,
useful_life=line.product.useful_life if line.product.useful_life else 0,
calibration=True if line.product.calibration else False,
warranty=line.product.warranty if line.product.warranty else 0,
risk=line.product.risk,
origin_country=line.product.origin_country,
use=line.product.use,
biomedical_class=line.product.biomedical_class,
refurbish=line.refurbish,
serial=None if line.quantity > 1 else line.serial_equipment,
health_register=line.health_register,
software_version=line.product.software_version if line.product.software_required else "No Aplica",
maintenance_frequency="none",
purchase_origin=line,
)
equipment.save()
else:
continue
for i in range(0, int(line.quantity)):
equipment = Equipment(
company=line.company,
location=line.to_location,
equipment_type=line.product.equipment_type,
propietary=line.company.party,
propietary_address=line.address_equipment,
product=line.product,
model_category=line.product.model_category,
mark_category=line.product.mark_category,
reference_category=line.product.reference_category,
useful_life=(
line.product.useful_life if
line.product.useful_life else 0
),
calibration=(
True if line.product.calibration
else False),
warranty=(
line.product.warranty if
line.product.warranty else 0),
risk=line.product.risk,
origin_country=line.product.origin_country,
use=line.product.use,
biomedical_class=line.product.biomedical_class,
refurbish=line.refurbish,
serial=(None if line.quantity > 1
else line.serial_equipment),
health_register=line.health_register,
software_version=(
line.product.software_version
if line.product.software_required
else "No Aplica"
),
maintenance_frequency="none",
purchase_origin=line,
)
equipment.save()
purchase.equipment_create = True
cls.save(purchases)
else:
raise UserError(str("Número de Compras Invalido."))
raise InvalidNumberPurchases(
gettext('purchase.msg_invalid_number_purchases'))
class Line(metaclass=PoolMeta):
"Purchase Line Equipment"
__name__ = "purchase.line"
__name__ = 'purchase.line'
origin_country = fields.Many2One("country.country", "Origin Country")
address_equipment = fields.Many2One(
"party.address", "Direccion", required=True)
serial_equipment = fields.Char(
"Serial",
size=None,
# states={'invisible': Decimal(Eval('quantity')) > 1}
)
origin_country = origin_country = fields.Many2One('country.country',"Origin Country")
address_equipment = fields.Many2One('party.address', "Direccion", required=True)
serial_equipment = fields.Char("Serial", size=None,
states={'invisible': If(Eval('quantity') > 1, True),
},depends=['quantity'])
refurbish = fields.Boolean("Refurbish")
product_equipment = fields.Boolean(
"Product Equipment", states={"readonly": True})
product_equipment = fields.Boolean("Product Equipment",
states={'readonly': True})
software_version = fields.Char("Software version")
health_register = fields.Char(
"Health Register", states={"required": Eval("product_equipment", True)}
)
health_register = fields.Char("Health Register", states={'required': Eval('product_equipment', True)})
@classmethod
def default_address_equipment(cls):
pool = Pool()
Company = pool.get("company.company")
company = Transaction().context.get("company")
Company = pool.get('company.company')
company = Transaction().context.get('company')
if company:
company = Company(company)
return company.party.addresses[0].id
@fields.depends(
"product", "quantity", methods=["_get_context_purchase_price"])
'product', 'quantity', methods=['_get_context_purchase_price'])
def on_change_quantity(self):
Product = Pool().get("product.product")
if self.quantity and (self.quantity > 1 or self.quantity < 1):
Product = Pool().get('product.product')
if self.quantity > 1 or self.quantity < 1:
self.serial_equipment = None
if not self.product:
@@ -143,29 +111,18 @@ class Line(metaclass=PoolMeta):
return
with Transaction().set_context(self._get_context_purchase_price()):
self.unit_price = Product.get_purchase_price(
[self.product], abs(self.quantity or 0)
)[self.product.id]
self.unit_price = Product.get_purchase_price([self.product],
abs(self.quantity or 0))[self.product.id]
if self.unit_price:
self.unit_price = round_price(self.unit_price)
@fields.depends(
"product",
"unit",
"purchase",
"_parent_purchase.party",
"_parent_purchase.invoice_party",
"product_supplier",
"product_equipment",
"serial_equipment",
"software_version",
"health_register",
"refurbish",
methods=[
"compute_taxes",
"compute_unit_price",
"_get_product_supplier_pattern",])
@fields.depends('product', 'unit', 'purchase',
'_parent_purchase.party', '_parent_purchase.invoice_party',
'product_supplier', 'product_equipment',
'serial_equipment', 'software_version',
'health_register', 'refurbish', methods=['compute_taxes', 'compute_unit_price',
'_get_product_supplier_pattern'])
def on_change_product(self):
if not self.product:
self.product_equipment = False
@@ -178,6 +135,7 @@ class Line(metaclass=PoolMeta):
self.unit_price = None
self.unit = None
return
party = None
@@ -191,19 +149,17 @@ class Line(metaclass=PoolMeta):
if not self.unit or self.unit.category != category:
self.unit = self.product.purchase_uom
product_suppliers = list(
self.product.product_suppliers_used(
**self._get_product_supplier_pattern())
)
product_suppliers = list(self.product.product_suppliers_used(
**self._get_product_supplier_pattern()))
if len(product_suppliers) == 1:
(self.product_supplier,) = product_suppliers
self.product_supplier, = product_suppliers
elif (self.product_supplier
and self.product_supplier not in product_suppliers):
and self.product_supplier not in product_suppliers):
self.product_supplier = None
self.unit_price = self.compute_unit_price()
self.type = "line"
self.type = 'line'
self.amount = self.on_change_with_amount()
if self.product.equipment:
self.product_equipment = True
@@ -214,7 +170,6 @@ class Line(metaclass=PoolMeta):
@classmethod
def view_attributes(cls):
return super(Line, cls).view_attributes() + [
('//page[@id="equipment"]', "states",
{
"invisible": ~Eval("product_equipment", True),
})]
('//page[@id="equipment"]', 'states', {
'invisible': ~Eval('product_equipment', True),
})]

View File

@@ -3,29 +3,21 @@
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="purchase_line_view_form">
<field name="model">purchase.line</field>
<field name="inherit" ref="purchase.purchase_line_view_form"/>
<field name="name">purchase_line_form</field>
</record>
<record model="ir.ui.view" id="purchase_view_form">
<field name="model">purchase.purchase</field>
<field name="inherit" ref="purchase.purchase_view_form"/>
<field name="name">purchase_form</field>
</record>
<record model="ir.ui.view" id="purchase_line_view_form">
<field name="model">purchase.line</field>
<field name="inherit" ref="purchase.purchase_line_view_form"/>
<field name="name">purchase_line_form</field>
</record>
<record model="ir.ui.view" id="product_view_list_purchase_line">
<field name="model">product.product</field>
<field name="inherit" ref="purchase.product_view_list_purchase_line"/>
<field name="name">product_list_purchase_line</field>
</record>
<record model="ir.model.button" id="purchase_create_equipments">
<field name="name">create_equipments</field>
<field name="string">Create Equipments</field>
<field name="model" search="[('model', '=', 'purchase.purchase')]"/>
</record>
<record model="ir.action.report" id="purchase.report_purchase">
<field name="active" eval="False"/>
</record>
<record model="ir.action.report" id="report_purchase">
<field name="name">Purchase</field>
<field name="model">purchase.purchase</field>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,31 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
<office:meta><meta:creation-date>2022-10-11T22:48:50.834615710</meta:creation-date><dc:date>2023-03-21T02:20:13.029306157</dc:date><meta:editing-duration>PT2H31M31S</meta:editing-duration><meta:editing-cycles>26</meta:editing-cycles><meta:generator>LibreOffice/7.4.5.1$Linux_X86_64 LibreOffice_project/40$Build-1</meta:generator><meta:document-statistic meta:table-count="1" meta:image-count="1" meta:object-count="0" meta:page-count="1" meta:paragraph-count="20" meta:word-count="166" meta:character-count="1296" meta:non-whitespace-character-count="1147"/></office:meta>
<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
<office:meta><meta:creation-date>2022-10-11T22:48:50.834615710</meta:creation-date><dc:date>2022-11-02T06:41:23.280743489</dc:date><meta:editing-duration>PT1H28M15S</meta:editing-duration><meta:editing-cycles>22</meta:editing-cycles><meta:generator>LibreOffice/7.3.6.2$Linux_X86_64 LibreOffice_project/30$Build-2</meta:generator><meta:document-statistic meta:table-count="1" meta:image-count="1" meta:object-count="0" meta:page-count="1" meta:paragraph-count="19" meta:word-count="165" meta:character-count="1343" meta:non-whitespace-character-count="1193"/></office:meta>
<office:settings>
<config:config-item-set config:name="ooo:view-settings">
<config:config-item config:name="ViewAreaTop" config:type="long">1376</config:config-item>
<config:config-item config:name="ViewAreaTop" config:type="long">2646</config:config-item>
<config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
<config:config-item config:name="ViewAreaWidth" config:type="long">24502</config:config-item>
<config:config-item config:name="ViewAreaHeight" config:type="long">10982</config:config-item>
<config:config-item config:name="ViewAreaWidth" config:type="long">22294</config:config-item>
<config:config-item config:name="ViewAreaHeight" config:type="long">8684</config:config-item>
<config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
<config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
<config:config-item-map-indexed config:name="Views">
<config:config-item-map-entry>
<config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
<config:config-item config:name="ViewLeft" config:type="long">19098</config:config-item>
<config:config-item config:name="ViewTop" config:type="long">4053</config:config-item>
<config:config-item config:name="ViewLeft" config:type="long">2501</config:config-item>
<config:config-item config:name="ViewTop" config:type="long">6008</config:config-item>
<config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
<config:config-item config:name="VisibleTop" config:type="long">1376</config:config-item>
<config:config-item config:name="VisibleRight" config:type="long">24500</config:config-item>
<config:config-item config:name="VisibleBottom" config:type="long">12356</config:config-item>
<config:config-item config:name="VisibleTop" config:type="long">2646</config:config-item>
<config:config-item config:name="VisibleRight" config:type="long">22292</config:config-item>
<config:config-item config:name="VisibleBottom" config:type="long">11328</config:config-item>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
<config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
<config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
<config:config-item config:name="ZoomFactor" config:type="short">200</config:config-item>
<config:config-item config:name="ZoomFactor" config:type="short">160</config:config-item>
<config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
<config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
<config:config-item config:name="HideWhitespace" config:type="boolean">false</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-indexed>
@@ -56,7 +55,6 @@
<config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
<config:config-item config:name="WordLikeWrapForAsCharFlys" config:type="boolean">false</config:config-item>
<config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
<config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
<config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
@@ -84,14 +82,13 @@
<config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
<config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
<config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
<config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">false</config:config-item>
<config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
<config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
<config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
<config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
<config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
<config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
<config:config-item config:name="Rsid" config:type="int">2486454</config:config-item>
<config:config-item config:name="Rsid" config:type="int">2237446</config:config-item>
<config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
<config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
<config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
@@ -105,7 +102,6 @@
<config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
<config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
<config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
<config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
<config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
<config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
@@ -113,7 +109,6 @@
<config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
<config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
<config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
<config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
<config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
<config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
@@ -159,20 +154,18 @@
<style:font-face style:name="Noto Sans Bengali Light" svg:font-family="&apos;Noto Sans Bengali Light&apos;" style:font-adornments="Light" style:font-family-generic="swiss" style:font-pitch="variable"/>
<style:font-face style:name="Open Sans Condensed" svg:font-family="&apos;Open Sans Condensed&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
<style:font-face style:name="Source Han Sans CN" svg:font-family="&apos;Source Han Sans CN&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/>
<style:font-face style:name="Verdana" svg:font-family="Verdana" style:font-family-generic="roman" style:font-pitch="variable"/>
</office:font-face-decls>
<office:styles>
<style:default-style style:family="graphic">
<style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in" draw:start-line-spacing-horizontal="0.1114in" draw:start-line-spacing-vertical="0.1114in" draw:end-line-spacing-horizontal="0.1114in" draw:end-line-spacing-vertical="0.1114in" style:flow-with-text="false"/>
<style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
<style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
<style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
<style:tab-stops/>
</style:paragraph-properties>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" loext:color-lum-mod="100%" loext:color-lum-off="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="es" fo:country="CO" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="es" fo:country="CO" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
</style:default-style>
<style:default-style style:family="paragraph">
<style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.4925in" style:writing-mode="page"/>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="es" fo:country="CO" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
<style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="es" fo:country="CO" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
</style:default-style>
<style:default-style style:family="table">
<style:table-properties table:border-model="collapsing"/>
@@ -182,17 +175,17 @@
</style:default-style>
<style:style style:name="Standard" style:family="paragraph" style:class="text"/>
<style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
<style:paragraph-properties fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" fo:keep-with-next="always"/>
<style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
<style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Source Han Sans CN" style:font-family-asian="&apos;Source Han Sans CN&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Droid Sans Devanagari1" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
</style:style>
<style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0972in" style:contextual-spacing="false" fo:line-height="115%"/>
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" style:contextual-spacing="false" fo:line-height="115%"/>
</style:style>
<style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
<style:text-properties style:font-size-asian="12pt" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss"/>
</style:style>
<style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties fo:margin-top="0.0835in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
<style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
<style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/>
</style:style>
<style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
@@ -202,75 +195,27 @@
<style:style style:name="Header_20_and_20_Footer" style:display-name="Header and Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties text:number-lines="false" text:line-number="0">
<style:tab-stops>
<style:tab-stop style:position="3.4626in" style:type="center"/>
<style:tab-stop style:position="6.9252in" style:type="right"/>
<style:tab-stop style:position="8.795cm" style:type="center"/>
<style:tab-stop style:position="17.59cm" style:type="right"/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="Header" style:family="paragraph" style:parent-style-name="Header_20_and_20_Footer" style:class="extra">
<style:paragraph-properties text:number-lines="false" text:line-number="0">
<style:tab-stops>
<style:tab-stop style:position="3.4626in" style:type="center"/>
<style:tab-stop style:position="6.9252in" style:type="right"/>
<style:tab-stop style:position="8.795cm" style:type="center"/>
<style:tab-stop style:position="17.59cm" style:type="right"/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties fo:orphans="0" fo:widows="0" text:number-lines="false" text:line-number="0"/>
</style:style>
<style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties text:number-lines="false" text:line-number="0">
<style:tab-stops>
<style:tab-stop style:position="3.4626in" style:type="center"/>
<style:tab-stop style:position="6.9252in" style:type="right"/>
</style:tab-stops>
</style:paragraph-properties>
<style:text-properties fo:font-size="9pt" style:font-size-asian="10.5pt"/>
</style:style>
<style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Standard" style:default-outline-level="1" style:list-style-name="" style:class="text">
<style:paragraph-properties fo:keep-with-next="always"/>
<style:text-properties style:font-name="Verdana" fo:font-family="Verdana" style:font-family-generic="roman" style:font-pitch="variable" fo:language="es" fo:country="MX" fo:font-weight="bold" style:language-asian="es" style:country-asian="MX" style:font-weight-asian="bold"/>
</style:style>
<style:style style:name="Table_20_Heading" style:display-name="Table Heading" style:family="paragraph" style:parent-style-name="Table_20_Contents" style:class="extra">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false" text:number-lines="false" text:line-number="0"/>
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text">
<style:text-properties fo:font-size="14pt" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="14pt" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-style-complex="italic" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Frame_20_contents" style:display-name="Frame contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"/>
<style:style style:name="Text" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
<style:style style:name="Subtitle" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="chapter">
<style:paragraph-properties fo:margin-top="0.0417in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-size="18pt" style:font-size-asian="18pt" style:font-size-complex="18pt"/>
</style:style>
<style:style style:name="Title" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="chapter">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-size="28pt" fo:font-weight="bold" style:font-size-asian="28pt" style:font-weight-asian="bold" style:font-size-complex="28pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Quotations" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
<style:paragraph-properties fo:margin-left="0.3937in" fo:margin-right="0.3937in" fo:margin-top="0in" fo:margin-bottom="0.1965in" style:contextual-spacing="false" fo:text-indent="0in" style:auto-text-indent="false"/>
</style:style>
<style:style style:name="Text_20_body_20_indent" style:display-name="Text body indent" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="text">
<style:paragraph-properties fo:margin-left="0.1965in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
</style:style>
<style:style style:name="Heading_20_3" style:display-name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text">
<style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Placeholder" style:family="text">
<style:text-properties fo:font-variant="small-caps" fo:color="#008080" loext:opacity="100%" style:text-underline-style="dotted" style:text-underline-width="auto" style:text-underline-color="font-color"/>
</style:style>
<style:style style:name="Internet_20_link" style:display-name="Internet link" style:family="text">
<style:text-properties fo:color="#000080" loext:opacity="100%" fo:language="zxx" fo:country="none" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" style:language-asian="zxx" style:country-asian="none" style:language-complex="zxx" style:country-complex="none"/>
</style:style>
<style:style style:name="Bullet_20_Symbols" style:display-name="Bullet Symbols" style:family="text">
<style:text-properties style:font-name="StarSymbol" fo:font-family="StarSymbol" fo:font-size="9pt" style:font-name-asian="StarSymbol" style:font-family-asian="StarSymbol" style:font-size-asian="9pt" style:font-name-complex="StarSymbol" style:font-family-complex="StarSymbol" style:font-size-complex="9pt"/>
</style:style>
<style:style style:name="Graphics" style:family="graphic">
<style:graphic-properties text:anchor-type="paragraph" svg:x="0in" svg:y="0in" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
</style:style>
<style:style style:name="Frame" style:family="graphic">
<style:graphic-properties text:anchor-type="paragraph" svg:x="0in" svg:y="0in" fo:margin-left="0.0791in" fo:margin-right="0.0791in" fo:margin-top="0.0791in" fo:margin-bottom="0.0791in" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:padding="0.0591in" fo:border="0.06pt solid #000000"/>
<style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
</style:style>
<text:outline-style style:name="Outline">
<text:outline-level-style text:level="1" loext:num-list-format="%1%" style:num-format="">
@@ -326,131 +271,200 @@
</text:outline-style>
<text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
<text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
<text:linenumbering-configuration text:number-lines="false" text:offset="0.1965in" style:num-format="1" text:number-position="left" text:increment="5"/>
<number:currency-style style:name="N122P0" style:volatile="true">
<text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
<number:currency-style style:name="N108P0" style:volatile="true">
<number:currency-symbol number:language="es" number:country="CO">$</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N122">
<number:currency-style style:name="N108">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:currency-symbol number:language="es" number:country="CO">$</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()&gt;=0" style:apply-style-name="N122P0"/>
<style:map style:condition="value()&gt;=0" style:apply-style-name="N108P0"/>
</number:currency-style>
</office:styles>
<office:automatic-styles>
<style:style style:name="Tabla6" style:family="table">
<style:table-properties style:width="6.925in" table:align="margins"/>
<style:table-properties style:width="17.59cm" table:align="margins"/>
</style:style>
<style:style style:name="Tabla6.A" style:family="table-column">
<style:table-column-properties style:column-width="3.4625in" style:rel-column-width="32767*"/>
<style:table-column-properties style:column-width="8.795cm" style:rel-column-width="32767*"/>
</style:style>
<style:style style:name="Tabla6.B" style:family="table-column">
<style:table-column-properties style:column-width="3.4625in" style:rel-column-width="32768*"/>
<style:table-column-properties style:column-width="8.795cm" style:rel-column-width="32768*"/>
</style:style>
<style:style style:name="Tabla6.A1" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border="none"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border="none"/>
</style:style>
<style:style style:name="Tabla6" style:family="table">
<style:table-properties style:width="6.925in" table:align="margins"/>
<style:table-properties style:width="17.59cm" table:align="margins"/>
</style:style>
<style:style style:name="Tabla6.A" style:family="table-column">
<style:table-column-properties style:column-width="3.4625in" style:rel-column-width="32767*"/>
<style:table-column-properties style:column-width="8.795cm" style:rel-column-width="32767*"/>
</style:style>
<style:style style:name="Tabla6.B" style:family="table-column">
<style:table-column-properties style:column-width="3.4625in" style:rel-column-width="32768*"/>
<style:table-column-properties style:column-width="8.795cm" style:rel-column-width="32768*"/>
</style:style>
<style:style style:name="Tabla6.A1" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border="none"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border="none"/>
</style:style>
<style:style style:name="P1" style:family="paragraph" style:parent-style-name="Header">
<style:text-properties officeooo:paragraph-rsid="001a6461"/>
</style:style>
<style:style style:name="P2" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:text-properties officeooo:paragraph-rsid="001a6461"/>
<style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Open Sans Condensed" fo:font-size="9pt" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="9pt" style:font-size-complex="9pt"/>
</style:style>
<style:style style:name="P3" style:family="paragraph" style:parent-style-name="Header">
<style:text-properties officeooo:paragraph-rsid="001a6461"/>
</style:style>
<style:style style:name="P4" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties officeooo:paragraph-rsid="001a6461"/>
</style:style>
<style:style style:name="P5" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:text-properties officeooo:paragraph-rsid="001a6461"/>
</style:style>
<style:style style:name="P6" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Open Sans Condensed" fo:font-size="9pt" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="9pt" style:font-size-complex="9pt"/>
</style:style>
<style:style style:name="P7" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Open Sans Condensed" fo:font-size="9pt" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="9pt" style:font-weight-asian="bold" style:font-size-complex="9pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P8" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Open Sans Condensed" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461"/>
</style:style>
<style:style style:name="P9" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Open Sans Condensed" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a7e84" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P10" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Open Sans Condensed" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P11" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-variant="normal" fo:text-transform="none" fo:color="#000000" loext:opacity="100%" style:text-line-through-style="none" style:text-line-through-type="none" style:text-position="0% 100%" style:font-name="Open Sans Condensed" fo:font-size="10.5pt" fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:paragraph-rsid="001a6461" style:font-name-asian="Calibri" style:font-size-asian="10.5pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="10.5pt" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="P12" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-variant="normal" fo:text-transform="none" fo:color="#000000" loext:opacity="100%" style:text-line-through-style="none" style:text-line-through-type="none" style:text-position="0% 100%" style:font-name="Noto Sans Bengali Light" fo:font-size="10pt" fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:paragraph-rsid="001a6461" style:font-name-asian="Calibri" style:font-size-asian="10pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="10pt" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="P13" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-variant="normal" fo:text-transform="none" fo:color="#000000" loext:opacity="100%" style:text-line-through-style="none" style:text-line-through-type="none" style:text-position="0% 100%" style:font-name="Droid Sans Japanese1" fo:font-size="7pt" fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:paragraph-rsid="001a6461" style:font-name-asian="Calibri" style:font-size-asian="7pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="7pt" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="P4" style:family="paragraph" style:parent-style-name="Header">
<style:style style:name="P14" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-variant="normal" fo:text-transform="none" fo:color="#000000" loext:opacity="100%" style:text-line-through-style="none" style:text-line-through-type="none" style:text-position="0% 100%" style:font-name="Droid Sans Japanese1" fo:font-size="7pt" fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:paragraph-rsid="00203a45" style:font-name-asian="Calibri" style:font-size-asian="7pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="7pt" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="P5" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Open Sans Condensed" fo:font-size="9pt" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="9pt" style:font-size-complex="9pt"/>
<style:style style:name="P15" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
</style:style>
<style:style style:name="P6" style:family="paragraph" style:parent-style-name="Header">
<style:text-properties officeooo:paragraph-rsid="001a6461"/>
<style:style style:name="P16" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.011cm" style:contextual-spacing="false" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="12pt" fo:font-weight="bold" officeooo:rsid="001cd488" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P7" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:text-properties officeooo:paragraph-rsid="001a6461"/>
<style:style style:name="P17" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="9pt" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="9pt" style:font-weight-asian="bold" style:font-size-complex="9pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P8" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Open Sans Condensed" fo:font-size="9pt" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="9pt" style:font-size-complex="9pt"/>
<style:style style:name="P18" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="9pt" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="9pt" style:font-size-complex="9pt"/>
</style:style>
<style:style style:name="P9" style:family="paragraph" style:parent-style-name="Standard">
<style:style style:name="P19" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461"/>
</style:style>
<style:style style:name="P10" style:family="paragraph" style:parent-style-name="Standard">
<style:style style:name="P20" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="10pt" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
</style:style>
<style:style style:name="P21" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="10pt" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a7e84" style:font-size-asian="10pt" style:font-weight-asian="bold" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P22" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="10pt" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461" style:font-size-asian="10pt" style:font-weight-asian="bold" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P23" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P11" style:family="paragraph" style:parent-style-name="Standard">
<style:style style:name="P24" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P25" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P12" style:family="paragraph" style:parent-style-name="Standard">
<style:style style:name="P26" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"/>
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P13" style:family="paragraph" style:parent-style-name="Standard">
<style:style style:name="P27" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a7e84" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P14" style:family="paragraph" style:parent-style-name="Standard">
<style:style style:name="P28" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001a6461" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P15" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:margin-top="0in" fo:margin-bottom="0.0043in" style:contextual-spacing="false" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Droid Sans Japanese" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="001b9ac0" officeooo:paragraph-rsid="0024622d" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-name-complex="Arial" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
<style:style style:name="P29" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P16" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Droid Sans Japanese" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="000cde7f" officeooo:paragraph-rsid="0024622d" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
<style:style style:name="P30" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.011cm" style:contextual-spacing="false" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="001b9ac0" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-name-complex="Arial" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P17" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Droid Sans Japanese" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="001a6461" officeooo:paragraph-rsid="001e3f46" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P18" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:margin-top="0in" fo:margin-bottom="0.0043in" style:contextual-spacing="false" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:text-properties style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Droid Sans Japanese" fo:font-size="8pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="bold" officeooo:rsid="000cde7f" officeooo:paragraph-rsid="0024622d" style:font-size-asian="8pt" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-name-complex="Arial" style:font-size-complex="8pt" style:font-weight-complex="bold" style:text-emphasize="none"/>
</style:style>
<style:style style:name="P19" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-variant="normal" fo:text-transform="none" fo:color="#000000" loext:opacity="100%" style:text-line-through-style="none" style:text-line-through-type="none" style:text-position="0% 100%" style:font-name="Droid Sans Japanese1" fo:font-size="7pt" fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:paragraph-rsid="001a6461" style:font-name-asian="Calibri" style:font-size-asian="7pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="7pt" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="P20" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-variant="normal" fo:text-transform="none" fo:color="#000000" loext:opacity="100%" style:text-line-through-style="none" style:text-line-through-type="none" style:text-position="0% 100%" style:font-name="Droid Sans Japanese1" fo:font-size="7pt" fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:paragraph-rsid="00203a45" style:font-name-asian="Calibri" style:font-size-asian="7pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="7pt" style:font-weight-complex="normal"/>
<style:style style:name="P31" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.011cm" style:contextual-spacing="false" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Droid Sans Japanese1" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="001cd488" officeooo:paragraph-rsid="00203a45" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-name-complex="Arial" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T1" style:family="text">
<style:text-properties style:language-asian="es" style:country-asian="CO"/>
<style:text-properties officeooo:rsid="001a7e84"/>
</style:style>
<style:style style:name="T2" style:family="text">
<style:text-properties style:language-asian="es" style:country-asian="CO"/>
</style:style>
<style:style style:name="T3" style:family="text">
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T3" style:family="text">
<style:text-properties fo:font-weight="normal" officeooo:rsid="001b9ac0" style:font-weight-asian="normal" style:font-name-complex="Arial" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="T4" style:family="text">
<style:text-properties fo:font-weight="normal" officeooo:rsid="001e3f46" style:font-weight-asian="normal" style:font-name-complex="Arial" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="T5" style:family="text">
<style:text-properties fo:font-weight="normal" officeooo:rsid="001b9ac0" style:font-weight-asian="normal" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="T6" style:family="text">
<style:text-properties officeooo:rsid="001e3f46"/>
</style:style>
<style:style style:name="T7" style:family="text">
<style:text-properties officeooo:rsid="001b9ac0" style:font-name-complex="Arial"/>
</style:style>
<style:style style:name="T8" style:family="text">
<style:text-properties officeooo:rsid="001e3f46" style:font-name-complex="Arial"/>
</style:style>
<style:style style:name="T9" style:family="text">
<style:text-properties fo:font-size="8pt" fo:font-weight="normal" officeooo:rsid="001b9ac0" style:font-size-asian="8pt" style:font-weight-asian="normal" style:font-name-complex="Arial" style:font-size-complex="8pt" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="T10" style:family="text">
<style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
</style:style>
<style:style style:name="T11" style:family="text">
<style:text-properties style:language-asian="es" style:country-asian="CO"/>
</style:style>
<style:style style:name="T12" style:family="text">
<style:text-properties style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Droid Sans Japanese" fo:font-size="9pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" officeooo:rsid="000cde7f" style:font-size-asian="9pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-size-complex="9pt" style:font-weight-complex="normal" style:text-emphasize="none"/>
</style:style>
<style:style style:name="T13" style:family="text">
<style:text-properties style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" fo:font-size="9pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" officeooo:rsid="000cde7f" style:font-size-asian="9pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-size-complex="9pt" style:font-weight-complex="normal" style:text-emphasize="none"/>
</style:style>
<style:style style:name="T14" style:family="text">
<style:text-properties style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" fo:font-size="7pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" officeooo:rsid="000cde7f" style:font-size-asian="7pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-size-complex="7pt" style:font-weight-complex="normal" style:text-emphasize="none"/>
</style:style>
<style:style style:name="T15" style:family="text">
<style:text-properties style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" officeooo:rsid="000cde7f" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-weight-complex="normal" style:text-emphasize="none"/>
</style:style>
<style:style style:name="fr1" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties style:vertical-pos="from-top" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0in, 0in, 0in, 0in)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/>
<style:graphic-properties style:vertical-pos="from-top" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm, 0cm, 0cm, 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/>
</style:style>
<style:page-layout style:name="pm1">
<style:page-layout-properties fo:page-width="8.5in" fo:page-height="11in" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.7874in" fo:margin-bottom="0.7874in" fo:margin-left="0.7874in" fo:margin-right="0.7874in" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.278in" style:layout-grid-ruby-height="0.139in" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0in" loext:margin-gutter="0in">
<style:footnote-sep style:width="0.0071in" style:distance-before-sep="0.0398in" style:distance-after-sep="0.0398in" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
<style:page-layout-properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
<style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
</style:page-layout-properties>
<style:header-style>
<style:header-footer-properties fo:min-height="0in" fo:margin-left="0in" fo:margin-right="0in" fo:margin-bottom="0.1965in" fo:background-color="transparent" draw:fill="none" draw:fill-color="#729fcf"/>
<style:header-footer-properties fo:min-height="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.499cm" fo:background-color="transparent" draw:fill="none" draw:fill-color="#729fcf"/>
</style:header-style>
<style:footer-style/>
</style:page-layout>
@@ -467,7 +481,7 @@
<table:table-column table:style-name="Tabla6.B"/>
<table:table-row>
<table:table-cell table:style-name="Tabla6.A1" office:value-type="string">
<text:p text:style-name="P2"><draw:frame draw:style-name="fr1" draw:name="Imagen2" text:anchor-type="as-char" svg:y="-0.0307in" svg:width="3.3764in" svg:height="0.7429in" draw:z-index="0"><draw:image draw:mime-type="image/jpeg">
<text:p text:style-name="P5"><draw:frame draw:style-name="fr1" draw:name="Imagen2" text:anchor-type="as-char" svg:y="-0.078cm" svg:width="8.576cm" svg:height="1.887cm" draw:z-index="0"><draw:image draw:mime-type="image/jpeg">
<office:binary-data>/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgK
CgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkL
EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAAR
@@ -1122,15 +1136,15 @@
</draw:frame></text:p>
</table:table-cell>
<table:table-cell table:style-name="Tabla6.A1" office:value-type="string">
<text:p text:style-name="P3">Smart Vision S.A.S</text:p>
<text:p text:style-name="P3">NIT 901091201</text:p>
<text:p text:style-name="P3">DIRECCIÓN Carrera 17 # 53-17</text:p>
<text:p text:style-name="P4">TELÉFONOS +57 320 8197664 - <text:span text:style-name="T1">601 7912965</text:span></text:p>
<text:p text:style-name="P3">E MAIL smartvisioncolombia@gmail.com</text:p>
<text:p text:style-name="P13">Smart Vision S.A.S</text:p>
<text:p text:style-name="P13">NIT 901091201</text:p>
<text:p text:style-name="P13">DIRECCIÓN Carrera 16 # 52-85 piso 4 </text:p>
<text:p text:style-name="P14">TELÉFONOS +57 320 8197664 - <text:span text:style-name="T11">601 7049417</text:span></text:p>
<text:p text:style-name="P13">E MAIL smartvisioncolombia@gmail.com</text:p>
</table:table-cell>
</table:table-row>
</table:table>
<text:p text:style-name="P5"/>
<text:p text:style-name="P2"/>
</style:header>
</style:master-page>
</office:master-styles>
@@ -1143,28 +1157,27 @@
<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
<text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
</text:sequence-decls>
<text:p text:style-name="P16"><text:placeholder text:placeholder-type="text">&lt;for each=&quot;shipment in records&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P18"><text:placeholder text:placeholder-type="text">&lt;shipment.delivery_address.subdivision_municipality.name&gt;</text:placeholder></text:p>
<text:p text:style-name="P18"><text:placeholder text:placeholder-type="text" text:description="format_datetime(datetime.datetime.now(),user.language, &apos;%d de %B del %Y&apos;, shipment.company.timezone)">&lt;format_datetime(datetime.datetime.now(),user.language, &apos;%d de %B del %Y&apos;, shipment.company.timezone)&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;shipment.customer.rec_name&gt;</text:placeholder></text:p>
<text:p text:style-name="P17"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P11"><text:span text:style-name="T3">Referencia:</text:span> Certificado de capacitación</text:p>
<text:p text:style-name="P12"/>
<text:p text:style-name="P12">Smart Vision S.A.S en nuestro carácter de distribuidores nos comprometemos a capacitar adecuadamente en el uso, manejo y cuidado de los equipos distribuidos por nosotros al personal que va a hacer uso de los mismos, y generar el correspondiente certificado membretado acreditándolos como personal idóneo.</text:p>
<text:p text:style-name="P12"/>
<text:p text:style-name="P12">El uso y mantenimiento de los equipos suministrados por Smart Vision S.A.S solo debe ser realizado por personal capacitado y certificado por nuestra empresa, las fallas generadas por uso o manipulación por terceros no capacitados y certificados anulará la garantía. </text:p>
<text:p text:style-name="P12"/>
<text:p text:style-name="P12">Cualquier capacitación adicional o nuevo personal que requiera certificación por parte de Smart Vision S.A.S tendrá un costo adicional.</text:p>
<text:p text:style-name="P12"/>
<text:p text:style-name="P12">El certificado de capacitación será emitido y enviado 2 días hábiles posteriores a la misma.</text:p>
<text:p text:style-name="P12"/>
<text:p text:style-name="P12">Cordialmente.</text:p>
<text:p text:style-name="P10"/>
<text:p text:style-name="P9"/>
<text:p text:style-name="P10"/>
<text:p text:style-name="P10">___________________________________</text:p>
<text:p text:style-name="P13">Jesus Antonio Giraldo García</text:p>
<text:p text:style-name="P14">C.E.O (Gerente General)</text:p>
<text:p text:style-name="P24"><text:placeholder text:placeholder-type="text" text:description="for each=&quot;maintenance_service in records&quot;">&lt;for each=&quot;maintenance_service in records&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P31"><text:span text:style-name="T5"><text:placeholder text:placeholder-type="text" text:description="maintenance_service. propietary_address.subdivision_municipality.nema">&lt;maintenance_service. propietary_address.subdivision_municipality.name&gt;</text:placeholder></text:span><text:span text:style-name="T5"><text:s/></text:span><text:span text:style-name="T15"><text:placeholder text:placeholder-type="text" text:description="format_datetime(datetime.datetime.now(),user.language, &apos;%25B %25d ,%25Y %25H:%25M%25p&apos;, equipment.company.timezone)">&lt;format_datetime(datetime.datetime.now(),user.language, &apos;%d de %B del %Y&apos;, maintenance_service.company.timezone)&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P30"><text:placeholder text:placeholder-type="text" text:description="maintenance_service.propietary.name">&lt;maintenance_service.propietary.name&gt;</text:placeholder></text:p>
<text:p text:style-name="P29"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P25"><text:span text:style-name="T2">Referencia:</text:span> Certificado de capacitación</text:p>
<text:p text:style-name="P26"/>
<text:p text:style-name="P26">Smart Vision S.A.S en nuestro carácter de distribuidores nos comprometemos a capacitar adecuadamente en el uso, manejo y cuidado de los equipos distribuidos por nosotros al personal que va a hacer uso de los mismos, y generar el correspondiente certificado membretado acreditándolos como personal idóneo.</text:p>
<text:p text:style-name="P26"/>
<text:p text:style-name="P26">El uso y mantenimiento de los equipos suministrados por Smart Vision S.A.S solo debe ser realizado por personal capacitado y certificado por nuestra empresa, las fallas generadas por uso o manipulación por terceros no capacitados y certificados anulará la garantía. </text:p>
<text:p text:style-name="P26"/>
<text:p text:style-name="P26">Cualquier capacitación adicional o nuevo personal que requiera certificación por parte de Smart Vision S.A.S tendrá un costo adicional.</text:p>
<text:p text:style-name="P26"/>
<text:p text:style-name="P26">El certificado de capacitación será emitido y enviado 2 días hábiles posteriores a la misma.</text:p>
<text:p text:style-name="P26"/>
<text:p text:style-name="P26">Cordialmente.</text:p>
<text:p text:style-name="P23"/>
<text:p text:style-name="P19"/>
<text:p text:style-name="P23"/>
<text:p text:style-name="P23">___________________________________</text:p>
<text:p text:style-name="P27">Jesus Antonio Giraldo García</text:p>
<text:p text:style-name="P28">C.E.O (Gerente General)</text:p>
</office:text>
</office:body>
</office:document>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,31 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
<office:meta><meta:generator>LibreOffice/7.4.6.2$Linux_X86_64 LibreOffice_project/40$Build-2</meta:generator><meta:creation-date>2008-06-07T15:28:22</meta:creation-date><dc:date>2009-01-10T16:03:32</dc:date><meta:editing-cycles>1</meta:editing-cycles><meta:editing-duration>PT0S</meta:editing-duration><meta:document-statistic meta:table-count="5" meta:image-count="1" meta:object-count="0" meta:page-count="2" meta:paragraph-count="88" meta:word-count="206" meta:character-count="2679" meta:non-whitespace-character-count="2560"/><meta:user-defined meta:name="Info 1"/><meta:user-defined meta:name="Info 2"/><meta:user-defined meta:name="Info 3"/><meta:user-defined meta:name="Info 4"/></office:meta>
<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
<office:meta><meta:generator>LibreOffice/7.3.6.2$Linux_X86_64 LibreOffice_project/30$Build-2</meta:generator><meta:creation-date>2008-06-07T15:28:22</meta:creation-date><dc:date>2009-01-10T16:03:32</dc:date><meta:editing-cycles>1</meta:editing-cycles><meta:editing-duration>PT0S</meta:editing-duration><meta:document-statistic meta:table-count="5" meta:image-count="1" meta:object-count="0" meta:page-count="2" meta:paragraph-count="92" meta:word-count="213" meta:character-count="2573" meta:non-whitespace-character-count="2448"/><meta:user-defined meta:name="Info 1"/><meta:user-defined meta:name="Info 2"/><meta:user-defined meta:name="Info 3"/><meta:user-defined meta:name="Info 4"/></office:meta>
<office:settings>
<config:config-item-set config:name="ooo:view-settings">
<config:config-item config:name="ViewAreaTop" config:type="long">11950</config:config-item>
<config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
<config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
<config:config-item config:name="ViewAreaWidth" config:type="long">28825</config:config-item>
<config:config-item config:name="ViewAreaHeight" config:type="long">12920</config:config-item>
<config:config-item config:name="ViewAreaWidth" config:type="long">27437</config:config-item>
<config:config-item config:name="ViewAreaHeight" config:type="long">10952</config:config-item>
<config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
<config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
<config:config-item-map-indexed config:name="Views">
<config:config-item-map-entry>
<config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
<config:config-item config:name="ViewLeft" config:type="long">4925</config:config-item>
<config:config-item config:name="ViewTop" config:type="long">15117</config:config-item>
<config:config-item config:name="ViewLeft" config:type="long">4133</config:config-item>
<config:config-item config:name="ViewTop" config:type="long">4852</config:config-item>
<config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
<config:config-item config:name="VisibleTop" config:type="long">11950</config:config-item>
<config:config-item config:name="VisibleRight" config:type="long">28824</config:config-item>
<config:config-item config:name="VisibleBottom" config:type="long">24869</config:config-item>
<config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
<config:config-item config:name="VisibleRight" config:type="long">27436</config:config-item>
<config:config-item config:name="VisibleBottom" config:type="long">10950</config:config-item>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
<config:config-item config:name="ViewLayoutColumns" config:type="short">0</config:config-item>
<config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
<config:config-item config:name="ZoomFactor" config:type="short">170</config:config-item>
<config:config-item config:name="ZoomFactor" config:type="short">130</config:config-item>
<config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
<config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
<config:config-item config:name="HideWhitespace" config:type="boolean">false</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-indexed>
@@ -56,7 +55,6 @@
<config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
<config:config-item config:name="WordLikeWrapForAsCharFlys" config:type="boolean">false</config:config-item>
<config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
<config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
<config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
@@ -84,14 +82,13 @@
<config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
<config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
<config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
<config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">false</config:config-item>
<config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
<config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
<config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
<config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
<config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
<config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
<config:config-item config:name="Rsid" config:type="int">4987782</config:config-item>
<config:config-item config:name="Rsid" config:type="int">4405812</config:config-item>
<config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
<config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
<config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
@@ -105,7 +102,6 @@
<config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">false</config:config-item>
<config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
<config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
<config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
<config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
<config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
@@ -113,7 +109,6 @@
<config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
<config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
<config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
<config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
<config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
<config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
@@ -141,17 +136,13 @@
</office:settings>
<office:scripts>
<office:script script:language="ooo:Basic">
<ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink">
<ooo:library-embedded ooo:name="Standard"/>
</ooo:libraries>
<ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</office:script>
</office:scripts>
<office:font-face-decls>
<style:font-face style:name="Andale Sans UI" svg:font-family="&apos;Andale Sans UI&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Cantarell" svg:font-family="Cantarell" style:font-pitch="variable"/>
<style:font-face style:name="DejaVu Sans" svg:font-family="&apos;DejaVu Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="DejaVu Sans Mono" svg:font-family="&apos;DejaVu Sans Mono&apos;" style:font-family-generic="modern" style:font-pitch="fixed"/>
<style:font-face style:name="Droid Sans Japanese" svg:font-family="&apos;Droid Sans Japanese&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
<style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-adornments="Regular" style:font-family-generic="swiss" style:font-pitch="variable"/>
<style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-adornments="Bold" style:font-family-generic="roman" style:font-pitch="variable"/>
<style:font-face style:name="Liberation Serif1" svg:font-family="&apos;Liberation Serif&apos;" style:font-adornments="Regular" style:font-family-generic="roman" style:font-pitch="variable"/>
@@ -160,15 +151,15 @@
</office:font-face-decls>
<office:styles>
<style:default-style style:family="graphic">
<style:graphic-properties svg:stroke-color="#000000" draw:fill-color="#99ccff" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in" draw:start-line-spacing-horizontal="0.1114in" draw:start-line-spacing-vertical="0.1114in" draw:end-line-spacing-horizontal="0.1114in" draw:end-line-spacing-vertical="0.1114in" style:flow-with-text="false"/>
<style:graphic-properties svg:stroke-color="#000000" draw:fill-color="#99ccff" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
<style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
<style:tab-stops/>
</style:paragraph-properties>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" loext:color-lum-mod="100%" loext:color-lum-off="0%" style:font-name="Thorndale AMT" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Andale Sans UI" style:font-size-asian="10.5pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Andale Sans UI" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none"/>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Thorndale AMT" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Andale Sans UI" style:font-size-asian="10.5pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Andale Sans UI" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none"/>
</style:default-style>
<style:default-style style:family="paragraph">
<style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.4925in" style:writing-mode="lr-tb"/>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Thorndale AMT" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Andale Sans UI" style:font-size-asian="10.5pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Andale Sans UI" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
<style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="lr-tb"/>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Thorndale AMT" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Andale Sans UI" style:font-size-asian="10.5pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Andale Sans UI" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
</style:default-style>
<style:default-style style:family="table">
<style:table-properties table:border-model="collapsing"/>
@@ -180,18 +171,18 @@
<style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-style-name="Regular" style:font-family-generic="swiss" style:font-pitch="variable" style:font-size-asian="10.5pt"/>
</style:style>
<style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
<style:paragraph-properties fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" fo:keep-with-next="always"/>
<style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
<style:text-properties style:font-name="Liberation Serif1" fo:font-family="&apos;Liberation Serif&apos;" style:font-style-name="Regular" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="16pt" style:font-name-asian="DejaVu Sans" style:font-family-asian="&apos;DejaVu Sans&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="DejaVu Sans" style:font-family-complex="&apos;DejaVu Sans&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
</style:style>
<style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0835in" style:contextual-spacing="false"/>
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false"/>
<style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-style-name="Regular" style:font-family-generic="swiss" style:font-pitch="variable" style:font-size-asian="10.5pt"/>
</style:style>
<style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
<style:text-properties style:font-size-asian="12pt"/>
</style:style>
<style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties fo:margin-top="0.0835in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
<style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
<style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-size-complex="12pt" style:font-style-complex="italic"/>
</style:style>
<style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
@@ -215,16 +206,16 @@
<style:style style:name="Header_20_and_20_Footer" style:display-name="Header and Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties text:number-lines="false" text:line-number="0">
<style:tab-stops>
<style:tab-stop style:position="3.3465in" style:type="center"/>
<style:tab-stop style:position="6.6929in" style:type="right"/>
<style:tab-stop style:position="8.5cm" style:type="center"/>
<style:tab-stop style:position="17cm" style:type="right"/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="Header" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties text:number-lines="false" text:line-number="0">
<style:tab-stops>
<style:tab-stop style:position="3.4626in" style:type="center"/>
<style:tab-stop style:position="6.9252in" style:type="right"/>
<style:tab-stop style:position="8.795cm" style:type="center"/>
<style:tab-stop style:position="17.59cm" style:type="right"/>
</style:tab-stops>
</style:paragraph-properties>
<style:text-properties fo:font-size="9pt" style:font-size-asian="10.5pt"/>
@@ -232,8 +223,8 @@
<style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties text:number-lines="false" text:line-number="0">
<style:tab-stops>
<style:tab-stop style:position="3.4626in" style:type="center"/>
<style:tab-stop style:position="6.9252in" style:type="right"/>
<style:tab-stop style:position="8.795cm" style:type="center"/>
<style:tab-stop style:position="17.59cm" style:type="right"/>
</style:tab-stops>
</style:paragraph-properties>
<style:text-properties fo:font-size="9pt" style:font-size-asian="10.5pt"/>
@@ -242,24 +233,20 @@
<style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Text_20_body_20_indent" style:display-name="Text body indent" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="text">
<style:paragraph-properties fo:margin-left="0.1965in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:paragraph-properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
</style:style>
<style:style style:name="Text" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
<style:style style:name="Quotations" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
<style:paragraph-properties fo:margin-left="0.3937in" fo:margin-right="0.3937in" fo:margin-top="0in" fo:margin-bottom="0.1965in" style:contextual-spacing="false" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:paragraph-properties fo:margin-left="1cm" fo:margin-right="1cm" fo:margin-top="0cm" fo:margin-bottom="0.499cm" style:contextual-spacing="false" fo:text-indent="0cm" style:auto-text-indent="false"/>
</style:style>
<style:style style:name="Title" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="chapter">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-size="28pt" fo:font-weight="bold" style:font-size-asian="28pt" style:font-weight-asian="bold" style:font-size-complex="28pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Subtitle" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="chapter">
<style:paragraph-properties fo:margin-top="0.0417in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" fo:text-align="center" style:justify-single-word="false"/>
<style:paragraph-properties fo:margin-top="0.106cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:text-align="center" style:justify-single-word="false"/>
<style:text-properties fo:font-size="18pt" style:font-size-asian="18pt" style:font-size-complex="18pt"/>
</style:style>
<style:style style:name="Preformatted_20_Text" style:display-name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" style:contextual-spacing="false"/>
<style:text-properties style:font-name="DejaVu Sans Mono" fo:font-family="&apos;DejaVu Sans Mono&apos;" style:font-family-generic="modern" style:font-pitch="fixed" fo:font-size="10pt" style:font-name-asian="DejaVu Sans Mono" style:font-family-asian="&apos;DejaVu Sans Mono&apos;" style:font-family-generic-asian="modern" style:font-pitch-asian="fixed" style:font-size-asian="10pt" style:font-name-complex="DejaVu Sans Mono" style:font-family-complex="&apos;DejaVu Sans Mono&apos;" style:font-family-generic-complex="modern" style:font-pitch-complex="fixed" style:font-size-complex="10pt"/>
</style:style>
<style:style style:name="Placeholder" style:family="text">
<style:text-properties fo:font-variant="small-caps" fo:color="#008080" loext:opacity="100%" style:text-underline-style="dotted" style:text-underline-width="auto" style:text-underline-color="font-color"/>
</style:style>
@@ -267,240 +254,229 @@
<style:text-properties style:font-name="StarSymbol" fo:font-family="StarSymbol" fo:font-size="9pt" style:font-name-asian="StarSymbol" style:font-family-asian="StarSymbol" style:font-size-asian="9pt" style:font-name-complex="StarSymbol" style:font-family-complex="StarSymbol" style:font-size-complex="9pt"/>
</style:style>
<style:style style:name="Graphics" style:family="graphic">
<style:graphic-properties text:anchor-type="paragraph" svg:x="0in" svg:y="0in" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
<style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
</style:style>
<text:outline-style style:name="Outline">
<text:outline-level-style text:level="1" loext:num-list-format="%1%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="2" loext:num-list-format="%2%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="3" loext:num-list-format="%3%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="4" loext:num-list-format="%4%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="5" loext:num-list-format="%5%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="6" loext:num-list-format="%6%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="7" loext:num-list-format="%7%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="8" loext:num-list-format="%8%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="9" loext:num-list-format="%9%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
<text:outline-level-style text:level="10" loext:num-list-format="%10%" style:num-format="">
<style:list-level-properties text:min-label-distance="0.15in"/>
<style:list-level-properties text:min-label-distance="0.381cm"/>
</text:outline-level-style>
</text:outline-style>
<text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
<text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
<text:linenumbering-configuration text:number-lines="false" text:offset="0.1965in" style:num-format="1" text:number-position="left" text:increment="5"/>
<number:currency-style style:name="N122P0" style:volatile="true">
<number:currency-symbol number:language="es" number:country="CO">$</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N122">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:currency-symbol number:language="es" number:country="CO">$</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()&gt;=0" style:apply-style-name="N122P0"/>
</number:currency-style>
<text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
</office:styles>
<office:automatic-styles>
<style:style style:name="Tabla2" style:family="table">
<style:table-properties style:width="7.6417in" table:align="margins"/>
<style:table-properties style:width="19.41cm" table:align="margins"/>
</style:style>
<style:style style:name="Tabla2.A" style:family="table-column">
<style:table-column-properties style:column-width="3.8208in" style:rel-column-width="32767*"/>
<style:table-column-properties style:column-width="9.705cm" style:rel-column-width="32767*"/>
</style:style>
<style:style style:name="Tabla2.B" style:family="table-column">
<style:table-column-properties style:column-width="3.8208in" style:rel-column-width="32768*"/>
<style:table-column-properties style:column-width="9.705cm" style:rel-column-width="32768*"/>
</style:style>
<style:style style:name="Tabla2.A1" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border="none"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border="none"/>
</style:style>
<style:style style:name="Tabla1" style:family="table">
<style:table-properties style:width="7.6417in" table:align="margins"/>
<style:table-properties style:width="19.41cm" table:align="margins"/>
</style:style>
<style:style style:name="Tabla1.A" style:family="table-column">
<style:table-column-properties style:column-width="3.8201in" style:rel-column-width="32761*"/>
<style:table-column-properties style:column-width="9.705cm" style:rel-column-width="32767*"/>
</style:style>
<style:style style:name="Tabla1.B" style:family="table-column">
<style:table-column-properties style:column-width="3.8215in" style:rel-column-width="32774*"/>
<style:table-column-properties style:column-width="9.705cm" style:rel-column-width="32768*"/>
</style:style>
<style:style style:name="Tabla1.1" style:family="table-row">
<style:table-row-properties style:min-row-height="1.2188in"/>
<style:table-row-properties style:min-row-height="3.096cm"/>
</style:style>
<style:style style:name="Tabla1.A1" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border="none"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border="none"/>
</style:style>
<style:style style:name="Table1" style:family="table">
<style:table-properties style:width="7.3215in" table:align="left"/>
<style:table-properties style:width="18.597cm" table:align="left"/>
</style:style>
<style:style style:name="Table1.A" style:family="table-column">
<style:table-column-properties style:column-width="2.6417in"/>
<style:table-column-properties style:column-width="6.71cm"/>
</style:style>
<style:style style:name="Table1.B" style:family="table-column">
<style:table-column-properties style:column-width="0.7813in"/>
<style:table-column-properties style:column-width="1.984cm"/>
</style:style>
<style:style style:name="Table1.C" style:family="table-column">
<style:table-column-properties style:column-width="1.5396in"/>
<style:table-column-properties style:column-width="3.911cm"/>
</style:style>
<style:style style:name="Table1.D" style:family="table-column">
<style:table-column-properties style:column-width="1.1389in"/>
<style:table-column-properties style:column-width="2.893cm"/>
</style:style>
<style:style style:name="Table1.E" style:family="table-column">
<style:table-column-properties style:column-width="1.2201in"/>
<style:table-column-properties style:column-width="3.099cm"/>
</style:style>
<style:style style:name="Table1.A1" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table1.E1" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table1.A2" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A3" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A4" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A5" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.B5" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.C5" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.D5" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.E5" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A6" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A7" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A8" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.E8" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A9" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A10" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A11" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table1.A12" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A13" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A14" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A15" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A16" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table1.A17" style:family="table-cell">
<style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
<style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
</style:style>
<style:style style:name="Table2" style:family="table">
<style:table-properties style:width="7.6417in" table:align="margins" style:may-break-between-rows="false"/>
<style:table-properties style:width="19.41cm" table:align="margins" style:may-break-between-rows="false"/>
</style:style>
<style:style style:name="Table2.A" style:family="table-column">
<style:table-column-properties style:column-width="1.9271in" style:rel-column-width="16526*"/>
<style:table-column-properties style:column-width="4.895cm" style:rel-column-width="16526*"/>
</style:style>
<style:style style:name="Table2.B" style:family="table-column">
<style:table-column-properties style:column-width="5.7146in" style:rel-column-width="49009*"/>
<style:table-column-properties style:column-width="14.515cm" style:rel-column-width="49009*"/>
</style:style>
<style:style style:name="Table4" style:family="table">
<style:table-properties style:width="5.3729in" fo:margin-left="0.0083in" table:align="left" style:may-break-between-rows="true"/>
<style:table-properties style:width="13.097cm" fo:margin-left="0.021cm" table:align="left" style:may-break-between-rows="true"/>
</style:style>
<style:style style:name="Table4.A" style:family="table-column">
<style:table-column-properties style:column-width="1.1833in"/>
<style:table-column-properties style:column-width="3.006cm"/>
</style:style>
<style:style style:name="Table4.B" style:family="table-column">
<style:table-column-properties style:column-width="4.1896in"/>
<style:table-column-properties style:column-width="10.091cm"/>
</style:style>
<style:style style:name="Table4.A1" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table4.B1" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table4.A2" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table4.B2" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table4" style:family="table">
<style:table-properties style:width="5.3729in" fo:margin-left="0.0083in" table:align="left" style:may-break-between-rows="true"/>
<style:table-properties style:width="13.097cm" fo:margin-left="0.021cm" table:align="left" style:may-break-between-rows="true"/>
</style:style>
<style:style style:name="Table4.A" style:family="table-column">
<style:table-column-properties style:column-width="1.1833in"/>
<style:table-column-properties style:column-width="3.006cm"/>
</style:style>
<style:style style:name="Table4.B" style:family="table-column">
<style:table-column-properties style:column-width="4.1896in"/>
<style:table-column-properties style:column-width="10.091cm"/>
</style:style>
<style:style style:name="Table4.A1" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table4.B1" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table4.A2" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
<style:style style:name="Table4.B2" style:family="table-cell">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.0382in" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000">
<style:background-image/>
</style:table-cell-properties>
</style:style>
@@ -551,19 +527,19 @@
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P13" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-align="start" style:justify-single-word="false" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-align="start" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P14" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" officeooo:paragraph-rsid="002df6ba" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P15" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" officeooo:paragraph-rsid="002cc9ef" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P16" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P17" style:family="paragraph" style:parent-style-name="Table_20_Contents">
@@ -582,144 +558,90 @@
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P21" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0043in" style:contextual-spacing="false"/>
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.011cm" style:contextual-spacing="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P22" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0043in" style:contextual-spacing="false" fo:line-height="100%"/>
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.011cm" style:contextual-spacing="false" fo:line-height="100%"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" officeooo:paragraph-rsid="003bba97" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P23" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" officeooo:paragraph-rsid="0046f4f2" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
<style:style style:name="P23" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.011cm" style:contextual-spacing="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" fo:font-weight="bold" style:font-size-asian="7pt" style:font-weight-asian="bold" style:font-size-complex="7pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P24" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0043in" style:contextual-spacing="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" fo:font-weight="bold" style:font-size-asian="7pt" style:font-weight-asian="bold" style:font-size-complex="7pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P25" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Cantarell" fo:font-size="7pt" fo:font-weight="bold" style:font-size-asian="7pt" style:font-weight-asian="bold" style:font-size-complex="7pt" style:font-weight-complex="bold"/>
<style:style style:name="P25" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:paragraph-rsid="002b1070" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P26" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:paragraph-properties fo:margin-left="11.28cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:paragraph-rsid="002b1070" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P27" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="4.4409in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:paragraph-rsid="002b1070" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P28" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:paragraph-rsid="003da5ab" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P29" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:style style:name="P28" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P30" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:style style:name="P29" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P30" style:family="paragraph" style:parent-style-name="Table_20_Heading">
<style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P31" style:family="paragraph" style:parent-style-name="Table_20_Heading">
<style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P32" style:family="paragraph" style:parent-style-name="Table_20_Heading">
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P33" style:family="paragraph" style:parent-style-name="Table_20_Heading">
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:rsid="003bba97" officeooo:paragraph-rsid="003bba97" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P34" style:family="paragraph" style:parent-style-name="Text_20_body" style:master-page-name="">
<style:style style:name="P33" style:family="paragraph" style:parent-style-name="Text_20_body" style:master-page-name="">
<style:paragraph-properties style:page-number="auto"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P35" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:style style:name="P34" style:family="paragraph" style:parent-style-name="Text_20_body">
<loext:graphic-properties draw:fill="none"/>
<style:paragraph-properties fo:margin-left="0.3937in" fo:margin-right="0in" fo:margin-top="0in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" fo:text-indent="0in" style:auto-text-indent="false" fo:background-color="transparent"/>
<style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:text-indent="0cm" style:auto-text-indent="false" fo:background-color="transparent"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:rsid="0019f6b5" officeooo:paragraph-rsid="0019f6b5" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P36" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:style style:name="P35" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:break-before="column"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:rsid="0019f6b5" officeooo:paragraph-rsid="0024fff1" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P37" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:style style:name="P36" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P38" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:style style:name="P37" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:paragraph-rsid="003fc8ab" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P39" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" officeooo:rsid="00452a7b" officeooo:paragraph-rsid="00452a7b" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P40" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:style style:name="P38" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" style:text-underline-style="none" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P41" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:style style:name="P39" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:break-before="column"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" fo:font-weight="bold" officeooo:rsid="001bf6f1" officeooo:paragraph-rsid="0024fff1" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P42" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:style style:name="P40" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" fo:font-weight="bold" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P43" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:style style:name="P41" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" fo:font-weight="bold" officeooo:paragraph-rsid="003bba97" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P44" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0043in" style:contextual-spacing="false"/>
<style:style style:name="P42" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.011cm" style:contextual-spacing="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="8pt" fo:font-weight="bold" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P45" style:family="paragraph" style:parent-style-name="Heading_20_1">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="10pt" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" officeooo:paragraph-rsid="003f07ae" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
</style:style>
<style:style style:name="P46" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="10pt" officeooo:paragraph-rsid="003f07ae" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
</style:style>
<style:style style:name="P47" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Cantarell" fo:font-size="10pt" style:text-underline-style="none" officeooo:paragraph-rsid="003f07ae" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
</style:style>
<style:style style:name="P48" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:style style:name="P43" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:text-properties fo:font-size="9pt" style:font-size-complex="9pt"/>
</style:style>
<style:style style:name="P49" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Droid Sans Japanese" fo:font-size="7pt" officeooo:paragraph-rsid="0046f4f2" style:font-size-asian="7pt" style:font-size-complex="7pt"/>
</style:style>
<style:style style:name="P50" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Droid Sans Japanese" fo:font-size="8pt" officeooo:paragraph-rsid="004b7ff9" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P51" style:family="paragraph" style:parent-style-name="Standard">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:text-properties style:font-name="Droid Sans Japanese" fo:font-size="8pt" officeooo:paragraph-rsid="004b7ff9" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P52" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Droid Sans Japanese" fo:font-size="8pt" style:text-underline-style="none" officeooo:rsid="026544ec" officeooo:paragraph-rsid="004b7ff9" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P53" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties style:font-name="Droid Sans Japanese" fo:font-size="8pt" style:text-underline-style="none" officeooo:rsid="0266c2a9" officeooo:paragraph-rsid="004b7ff9" style:font-size-asian="8pt" style:font-size-complex="8pt"/>
</style:style>
<style:style style:name="P54" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:text-align="start" style:justify-single-word="false" fo:text-indent="0in" style:auto-text-indent="false"/>
<style:text-properties fo:color="#666666" loext:opacity="100%" style:font-name="Droid Sans Japanese" fo:font-size="8pt" fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:paragraph-rsid="004b7ff9" style:font-size-asian="8pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-size-complex="8pt" style:font-style-complex="normal" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="P55" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties fo:color="#666666" loext:opacity="100%" style:font-name="Droid Sans Japanese" fo:font-size="8pt" fo:font-weight="normal" officeooo:paragraph-rsid="004b7ff9" style:font-size-asian="8pt" style:font-weight-asian="normal" style:font-size-complex="8pt" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="P56" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties fo:color="#666666" loext:opacity="100%" style:font-name="Droid Sans Japanese" fo:font-size="8pt" fo:font-weight="bold" officeooo:paragraph-rsid="004b7ff9" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P57" style:family="paragraph" style:parent-style-name="Header">
<style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
<style:text-properties fo:color="#666666" loext:opacity="100%" style:font-name="Droid Sans Japanese" fo:font-size="8pt" style:text-underline-style="none" fo:font-weight="bold" officeooo:rsid="0266c2a9" officeooo:paragraph-rsid="004b7ff9" style:font-size-asian="8pt" style:font-weight-asian="bold" style:font-size-complex="8pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T1" style:family="text">
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
@@ -735,56 +657,26 @@
<style:style style:name="T5" style:family="text">
<style:text-properties officeooo:rsid="003fc8ab"/>
</style:style>
<style:style style:name="T6" style:family="text">
<style:text-properties fo:font-size="12pt" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" style:font-size-asian="12pt" style:font-size-complex="12pt"/>
</style:style>
<style:style style:name="T7" style:family="text">
<style:text-properties style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color"/>
</style:style>
<style:style style:name="T8" style:family="text">
<style:text-properties fo:color="#333333" loext:opacity="100%" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T9" style:family="text">
<style:text-properties fo:color="#333333" loext:opacity="100%" fo:font-weight="bold" officeooo:rsid="026544ec" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T10" style:family="text">
<style:text-properties fo:color="#333333" loext:opacity="100%" officeooo:rsid="026544ec"/>
</style:style>
<style:style style:name="T11" style:family="text">
<style:text-properties fo:color="#333333" loext:opacity="100%" officeooo:rsid="0030ce45"/>
</style:style>
<style:style style:name="T12" style:family="text">
<style:text-properties fo:color="#666666" loext:opacity="100%" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T13" style:family="text">
<style:text-properties fo:color="#666666" loext:opacity="100%" fo:font-weight="bold" officeooo:rsid="026544ec" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T14" style:family="text">
<style:text-properties fo:color="#666666" loext:opacity="100%" fo:font-weight="bold" officeooo:rsid="001cd488" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T15" style:family="text">
<style:text-properties officeooo:rsid="026544ec"/>
</style:style>
<style:style style:name="fr1" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0in, 0in, 0in, 0in)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/>
<style:graphic-properties style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm, 0cm, 0cm, 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/>
</style:style>
<style:style style:name="Sect1" style:family="section">
<style:section-properties text:dont-balance-text-columns="true" style:editable="false">
<style:columns fo:column-count="2" fo:column-gap="0in">
<style:column style:rel-width="32767*" fo:start-indent="0in" fo:end-indent="0in"/>
<style:column style:rel-width="32768*" fo:start-indent="0in" fo:end-indent="0in"/>
<style:columns fo:column-count="2" fo:column-gap="0cm">
<style:column style:rel-width="32767*" fo:start-indent="0cm" fo:end-indent="0cm"/>
<style:column style:rel-width="32768*" fo:start-indent="0cm" fo:end-indent="0cm"/>
</style:columns>
</style:section-properties>
</style:style>
<style:page-layout style:name="pm1">
<style:page-layout-properties fo:page-width="8.5in" fo:page-height="11in" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.7874in" fo:margin-bottom="0.7874in" fo:margin-left="0.4764in" fo:margin-right="0.3819in" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="44" style:layout-grid-base-height="0.2165in" style:layout-grid-ruby-height="0in" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="true" style:layout-grid-display="true" style:footnote-max-height="0in" loext:margin-gutter="0in">
<style:footnote-sep style:width="0.0071in" style:distance-before-sep="0.0398in" style:distance-after-sep="0.0398in" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
<style:page-layout-properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="1.21cm" fo:margin-right="0.97cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="44" style:layout-grid-base-height="0.55cm" style:layout-grid-ruby-height="0cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="true" style:layout-grid-display="true" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
<style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
</style:page-layout-properties>
<style:header-style>
<style:header-footer-properties fo:min-height="0in" fo:margin-left="0in" fo:margin-right="0in" fo:margin-bottom="0.1965in" fo:background-color="transparent" draw:fill="none" draw:fill-color="#99ccff"/>
<style:header-footer-properties fo:min-height="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.499cm" fo:background-color="transparent" draw:fill="none" draw:fill-color="#99ccff"/>
</style:header-style>
<style:footer-style>
<style:header-footer-properties fo:min-height="0in" fo:margin-left="0in" fo:margin-right="0in" fo:margin-top="0.1965in"/>
<style:header-footer-properties fo:min-height="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.499cm"/>
</style:footer-style>
</style:page-layout>
<style:style style:name="dp1" style:family="drawing-page">
@@ -825,7 +717,7 @@
<table:table-column table:style-name="Tabla2.B"/>
<table:table-row>
<table:table-cell table:style-name="Tabla2.A1" office:value-type="string">
<text:p text:style-name="P48"><draw:frame draw:style-name="fr1" draw:name="Imagen3" text:anchor-type="char" svg:x="0.0835in" svg:y="0.1118in" svg:width="3.1181in" svg:height="0.678in" draw:z-index="0"><draw:image draw:mime-type="image/png">
<text:p text:style-name="P43"><draw:frame draw:style-name="fr1" draw:name="Imagen3" text:anchor-type="char" svg:x="0.212cm" svg:y="0.284cm" svg:width="7.92cm" svg:height="1.722cm" draw:z-index="0"><draw:image draw:mime-type="image/png">
<office:binary-data>iVBORw0KGgoAAAANSUhEUgAAATsAAABFCAYAAAA1g0HCAAAAAXNSR0IArs4c6QAAADhlWElm
TU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABO6ADAAQAAAABAAAARQAA
AACTFYNyAABAAElEQVR4Aey9B3xc13XuuwAMeu+VBECwV5FiJ0VRpKhmVVvFRXYcO4mdn/1y
@@ -1308,53 +1200,47 @@
</draw:frame></text:p>
</table:table-cell>
<table:table-cell table:style-name="Tabla2.A1" office:value-type="string">
<text:p text:style-name="P46"><text:placeholder text:placeholder-type="text">&lt;choose test=&quot;&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P47"><text:placeholder text:placeholder-type="text">&lt;when test=&quot;purchase.state == &apos;draft&apos;&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P45"><text:span text:style-name="T4">C</text:span><text:span text:style-name="T5">OMPRA EN ESTADO BORRADOR</text:span></text:p>
<text:p text:style-name="P47"><text:placeholder text:placeholder-type="text">&lt;/when&gt;</text:placeholder></text:p>
<text:p text:style-name="P47"><text:placeholder text:placeholder-type="text">&lt;when test=&quot;purchase.state == &apos;quotation&apos;&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P45"><text:span text:style-name="T4">C</text:span><text:span text:style-name="T5">OMPRA</text:span> N°: <text:placeholder text:placeholder-type="text">&lt;purchase.full_number&gt;</text:placeholder></text:p>
<text:p text:style-name="P47"><text:placeholder text:placeholder-type="text">&lt;/when&gt;</text:placeholder></text:p>
<text:p text:style-name="P47"><text:placeholder text:placeholder-type="text">&lt;otherwise test=&quot;&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P45">O<text:span text:style-name="T5">RDEN DE COMPRA</text:span> N°: <text:placeholder text:placeholder-type="text">&lt;purchase.full_number&gt;</text:placeholder></text:p>
<text:p text:style-name="P47"><text:placeholder text:placeholder-type="text">&lt;/otherwise&gt;</text:placeholder></text:p>
<text:p text:style-name="P47"><text:placeholder text:placeholder-type="text">&lt;/choose&gt;</text:placeholder></text:p>
<text:p text:style-name="P9"><text:placeholder text:placeholder-type="text">&lt;choose test=&quot;&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P10"><text:placeholder text:placeholder-type="text">&lt;when test=&quot;purchase.state == &apos;draft&apos;&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P8"><text:span text:style-name="T4">C</text:span><text:span text:style-name="T5">OMPRA EN ESTADO BORRADOR</text:span></text:p>
<text:p text:style-name="P10"><text:placeholder text:placeholder-type="text">&lt;/when&gt;</text:placeholder></text:p>
<text:p text:style-name="P10"><text:placeholder text:placeholder-type="text">&lt;when test=&quot;purchase.state == &apos;quotation&apos;&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P8"><text:span text:style-name="T4">C</text:span><text:span text:style-name="T5">OMPRA</text:span> N°: <text:placeholder text:placeholder-type="text">&lt;purchase.full_number&gt;</text:placeholder></text:p>
<text:p text:style-name="P10"><text:placeholder text:placeholder-type="text">&lt;/when&gt;</text:placeholder></text:p>
<text:p text:style-name="P10"><text:placeholder text:placeholder-type="text">&lt;otherwise test=&quot;&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P8">O<text:span text:style-name="T5">RDEN DE COMPRA</text:span> N°: <text:placeholder text:placeholder-type="text">&lt;purchase.full_number&gt;</text:placeholder></text:p>
<text:p text:style-name="P10"><text:placeholder text:placeholder-type="text">&lt;/otherwise&gt;</text:placeholder></text:p>
<text:p text:style-name="P10"><text:placeholder text:placeholder-type="text">&lt;/choose&gt;</text:placeholder></text:p>
</table:table-cell>
</table:table-row>
</table:table>
<text:p text:style-name="P26"/>
<text:p text:style-name="P25"/>
<table:table table:name="Tabla1" table:style-name="Tabla1">
<table:table-column table:style-name="Tabla1.A"/>
<table:table-column table:style-name="Tabla1.B"/>
<table:table-row table:style-name="Tabla1.1">
<table:table-cell table:style-name="Tabla1.A1" office:value-type="string">
<text:p text:style-name="P38"><text:span text:style-name="T2">Fecha</text:span><text:span text:style-name="T1">: </text:span><text:span text:style-name="T1"><text:placeholder text:placeholder-type="text">&lt;format_date(purchase.purchase_date or today, purchase.party.lang)&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P55"><text:placeholder text:placeholder-type="text" text:description="if test=&quot;purchase.company&quot;">&lt;if test=&quot;purchase.company&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P56"><text:placeholder text:placeholder-type="text" text:description="purchase.company and purchase.company.rec_name">&lt;purchase.company and purchase.company.rec_name&gt;</text:placeholder></text:p>
<text:p text:style-name="P50"><text:span text:style-name="T9">NIT:</text:span><text:span text:style-name="T13"> </text:span><text:span text:style-name="T12"><text:placeholder text:placeholder-type="text" text:description="purchase.company.party.identifiers[0].code">&lt;purchase.company.party.identifiers[0].code&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P51">Regimen Común</text:p>
<text:p text:style-name="P51"><text:span text:style-name="T12">Actividad Economica 46</text:span><text:span text:style-name="T14">59</text:span></text:p>
<text:p text:style-name="P52"><text:span text:style-name="T8">Dirección: </text:span><text:span text:style-name="T12"><text:placeholder text:placeholder-type="text" text:description="purchase.company.party.addresses[0].street">&lt;purchase.company.party.addresses[0].street&gt;</text:placeholder></text:span><text:span text:style-name="T12"><text:s/></text:span><text:span text:style-name="T12"><text:placeholder text:placeholder-type="text" text:description="purchase.company.party.addresses[0].city">&lt;purchase.company.party.addresses[0].city&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P53"><text:span text:style-name="T9">Teléfono:</text:span><text:span text:style-name="T12"> </text:span><text:span text:style-name="T13"><text:placeholder text:placeholder-type="text" text:description="purchase.company.party.phone">&lt;purchase.company.party.phone&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P57"><text:span text:style-name="T10">Celular: </text:span><text:span text:style-name="T15"><text:placeholder text:placeholder-type="text" text:description="purchase.company.party.mobile">&lt;purchase.company.party.mobile&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P57"><text:span text:style-name="T11">E-mail</text:span><text:span text:style-name="T10">: </text:span><text:span text:style-name="T15"><text:placeholder text:placeholder-type="text" text:description="purchase.company.party.email">&lt;purchase.company.party.email&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P54"><text:placeholder text:placeholder-type="text">&lt;/if&gt;</text:placeholder></text:p>
<text:p text:style-name="P37"><text:span text:style-name="T2">Fecha</text:span><text:span text:style-name="T1">: </text:span><text:span text:style-name="T1"><text:placeholder text:placeholder-type="text">&lt;format_date(purchase.purchase_date or today, purchase.party.lang)&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P27"><text:span text:style-name="T1">NIT:</text:span> 901091201-1</text:p>
<text:p text:style-name="P27">Regimen Común</text:p>
<text:p text:style-name="P27">Actividad Economica 4690</text:p>
<text:p text:style-name="P27">CARRERA 16 No 52-85 PISO 4</text:p>
<text:p text:style-name="P27"><text:span text:style-name="T1">Tel:</text:span> 7163487-3000931 <text:s text:c="4"/>BOGOTA</text:p>
</table:table-cell>
<table:table-cell table:style-name="Tabla1.A1" office:value-type="string">
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text">&lt;replace text:p=&quot;set_lang(purchase.party.lang)&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text">&lt;replace text:p=&quot;purchase.set_lang(purchase.party.lang)&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text">&lt;for each=&quot;line in purchase.report_address.splitlines()&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text">&lt;line&gt;</text:placeholder></text:p>
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text">&lt;if test=&quot;purchase.party.tax_identifier&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text">&lt;purchase.party.tax_identifier.type_string&gt;</text:placeholder>: <text:placeholder text:placeholder-type="text">&lt;purchase.party.tax_identifier.code&gt;</text:placeholder></text:p>
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text">&lt;/if&gt;</text:placeholder></text:p>
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text">&lt;replace text:p=&quot;set_lang(purchase.party.lang)&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text">&lt;replace text:p=&quot;purchase.set_lang(purchase.party.lang)&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text">&lt;for each=&quot;line in purchase.report_address.splitlines()&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text">&lt;line&gt;</text:placeholder></text:p>
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text">&lt;if test=&quot;purchase.party.tax_identifier&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text">&lt;purchase.party.tax_identifier.type_string&gt;</text:placeholder>: <text:placeholder text:placeholder-type="text">&lt;purchase.party.tax_identifier.code&gt;</text:placeholder></text:p>
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text">&lt;/if&gt;</text:placeholder></text:p>
</table:table-cell>
</table:table-row>
</table:table>
<text:section text:style-name="Sect1" text:name="Section1">
<text:p text:style-name="P37"/>
<text:p text:style-name="P39"><text:span text:style-name="T1">Descripción: </text:span><text:span text:style-name="T7"><text:placeholder text:placeholder-type="text">&lt;purchase.description&gt;</text:placeholder></text:span></text:p>
<text:p text:style-name="P36"/>
</text:section>
<table:table table:name="Table1" table:style-name="Table1">
<table:table-column table:style-name="Table1.A"/>
@@ -1365,19 +1251,19 @@
<table:table-header-rows>
<table:table-row>
<table:table-cell table:style-name="Table1.A1" office:value-type="string">
<text:p text:style-name="P32">Descrip<text:span text:style-name="T4">c</text:span>i<text:span text:style-name="T1">ó</text:span>n</text:p>
<text:p text:style-name="P31">Descrip<text:span text:style-name="T4">c</text:span>i<text:span text:style-name="T1">ó</text:span>n</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table1.A1" office:value-type="string">
<text:p text:style-name="P33">Cantidad</text:p>
<text:p text:style-name="P32">Cantidad</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table1.A1" office:value-type="string">
<text:p text:style-name="P33">Precio u/n</text:p>
<text:p text:style-name="P32">Precio u/n</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table1.A1" office:value-type="string">
<text:p text:style-name="P33">Impuestos</text:p>
<text:p text:style-name="P32">Impuestos</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table1.E1" office:value-type="string">
<text:p text:style-name="P33">Total</text:p>
<text:p text:style-name="P32">Total</text:p>
</table:table-cell>
</table:table-row>
</table:table-header-rows>
@@ -1410,9 +1296,19 @@
</table:table-row>
<table:table-row>
<table:table-cell table:style-name="Table1.A5" office:value-type="string">
<text:p text:style-name="P49"><text:placeholder text:placeholder-type="text">&lt;if test=&quot;line.product&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P49"><text:placeholder text:placeholder-type="text">&lt;line.product.rec_name&gt;</text:placeholder></text:p>
<text:p text:style-name="P49"><text:placeholder text:placeholder-type="text">&lt;/if&gt;</text:placeholder><text:tab/></text:p>
<text:p text:style-name="P14"><text:placeholder text:placeholder-type="text">&lt;choose&gt;</text:placeholder></text:p>
<text:p text:style-name="P14"><text:placeholder text:placeholder-type="text">&lt;when test=&quot;line.product_supplier&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;line.product_supplier.rec_name&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;/when&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;when test=&quot;line.product&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;line.product.rec_name&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;/when&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;/choose&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;if test=&quot;line.description&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;for each=&quot;description in line.description.split(&apos;\n&apos;)&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:soft-page-break/><text:placeholder text:placeholder-type="text">&lt;description&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text">&lt;/if&gt;</text:placeholder></text:p>
</table:table-cell>
<table:table-cell table:style-name="Table1.B5" office:value-type="string">
<text:p text:style-name="P18"><text:placeholder text:placeholder-type="text">&lt;format_number_symbol(line.quantity, purchase.party.lang, line.unit, digits=line.unit.digits) if line.unit else format_number(line.quantity, purchase.party.lang)&gt;</text:placeholder><text:soft-page-break/></text:p>
@@ -1431,7 +1327,7 @@
</table:table-row>
<table:table-row>
<table:table-cell table:style-name="Table1.A2" table:number-columns-spanned="5" office:value-type="string">
<text:p text:style-name="P23"><text:placeholder text:placeholder-type="text">&lt;/when&gt;</text:placeholder></text:p>
<text:p text:style-name="P17"><text:placeholder text:placeholder-type="text">&lt;/when&gt;</text:placeholder></text:p>
</table:table-cell>
<table:covered-table-cell/>
<table:covered-table-cell/>
@@ -1551,7 +1447,7 @@
<table:table-column table:style-name="Table2.B"/>
<table:table-row>
<table:table-cell office:value-type="string">
<text:p text:style-name="P29"/>
<text:p text:style-name="P28"/>
</table:table-cell>
<table:table-cell office:value-type="string">
<table:table table:name="Table4" table:style-name="Table4">
@@ -1559,38 +1455,38 @@
<table:table-column table:style-name="Table4.B"/>
<table:table-row>
<table:table-cell table:style-name="Table4.A1" office:value-type="string">
<text:p text:style-name="P31">Total (<text:span text:style-name="T4">Sin impuesto</text:span>):</text:p>
<text:p text:style-name="P30">Total (<text:span text:style-name="T4">Sin impuesto</text:span>):</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table4.B1" office:value-type="string">
<text:p text:style-name="P30"><text:placeholder text:placeholder-type="text">&lt;format_currency(purchase.untaxed_amount, purchase.party.lang, purchase.currency)&gt;</text:placeholder></text:p>
<text:p text:style-name="P29"><text:placeholder text:placeholder-type="text">&lt;format_currency(purchase.untaxed_amount, purchase.party.lang, purchase.currency)&gt;</text:placeholder></text:p>
</table:table-cell>
</table:table-row>
<table:table-row>
<table:table-cell table:style-name="Table4.A2" office:value-type="string">
<text:p text:style-name="P31"><text:span text:style-name="T4">Impuestos</text:span>:</text:p>
<text:p text:style-name="P30"><text:span text:style-name="T4">Impuestos</text:span>:</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table4.B2" office:value-type="string">
<text:p text:style-name="P30"><text:placeholder text:placeholder-type="text">&lt;format_currency(purchase.tax_amount, purchase.party.lang, purchase.currency)&gt;</text:placeholder></text:p>
<text:p text:style-name="P29"><text:placeholder text:placeholder-type="text">&lt;format_currency(purchase.tax_amount, purchase.party.lang, purchase.currency)&gt;</text:placeholder></text:p>
</table:table-cell>
</table:table-row>
<table:table-row>
<table:table-cell table:style-name="Table4.A2" office:value-type="string">
<text:p text:style-name="P31">Total:</text:p>
<text:p text:style-name="P30">Total:</text:p>
</table:table-cell>
<table:table-cell table:style-name="Table4.B2" office:value-type="string">
<text:p text:style-name="P30"><text:placeholder text:placeholder-type="text">&lt;format_currency(purchase.total_amount, purchase.party.lang, purchase.currency)&gt;</text:placeholder></text:p>
<text:p text:style-name="P29"><text:placeholder text:placeholder-type="text">&lt;format_currency(purchase.total_amount, purchase.party.lang, purchase.currency)&gt;</text:placeholder></text:p>
</table:table-cell>
</table:table-row>
</table:table>
<text:p text:style-name="P29"/>
<text:p text:style-name="P28"/>
</table:table-cell>
</table:table-row>
</table:table>
<text:p text:style-name="P37"><text:placeholder text:placeholder-type="text">&lt;for each=&quot;comment in (purchase.comment or &apos;&apos;).split(&apos;\n&apos;)&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P37"><text:placeholder text:placeholder-type="text">&lt;comment&gt;</text:placeholder></text:p>
<text:p text:style-name="P37"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P37"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P44"/>
<text:p text:style-name="P36"><text:placeholder text:placeholder-type="text">&lt;for each=&quot;comment in (purchase.comment or &apos;&apos;).split(&apos;\n&apos;)&quot;&gt;</text:placeholder></text:p>
<text:p text:style-name="P36"><text:placeholder text:placeholder-type="text">&lt;comment&gt;</text:placeholder></text:p>
<text:p text:style-name="P36"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P36"><text:placeholder text:placeholder-type="text">&lt;/for&gt;</text:placeholder></text:p>
<text:p text:style-name="P42"/>
</office:text>
</office:body>
</office:document>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

281
sale.py
View File

@@ -1,115 +1,92 @@
from trytond.pool import Pool, PoolMeta
from trytond.model import ModelView, fields
from trytond.pyson import Eval, If
from trytond.model import ModelView, ModelSQL, fields
from trytond.modules.currency.fields import Monetary
from trytond.pyson import Eval, Bool, If, Get, Equal
from decimal import Decimal
from trytond.modules.product import price_digits
from trytond.transaction import Transaction
from trytond.model import Workflow
from trytond.modules.company.model import (
set_employee)
employee_field, set_employee, reset_employee)
from trytond.exceptions import UserError
from trytond.wizard import (
Button, StateAction, StateView, Wizard)
from trytond.i18n import gettext
from trytond.modules.sale.exceptions import PartyLocationError
from datetime import datetime
Button, StateAction, StateTransition, StateView, Wizard)
class Sale(metaclass=PoolMeta):
'Sale'
__name__ = 'sale.sale'
quote_number = fields.Char("Quote Number", readonly=True)
sale_type = fields.Selection([
('maintenance', 'Maintenance'),
('equipments', 'Equipments'),
('replaces', 'Replaces')],
"Sale Type", required=True,
states={
'readonly': Eval('state') != 'draft'})
sale_type = fields.Selection([('maintenance', 'Maintenance'),
('equipments', 'Equipments'),
('replaces', 'Replaces')], "Sale Type", required=True,
states={'readonly': Eval('state') != 'draft'})
maintenance_type = fields.Selection([('', ""),
('preventive', 'Preventive'),
('corrective', 'Corrective')
], "Maintenance Type",
states={
'invisible': Eval('sale_type') != "maintenance",
'required': Eval('sale_type') == "maintenance",
'readonly': Eval('state') != 'draft'},
depends=['sale_type'])
maintenance_type = fields.Selection([
('', ""),
('preventive', 'Preventive'),
('corrective', 'Corrective')],
"Maintenance Type",
states={
'invisible': Eval('sale_type') != "maintenance",
'required': Eval('sale_type') == "maintenance",
'readonly': Eval('state') != 'draft'},
depends=['sale_type'])
contract_ref = fields.Reference("Contract Base", selection='get_origin_contract',
domain=[('party', '=', Eval('party')),
('state', '=', 'closed')],
states={'invisible': (Eval('sale_type') != 'maintenance')},
search_context={
'related_party': Eval('party'),
},)
agended = fields.Boolean("Scheduling",states={
'invisible': (Eval('sale_type') != 'maintenance'),
'readonly': True})
contract_ref = fields.Reference(
"Contract Base", selection='get_origin_contract',
domain={
'optical_equipment.contract': [
('party', '=', Eval('party')),
('state', '=', 'closed'),
]},
states={
'invisible': (
Eval('sale_type') != 'maintenance')},
search_context={
'related_party': Eval('party'), })
agended = fields.Boolean("Scheduling", states={
'invisible': (Eval('sale_type') != 'maintenance')})
payment_term_description = fields.Char("Payment Term", states={
'readonly': Eval('state') != 'draft',
}, depends=['state'])
@classmethod
def __setup__(cls):
super(Sale, cls).__setup__()
cls.contact.states['required'] = True
cls.description.states['required'] = True
cls.sale_date.states['required'] = True
cls.contact.states['required']=True
cls._buttons.update({
'draft': {
'invisible': (Eval('state').in_(
['cancelled', 'draft']))},
'report': {}})
['cancelled', 'draft'])) | (Eval('shipment_state') == 'sent')}})
cls._transitions |= set((
('draft', 'quotation'),
('quotation', 'confirmed'),
('confirmed', 'processing'),
('confirmed', 'draft'),
('processing', 'processing'),
('processing', 'done'),
('done', 'processing'),
('draft', 'cancelled'),
('quotation', 'cancelled'),
('quotation', 'draft'),
('cancelled', 'draft'),
('processing', 'draft')
))
('draft', 'quotation'),
('quotation', 'confirmed'),
('confirmed', 'processing'),
('confirmed', 'draft'),
('processing', 'processing'),
('processing', 'done'),
('done', 'processing'),
('draft', 'cancelled'),
('quotation', 'cancelled'),
('quotation', 'draft'),
('cancelled', 'draft'),
('processing', 'draft')
))
@fields.depends('lines', 'sale_type', 'agended')
def on_chage_sale_type(self):
self.lines= []
if self.sale_type != "maintenance":
self.agended = False
@classmethod
def default_agended(self):
return False
@classmethod
def default_sale_date(cls):
return datetime.today().date()
@fields.depends('lines', 'sale_type', 'agended')
def on_chage_sale_type(self):
self.lines = []
if self.sale_type != "maintenance":
self.agended = False
elif self.sale_type == "maintenance":
self.invoice_method = 'order'
@classmethod
def _get_origin_contract(cls):
'Return list of Model names for origin Reference'
pool = Pool()
Contract = pool.get('optical_equipment.contract')
return [Contract.__name__]
@classmethod
def get_origin_contract(cls):
Model = Pool().get('ir.model')
@@ -118,71 +95,8 @@ class Sale(metaclass=PoolMeta):
return [(None, '')] + [(m, get_name(m)) for m in models]
def _get_shipment_sale(self, Shipment, key):
Shipment = super(Sale, self)._get_shipment_sale(Shipment, key)
Shipment.sale_type = self.sale_type
Shipment.service_maintenance_initial = \
True if self.sale_type != 'equipments' else False
return Shipment
@ classmethod
def set_quote_number(cls, sales):
'''
Fill the number field with the sale sequence
'''
pool = Pool()
Config = pool.get('optical_equipment.configuration')
config = Config(1)
for sale in sales:
if config.equipment_sequence is not None:
if not sale.quote_number:
try:
sale.quote_number = config.sale_quote_number.get()
cls.save(sales)
except UserError:
raise UserError(str('Validation Error'))
else:
raise UserError(
gettext('optical_equipment.msg_not_sequence_quote'))
@classmethod
def copy(cls, sales, default=None):
today = datetime.today().date()
if default is None:
default = {}
else:
default = default.copy()
default.setdefault('number', None)
default.setdefault('invoice_state', 'none')
default.setdefault('invoices_ignored', None)
default.setdefault('shipment_state', 'none')
default.setdefault('sale_date', today)
default.setdefault('quoted_by')
default.setdefault('confirmed_by')
return super(Sale, cls).copy(sales, default=default)
@classmethod
@ModelView.button_action(
'optical_equipment.wizard_print_balance_sale_party')
def report(cls, sales):
pass
@classmethod
@ModelView.button
@Workflow.transition('quotation')
def quote(cls, sales):
for sale in sales:
sale.check_for_quotation()
cls.set_quote_number(sales)
# for sale in sales:
# sale.set_advance_payment_term()
# cls.save(sales)
@classmethod
@ModelView.button_action(
'optical_equipment.wizard_confirm_sale_date')
@Workflow.transition('confirmed')
@set_employee('confirmed_by')
def confirm(cls, sales):
@@ -194,9 +108,10 @@ class Sale(metaclass=PoolMeta):
cls.store_cache(sales)
config = Configuration(1)
MaintenanceService = pool.get('optical_equipment_maintenance.service')
for sale in sales:
if sale.sale_type == 'maintenance' and not sale.agended:
if sale.sale_type == 'maintenance':
for line in sale.lines:
maintenanceService = MaintenanceService(
description=sale.description,
@@ -204,19 +119,15 @@ class Sale(metaclass=PoolMeta):
state_agended='no_agenda',
propietary=sale.party,
propietary_address=sale.shipment_address,
contract_origin=(
sale.contract_ref.id
if sale.contract_ref else None),
sale_origin=sale,
contract_origin=sale.contract_ref if sale.contract_ref else None,
sale_origin=line,
sale_date=sale.sale_date,
state="draft"
)
maintenanceService.save()
sale.agended = True
sale.state = "confirmed"
sale.save()
cls.set_number(sales)
with transaction.set_context(
queue_scheduled_at=config.sale_process_after,
queue_batch=context.get('queue_batch', True)):
@@ -228,6 +139,14 @@ class SaleLine(metaclass=PoolMeta):
__name__ = 'sale.line'
product_equipment = fields.Boolean("Product Equipment")
equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
domain=[('state', '=', 'registred'),
('product','=', Eval('product'))
],
states={'invisible': If(~Eval('product_equipment'), True)},)
unit_digits = fields.Function(fields.Integer('Unit Digits'),
'on_change_with_unit_digits')
@classmethod
def __setup__(cls):
@@ -236,17 +155,22 @@ class SaleLine(metaclass=PoolMeta):
If(Eval('_parent_sale.sale_type') == 'maintenance',
[('type', '=', 'service'),
('maintenance_activity', '=', True)], []))
cls.product.domain.append(
If(Eval('_parent_sale.sale_type') == 'replaces',
[('replacement', '=', True)], []))
cls.product.domain.append(If(Eval('_parent_sale.sale_type') == 'equipments',
[('equipment', '=', True)], []))
cls.product.domain.append(If(Eval('_parent_sale.sale_type') == 'replaces',
[('replacement', '=', True),
('maintenance_activity', '=', True)], []))
cls.quantity.states['readonly'] = Eval('_parent_sale.sale_type') == 'equipments'
@fields.depends(
'product', 'unit', 'quantity', 'sale',
'_parent_sale.party', '_parent_sale.sale_type',
methods=[
'_get_tax_rule_pattern',
'_get_context_sale_price',
'on_change_with_amount'])
def on_change_with_unit_digits(self, name=None):
if self.unit:
return self.unit.digits
return 2
@fields.depends('product', 'unit', 'quantity', 'sale',
'_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:
@@ -265,8 +189,7 @@ class SaleLine(metaclass=PoolMeta):
self.product_equipment = False
party = self.sale.party
# Set taxes before unit_price
# to have taxes in context of sale price
# Set taxes before unit_price to have taxes in context of sale price
taxes = []
pattern = self._get_tax_rule_pattern()
for tax in self.product.customer_taxes_used:
@@ -286,13 +209,11 @@ class SaleLine(metaclass=PoolMeta):
category = self.product.sale_uom.category
if not self.unit or self.unit.category != category:
self.unit = self.product.sale_uom
# self.unit_digits = self.product.sale_uom.digits
self.unit_digits = self.product.sale_uom.digits
with Transaction().set_context(self._get_context_sale_price()):
self.unit_price = Product.get_sale_price(
[self.product],
self.quantity or 0
)[self.product.id]
self.unit_price = Product.get_sale_price([self.product],
self.quantity or 0)[self.product.id]
if self.unit_price:
self.unit_price = self.unit_price.quantize(
@@ -324,8 +245,9 @@ class SaleLine(metaclass=PoolMeta):
if (shipment_type == 'out') != (self.quantity >= 0):
return
quantity = (self._get_move_quantity(shipment_type)
- self._get_shipped_quantity(shipment_type))
- self._get_shipped_quantity(shipment_type))
quantity = self.unit.round(quantity)
@@ -335,12 +257,12 @@ class SaleLine(metaclass=PoolMeta):
if not self.sale.party.customer_location:
raise PartyLocationError(
gettext('sale.msg_sale_customer_location_required',
sale=self.sale.rec_name,
party=self.sale.party.rec_name))
sale=self.sale.rec_name,
party=self.sale.party.rec_name))
move = Move()
move.quantity = quantity
move.unit = self.unit
move.uom = self.unit
move.product = self.product
move.from_location = self.from_location
move.to_location = self.to_location
@@ -356,32 +278,3 @@ class SaleLine(metaclass=PoolMeta):
move.origin = self
return move
class SaleDate(ModelView):
'Confirmacíon Fecha de Venta'
__name__ = 'optical_equipment.confirm_sale_date.form'
sale_date = fields.Date("Fecha Venta", required=True)
class ConfirmSaleDate(Wizard):
'Confirmacíon Fecha de Venta'
__name__ = 'optical_equipment.confirm_sale_date'
start = StateView('optical_equipment.confirm_sale_date.form',
'optical_equipment.confirm_sale_date_view_form', [
Button('Confirmar', 'confirm_date',
'tryton-ok', default=True),
])
confirm_date = StateAction('sale.act_sale_form')
def default_start(self, fields):
if self.record:
return {'sale_date': self.record.sale_date}
def do_confirm_date(self, action):
self.record.sale_date = self.start.sale_date
self.record.state = 'processing'
self.record.save()

100
sale.xml
View File

@@ -1,80 +1,26 @@
<?xml version="1.0"?>
<!--This file file is part of Tryton. The COPYRIGHT file at the top level
of this repository contains the full copyright notices and license terms. -->
<!--This file file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="sale_view_tree">
<field name="model">sale.sale</field>
<field name="inherit" ref="sale.sale_view_tree"/>
<field name="name">sale_tree</field>
</record>
<record model="ir.ui.view" id="sale_view_form">
<field name="model">sale.sale</field>
<field name="inherit" ref="sale.sale_view_form"/>
<field name="name">sale_form</field>
</record>
<record model="ir.ui.view" id="product_view_list_sale_line">
<field name="model">product.product</field>
<field name="inherit" ref="sale.product_view_list_sale_line"/>
<field name="name">product_list_sale_line</field>
</record>
<record model="ir.sequence" id="sequence_quote_sale">
<field name="name">Sale Quote</field>
<field name="sequence_type" ref="sale.sequence_type_sale"/>
</record>
<record model="ir.action.report" id="sale.report_sale">
<field name="active" eval="False"/>
</record>
<record model="ir.model.button" id="report_balance_party_sale">
<field name="name">report</field>
<field name="string">Estado de Cuenta</field>
<field name="model" search="[('model', '=', 'sale.sale')]"/>
</record>
<record model="ir.ui.view" id="confirm_sale_date_view_form">
<field name="model">optical_equipment.confirm_sale_date.form</field>
<field name="type">form</field>
<field name="name">confirm_sale_date_form</field>
</record>
<record model="ir.action.wizard" id="wizard_confirm_sale_date">
<field name="name">Confirm Sale Date</field>
<field name="wiz_name">optical_equipment.confirm_sale_date</field>
</record>
<record model="ir.action.report" id="report_sale">
<field name="name">Sale Equipments</field>
<field name="model">sale.sale</field>
<field name="report_name">sale.sale</field>
<field name="report">optical_equipment/report/Sale_Internal.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_sale_keyword">
<field name="keyword">form_print</field>
<field name="model">sale.sale,-1</field>
<field name="action" ref="report_sale"/>
</record>
<record model="ir.action.report" id="report_sale_internal">
<field name="name">Sale Equipments Internal</field>
<field name="model">sale.sale</field>
<field name="report_name">sale.sale</field>
<field name="report">optical_equipment/report/Sale.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_sale_internal_keyword">
<field name="keyword">form_print</field>
<field name="model">sale.sale,-1</field>
<field name="action" ref="report_sale_internal"/>
</record>
<record model="ir.action.report" id="report_payment">
<field name="name">Payment</field>
<field name="model">account.statement.line</field>
<field name="report_name">account.statement.line</field>
<field name="report">optical_equipment/report/Payment.fodt</field>
<field name="single" eval="True"/>
</record>
<!--
<record model="ir.action.keyword" id="report_payment_keyword">
<field name="keyword">form_print</field>
<field name="model">account.statement.line,-1</field>
<field name="action" ref="report_payment"/>
</record> -->
</data>
<record model="ir.ui.view" id="sale_view_form">
<field name="model">sale.sale</field>
<field name="inherit" ref="sale.sale_view_form"/>
<field name="name">sale_form</field>
</record>
<record model="ir.ui.view" id="product_view_list_sale_line">
<field name="model">product.product</field>
<field name="inherit" ref="sale.product_view_list_sale_line"/>
<field name="name">product_list_sale_line</field>
</record>
<record model="ir.action.report" id="report_sale">
<field name="name">Sale Equipments</field>
<field name="model">sale.sale</field>
<field name="report_name">sale.sale</field>
<field name="report">optical_equipment/report/Sale.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_sale_keyword">
<field name="keyword">form_print</field>
<field name="model">sale.sale,-1</field>
<field name="action" ref="report_sale"/>
</record>
</tryton>

View File

@@ -69,20 +69,20 @@ if minor_version % 2:
setup(name=name,
version=version,
description='',
description='Modúlo a medida para optica',
long_description=read('README.rst'),
author='Tryton',
author_email='bugs@tryton.org',
author='OneTeam',
author_email='info@onecluster.org',
url='http://www.tryton.org/',
keywords='',
package_dir={'trytond.modules.optical_equipment': '.'},
package_dir={'trytond.modules.smart_vision': '.'},
packages=(
['trytond.modules.optical_equipment']
+ ['trytond.modules.optical_equipment.%s' % p
['trytond.modules.smart_vision']
+ ['trytond.modules.smart_vision.%s' % p
for p in find_packages()]
),
package_data={
'trytond.modules.optical_equipment': (info.get('xml', [])
'trytond.modules.smart_vision': (info.get('xml', [])
+ ['tryton.cfg', 'view/*.xml', 'locale/*.po', '*.fodt',
'icons/*.svg', 'tests/*.rst']),
},
@@ -115,7 +115,6 @@ setup(name=name,
'Natural Language :: Slovenian',
'Natural Language :: Spanish',
'Natural Language :: Turkish',
'Natural Language :: Ukrainian',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.7',
@@ -135,6 +134,6 @@ setup(name=name,
zip_safe=False,
entry_points="""
[trytond.modules]
optical_equipment = trytond.modules.optical_equipment
smart_vision = trytond.modules.smart_vision
""", # noqa: E501
)

View File

@@ -2,11 +2,9 @@
<!--This file file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="shipment_out_view_form">
<field name="model">stock.shipment.out</field>
<field name="inherit" ref="stock.shipment_out_view_form"/>
<field name="name">shipment_out_form</field>
</record>
</data>
<record model="ir.ui.view" id="shipment_out_view_form">
<field name="model">stock.shipment.out</field>
<field name="inherit" ref="stock.shipment_out_view_form"/>
<field name="name">shipment_out_form</field>
</record>
</tryton>

View File

@@ -1,2 +0,0 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -1,495 +0,0 @@
===========================
Optical Equipment Scenario
===========================
Imports::
>>> from proteus import Model, Wizard
>>> from trytond.tests.tools import activate_modules, set_user
>>> from datetime import date, timedelta, datetime
>>> import xml.etree.ElementTree as ET
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.account.tests.tools import (create_chart, create_fiscalyear, create_tax, get_accounts)
>>> from trytond.modules.account_invoice.tests.tools import (create_payment_term, set_fiscalyear_invoice_sequences)
>>> from decimal import Decimal
>>> import datetime
>>> today = datetime.date.today()
>>> from trytond.tools import file_open
Activate modules::
>>> config = activate_modules('optical_equipment')
Create company::
>>> _ = create_company()
>>> company = get_company()
Create user admin::
>>> Group = Model.get("res.group")
>>> User = Model.get("res.user")
>>> user = User(config.user)
>>> user.login = "admin"
>>> user.save()
>>> group, = Group().find(["name", "=", "Administration"])
>>> group
proteus.Model.get('res.group')(1)
>>> group_equipment, = Group().find(["name", "=", "Equipment Administration"])
>>> group_equipment
proteus.Model.get('res.group')(18)
>>> group.users.append(user)
>>> group.save()
>>> group_equipment.users
[proteus.Model.get('res.user')(1)]
Set employee::
>>> User = Model.get('res.user')
>>> Party = Model.get('party.party')
>>> Employee = Model.get('company.employee')
>>> employee_party = Party(name="Employee")
>>> employee_party.save()
>>> employee = Employee(party=employee_party)
>>> employee.save()
>>> user = User(config.user)
>>> user.employees.append(employee)
>>> user.employee = employee
>>> user.save()
>>> set_user(user.id)
Create fiscal year::
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear(company))
>>> fiscalyear.click('create_period')
Create chart of accounts::
>>> _ = create_chart(company)
>>> accounts = get_accounts(company)
>>> accounts
{'receivable': proteus.Model.get('account.account')(5), 'payable': proteus.Model.get('account.account')(4), 'revenue': proteus.Model.get('account.account')(6), 'expense': proteus.Model.get('account.account')(3), 'cash': proteus.Model.get('account.account')(2), 'tax': proteus.Model.get('account.account')(7)}
>>> revenue = accounts['revenue']
>>> expense = accounts['expense']
>>> cash = accounts['cash']
>>> Journal = Model.get('account.journal')
>>> PaymentMethod = Model.get('account.invoice.payment.method')
>>> cash_journal, = Journal.find([('type', '=', 'cash')])
>>> cash_journal.save()
>>> payment_method = PaymentMethod()
>>> payment_method.name = 'Cash'
>>> payment_method.journal = cash_journal
>>> payment_method.credit_account = cash
>>> payment_method.debit_account = cash
>>> payment_method.save()
Create tax::
>>> tax = create_tax(Decimal('.10'))
>>> tax.save()
Create configuration equipment::
>>> Config = Model.get("optical_equipment.configuration")
>>> UOM = Model.get("product.uom")
>>> celsius = UOM.find([("name", "=", "Celsius")])
>>> celsius
[proteus.Model.get('product.uom')(39)]
>>> moisture = UOM.find([("name", "=", "Relative Humedity")])
>>> moisture
[proteus.Model.get('product.uom')(42)]
>>> config = Config().find([])[0]
>>> equipment_sequence, = Model.get("ir.sequence").find(["name", "=", "Equipment"])
>>> equipment_sequence
proteus.Model.get('ir.sequence')(14)
>>> config.technician_responsible = employee
>>> with file_open("optical_equipment/tests/files/signature.png", "rb") as signature:
... config.technician_signature = signature.read()
>>> config.invima = "RH-202309-02409"
>>> config.equipment_sequence = equipment_sequence
>>> maintenance_sequence, = Model.get("ir.sequence").find(["name", "=", "Maintenance"])
>>> maintenance_sequence
proteus.Model.get('ir.sequence')(15)
>>> config.maintenance_sequence = maintenance_sequence
>>> agended_sequence, = Model.get("ir.sequence").find(["name", "=", "Agended"])
>>> agended_sequence
proteus.Model.get('ir.sequence')(13)
>>> config.agended_sequence = agended_sequence
>>> contract_sequence, = Model.get("ir.sequence").find(["name", "=", "Contract"])
>>> contract_sequence
proteus.Model.get('ir.sequence')(12)
>>> config.contract_sequence = contract_sequence
>>> sale_quote_number, = Model.get("ir.sequence").find(["name", "=", "Sale Quote"])
>>> sale_quote_number
proteus.Model.get('ir.sequence')(16)
>>> config.sale_quote_number = sale_quote_number
>>> config.temperature_min = 19
>>> config.temperature_max = 21
>>> config.temperature_uom = celsius[0]
>>> config.moisture_min = 43
>>> config.moisture_max = 45
>>> config.moisture_uom = moisture[0]
>>> config.save()
Create supplier::
>>> Party = Model.get('party.party')
>>> supplier = Party(name='Supplier')
>>> supplier.save()
Create customer type optica::
>>> customer_optica = Party(name='Customer optica', customer_type='optica')
>>> customer_optica.save()
>>> customer_optica.customer_type
'optica'
Create customer type ips::
>>> customer_ips = Party(name='Customer ips', customer_type='ips')
>>> customer_ips.save()
>>> customer_ips.customer_type
'ips'
Creaate contact optica::
>>> local_phone = customer_optica.contact_mechanisms.new()
>>> local_phone.type = 'phone'
>>> local_phone.value = '666666666'
>>> local_phone.value
'666666666'
Creaate contact ips::
>>> local_phone = customer_ips.contact_mechanisms.new()
>>> local_phone.type = 'phone'
>>> local_phone.value = '666666666'
>>> local_phone.value
'666666666'
Create account categories::
>>> ProductCategory = Model.get('product.category')
>>> optical_equitment_category = ProductCategory(name="Optical Equipment")
>>> optical_equitment_category.accounting = True
>>> optical_equitment_category.account_expense = expense
>>> optical_equitment_category.account_revenue = revenue
>>> children_1 = optical_equitment_category.childs.new(name="Optical Mobiliario")
>>> optical_equitment_category.save()
>>> len(optical_equitment_category.childs)
1
Create taxes::
>>> optical_equitment_category_tax, = optical_equitment_category.duplicate()
>>> optical_equitment_category_tax.customer_taxes.append(tax)
>>> optical_equitment_category_tax.save()
Create mark, model and reference category::
>>> mark_category = ProductCategory(name="ADLER")
>>> mark_category.save()
>>> model_category = ProductCategory(name="ADLER_01", parent=mark_category)
>>> model_category.save()
>>> reference_category = ProductCategory(name="ADLER_01", parent=model_category)
>>> reference_category.save()
>>> mark_category.childs
[proteus.Model.get('product.category')(6)]
Create product optical equipment::
>>> ProductUom = Model.get('product.uom')
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> ProductTemplate = Model.get('product.template')
>>> template = ProductTemplate()
>>> template.name = 'UNIDAD REFRACCION ESTANDAR'
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.purchasable = True
>>> template.equipment = True
>>> template.list_price = Decimal('10')
>>> template.account_category = optical_equitment_category_tax
>>> template.maintenance_required = True
Mark Maintenance Activities::
>>> template.initial_operation = True
>>> template.check_equipment = True
>>> template.check_electric_system = True
>>> template.clean_int_ext = True
>>> template.preventive_activities = "Se verificaron las condiciones ambientales, se verificó estado físico del equipo, se verificó funcionamiento, se verificó tomas eléctricas y conexiones, se verificó el estado de los pulsadores, se verificó que el motor de la silla suba y baje, se realizó limpieza general, se lubricaron partes que lo requieren, se confirmó nuevamente funcionamiento."
Mark Calibration Required::
>>> template.calibration = True
>>> template.uncertainy_pattern = 0.1
>>> template.k_pattern = '-5.00'
>>> UsePattern = Model.get('optical_equipment.use_pattern')
>>> schematic_eye, = UsePattern.find([('name_pattern', '=', 'Schematic Eye')])
>>> template.use_pattern = schematic_eye
>>> k_pattern = template.k_pattern_list.new(pattern=-5)
>>> k_pattern.save()
>>> template.MEP = 0.1
>>> template.Usubi = 200
>>> template.resolution_type = 'digital'
>>> template.d_resolution = 0.25
>>> template.equipment_type = 'mobiliario_optico'
>>> template.biomedical_class = 'diagnostico'
>>> template.main_tecnology = 'electronico'
>>> template.mark_category = mark_category
>>> template.model_category = model_category
>>> template.use = 'medico'
>>> template.reference_category = reference_category
>>> template.save()
>>> len(template.k_pattern_list)
1
>>> product, = template.products
>>> product.name
'UNIDAD REFRACCION ESTANDAR'
Create Product Maintenance Service::
>>> maintenanceServiceProduct = ProductTemplate()
>>> maintenanceServiceProduct.name = 'Mantenimiento Correctivo'
>>> maintenanceServiceProduct.maintenance_activity = True
>>> maintenanceServiceProduct.default_uom = unit
>>> maintenanceServiceProduct.type = 'service'
>>> maintenanceServiceProduct.salable = True
>>> maintenanceServiceProduct.purchasable = True
>>> maintenanceServiceProduct.list_price = Decimal('10')
>>> maintenanceServiceProduct.account_category = optical_equitment_category_tax
>>> maintenanceServiceProduct.save()
>>> product1, = maintenanceServiceProduct.products
>>> product1.name
'Mantenimiento Correctivo'
Create payment term::
>>> payment_term = create_payment_term()
>>> payment_term.save()
Purchase 5 products:
>>> Purchase = Model.get('purchase.purchase')
>>> PurchaseLine = Model.get('purchase.line')
>>> purchase = Purchase()
>>> purchase.party = supplier
>>> purchase.payment_term = payment_term
>>> purchase.invoice_method = 'order'
>>> purchase_line = PurchaseLine()
>>> purchase.lines.append(purchase_line)
>>> purchase_line.product = product
>>> purchase_line.quantity = 2.0
>>> purchase_line.product_equipment
True
>>> purchase_line.unit_price = Decimal('6182237.0000')
>>> purchase_line.health_register = 'COL123evergreen'
>>> purchase.click('quote')
>>> purchase.click('confirm')
>>> purchase.click('create_equipments')
>>> Equipment = Model.get('optical_equipment.equipment')
>>> equipments = Equipment.find()
>>> equipments
[proteus.Model.get('optical_equipment.equipment')(1), proteus.Model.get('optical_equipment.equipment')(2)]
>>> len(equipments)
2
>>> purchase.equipment_create
1
Finalize the purchase inventory movements::
>>> for move in purchase.moves:
... move.click('do')
Registred equipment without serial::
>>> equipment_1 = equipments[0]
>>> equipment_2 = equipments[1]
>>> equipment_1.click('registred') # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
UserError: ...
>>> equipment_1.serial = "2020DM-0021167"
>>> equipment_1.click('registred')
>>> equipment_2.serial = "2020DM-002119"
>>> equipment_2.click('registred')
First sale::
>>> Sale = Model.get('sale.sale')
>>> SaleLine = Model.get('sale.line')
>>> sale = Sale()
>>> sale.party = customer_optica
>>> sale.contact = local_phone
>>> sale.description = 'El producto se debe entregar el fin de semana'
>>> sale.sale_date = today
>>> sale.sale_type = 'equipments'
>>> sale.payment_term = payment_term
>>> sale.invoice_method = 'order'
>>> sale_line = SaleLine()
>>> sale.lines.append(sale_line)
>>> sale_line.product = product
>>> sale_line.quantity = 2.0
>>> sale_line = SaleLine()
>>> sale.lines.append(sale_line)
>>> sale_line.type = 'comment'
>>> sale_line.description = 'Comment'
>>> sale_line = SaleLine()
>>> sale.lines.append(sale_line)
>>> sale_line.product = product
>>> sale_line.quantity = 3.0
>>> sale.click('quote')
>>> SaleConfirmDate = sale.click('confirm')
>>> SaleConfirmDate.form.sale_date == today
True
>>> SaleConfirmDate.execute('confirm_date')
>>> sale.state
'processing'
>>> sale.shipments
[proteus.Model.get('stock.shipment.out')(1)]
Duplicate Sale::
>>> sale.duplicate()
[proteus.Model.get('sale.sale')(2)]
Return Sale::
>>> SaleReturn = Wizard('sale.return_sale', [sale])
>>> SaleReturn.execute('return_')
Verify that the sale state could be returned to the draft state::
>>> sale.click("draft")
>>> sale.state
'draft'
>>> sale_line = SaleLine()
>>> sale.lines.append(sale_line)
>>> sale_line.product = product
>>> sale_line.quantity = 2.0
>>> sale.click('quote')
>>> SaleConfirmDate = sale.click('confirm')
>>> SaleConfirmDate.execute('confirm_date')
>>> sale.shipments
[proteus.Model.get('stock.shipment.out')(1), proteus.Model.get('stock.shipment.out')(2)]
Verify that the shipment cannot be assigned if the shipment lines do not have equipment::
>>> shipment_one = sale.shipments[0]
>>> shipment_one.click('pick') # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
ValidationError: ...
Restrict assignment when the shipment has no serialized items::
>>> shipment_one = sale.shipments[0]
>>> line_one = shipment_one.inventory_moves[0]
>>> line_one.equipment = equipment_1
>>> line_one.equipment_serial
'2020DM-0021167'
>>> line_two = shipment_one.inventory_moves[1]
>>> line_two.equipment = equipment_2
>>> line_two.equipment_serial
'2020DM-002119'
>>> shipment_one.click('assign_try')
>>> shipment_one.click('pick')
>>> shipment_one.click('pack')
>>> shipment_one.click('done')
Create a new Maintenance Service::
>>> shipment_one.click('maintenance_initial')
>>> MantenanceServices = Model.get("optical_equipment_maintenance.service")
>>> mantenanceServices, = MantenanceServices.find()
>>> mantenanceServices
proteus.Model.get('optical_equipment_maintenance.service')(1)
>>> mantenanceServices.state
'draft'
>>> MaintenanceLines = Model.get("optical_equipment.maintenance")
>>> maintenanceLines = MaintenanceLines.find()
>>> maintenanceLines
[proteus.Model.get('optical_equipment.maintenance')(1), proteus.Model.get('optical_equipment.maintenance')(2)]
>>> maintenanceLines[0].state
'draft'
>>> maintenance_1 = maintenanceLines[0]
>>> maintenance_2 = maintenanceLines[1]
>>> maintenance_1.equipment.state
'uncontrated'
>>> maintenance_1.equipment.propietary == customer_optica
True
>>> maintenance_1.equipment.propietary_address.street
>>> maintenance_2.equipment.state
'uncontrated'
>>> maintenance_2.equipment.propietary == customer_optica
True
>>> maintenance_2.equipment.propietary_address.street
Assing schedule to maintenance service::
>>> AssingSchedule = Wizard('optical_equipment_maintenance.assing_agended', [mantenanceServices])
>>> AssingSchedule.form.estimated_agended = datetime.datetime.now()
>>> AssingSchedule.form.technical = employee
>>> AssingSchedule.execute('assing_agended')
>>> mantenanceServices.state
'agended'
>>> mantenanceServices.click('in_progress')
>>> mantenanceServices.state
'in_progress'
>>> mantenanceServices.lines
[proteus.Model.get('optical_equipment.maintenance')(1), proteus.Model.get('optical_equipment.maintenance')(2)]
Calibrate Maintenance Lines::
>>> mantenance_lines = mantenanceServices.lines
>>> mantenance_line_one = mantenance_lines[0]
>>> mantenance_line_two = mantenance_lines[1]
>>> mantenance_line_one.click('samples')
>>> len(mantenance_line_one.lines_calibration)
5
>>> mantenance_line_one.click('calibrate')
>>> mantenance_line_one.calibration_total
[proteus.Model.get('optical_equipment.maintenance.calibration')(1)]
>>> len(mantenance_line_one.graph_calibration)
14857
>>> mantenance_line_one.click('finished')
>>> mantenance_line_one.state
'finished'
Finished Maintenance Service::
>>> mantenanceServices.click('finished') # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
ValidationError: ...
>>> mantenance_line_two.click('samples')
>>> len(mantenance_line_two.lines_calibration)
5
>>> mantenance_line_two.click('calibrate')
>>> mantenance_line_two.calibration_total
[proteus.Model.get('optical_equipment.maintenance.calibration')(2)]
>>> len(mantenance_line_two.graph_calibration)
14857
>>> mantenance_line_two.click('finished')
>>> mantenanceServices.click('finished')
>>> mantenanceServices.state
'finished'
Create a New Contract::
Sale Maintenance Service::
>>> sale2 = Sale()
>>> sale2.party = customer_optica
>>> sale2.contact = local_phone
>>> sale2.description = 'El producto se debe entregar el fin de semana'
>>> sale2.sale_date = today
>>> sale2.sale_type = 'maintenance'
>>> sale2.maintenance_type = 'corrective'
>>> sale2.payment_term = payment_term
>>> sale2.invoice_method = 'order'
>>> sale_line = SaleLine()
>>> sale2.lines.append(sale_line)
>>> sale_line.product = product1
>>> sale_line.quantity = 1.0
>>> sale2.click('quote')
>>> SaleConfirmDate = sale2.click('confirm')
>>> SaleConfirmDate.form.sale_date == today
True
>>> SaleConfirmDate.execute('confirm_date')
>>> sale2.state
'processing'
>>> sale2.shipments
[]

View File

@@ -2,9 +2,9 @@
from trytond.tests.test_tryton import ModuleTestCase
class OpticalEquipmentTestCase(ModuleTestCase):
"Test Optical Equipment module"
module = 'optical_equipment'
class SmartVisionTestCase(ModuleTestCase):
"Test Smart Vision module"
module = 'smart_vision'
del ModuleTestCase

View File

@@ -1,8 +0,0 @@
# 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.tests.test_tryton import load_doc_tests
def load_tests(*args, **kwargs):
return load_doc_tests(__name__, __file__, *args, **kwargs)

View File

@@ -4,8 +4,8 @@ envlist = {py37,py38,py39,py310}-{sqlite,postgresql}
[testenv]
extras = test
commands =
coverage run --include=./**/optical_equipment/* -m unittest discover -s tests
coverage report --include=./**/optical_equipment/* --omit=*/tests/*
coverage run --include=.*/smart_vision/* -m unittest discover -s tests
coverage report --include=.*/smart_vision/* --omit=*/tests/*
deps =
coverage
postgresql: psycopg2 >= 2.7.0

View File

@@ -1,31 +1,34 @@
[tryton]
version=7.0.0
version=6.6
depends:
ir
company
account_product
party
company
account_co_co
account_co_pyme
account_invoice
account_stock_continental
product
product_attribute
product_image
product_measurements
purchase
sale
stock
country
sale_history
sale_advance_payment
sale_amendment
xml:
company.xml
equipment.xml
calibration.xml
contract.xml
diary.xml
agended.xml
configuration.xml
maintenance.xml
move.xml
party.xml
uom.xml
product.xml
purchase.xml
sale.xml
balance_sale_party.xml
shipment.xml
messages.xml
address.xml
party.xml
product.xml
equipment.xml
contract.xml
configuration_equipment.xml
sale.xml
purchase.xml
uom.xml
move.xml
message.xml
diary.xml
maintenance.xml
shipment.xml

View File

@@ -7,7 +7,7 @@ this repository contains the full copyright notices and license terms. -->
<label name="party_related"/>
<field name="party_related"/>
</xpath>
<xpath expr="/form/group[@id='checkboxes']/field[@name='active']" position="after">
<xpath expr="/form/group[@id='checkboxes']/field[@name='delivery']" position="after">
<label name="campus"/>
<field name="campus"/>
</xpath>

View File

@@ -2,7 +2,7 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<!-- <xpath expr="//field[@name='street']" position="replace"> -->
<!-- <field name="street" expand="1"/> -->
<!-- </xpath> -->
<xpath expr="//field[@name='name']" position="after">
<field name="street" expand="1"/>
</xpath>
</data>

View File

@@ -1,35 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="diopter"/>
<field name="diopter"/>
<label name="dev_std"/>
<field name="dev_std"/>
<label name="uncertain_type_A"/>
<field name="uncertain_type_A"/>
<label name="uncertain_pattern"/>
<field name="uncertain_pattern"/>
<label name="k_c_calibration"/>
<field name="k_c_calibration"/>
<label name="uncertain_U_b1"/>
<field name="uncertain_U_b1"/>
<label name="d_resolution"/>
<field name="d_resolution"/>
<label name="uncertain_U_b2_dig"/>
<field name="uncertain_U_b2_dig"/>
<label name="uncertain_U_b2_ana"/>
<field name="uncertain_U_b2_ana"/>
<label name="uncertain_combinated"/>
<field name="uncertain_combinated"/>
<label name="uncertain_eff"/>
<field name="uncertain_eff"/>
<label name="t_student"/>
<field name="t_student"/>
<label name="uncertain_expanded"/>
<field name="uncertain_expanded"/>
<label name="graph_dates"/>
<field name="graph_dates"/>
<label name="state"/>
<field name="state"/>
</form>

View File

@@ -2,11 +2,8 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level
this repository contains the full copyright notices and license terms. -->
<form>
<label name="old_propietary"/>
<field name="old_propietary"/>
<newline/>
<field name="equipments" colspan="3"/>
<newline/>
<label name="equipment"/>
<field name="equipment" colspan="3"/>
<label name="new_propietary"/>
<field name="new_propietary" colspan="3"/>
<label name="new_address"/>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level
this repository contains the full copyright notices and license terms. -->
<form>
<label name="old_propietary"/>
<field name="old_propietary"/>
<newline/>
<field name="maintenance_service" colspan="3"/>
<newline/>
<label name="new_propietary"/>
<field name="new_propietary" colspan="3"/>
<label name="new_address"/>
<field name="new_address" colspan="3"/>
<label name="change_date"/>
<field name="change_date" colspan="3"/>
</form>

View File

@@ -1,54 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<separator id="sequences" string="Sequences" colspan="4"/>
<newline/>
<label name="equipment_sequence"/>
<field name="equipment_sequence"/>
<newline/>
<label name="maintenance_sequence"/>
<field name="maintenance_sequence"/>
<newline/>
<label name="agended_sequence"/>
<field name="agended_sequence"/>
<newline/>
<label name="contract_sequence"/>
<field name="contract_sequence"/>
<newline/>
<label name="sale_quote_number"/>
<field name="sale_quote_number"/>
<newline/>
<separator id="environmental_conditions" string="Environmental Conditions" colspan="4"/>
<newline/>
<label name="temperature_min"/>
<field name="temperature_min"/>
<newline/>
<label name="temperature_max"/>
<field name="temperature_max"/>
<newline/>
<label name="temperature_uom"/>
<field name="temperature_uom"/>
<newline/>
<label name="moisture_min"/>
<field name="moisture_min"/>
<newline/>
<label name="moisture_max"/>
<field name="moisture_max"/>
<newline/>
<label name="moisture_uom"/>
<field name="moisture_uom"/>
<newline/>
<separator id="technician_responsible" string="Technician Responsible" colspan="4"/>
<label name="technician_responsible"/>
<field name="technician_responsible"/>
<label name="invima"/>
<field name="invima"/>
<label name="technician_signature"/>
<field name="technician_signature"/>
</form>

View File

@@ -27,14 +27,11 @@ this repository contains the full copyright notices and license terms. -->
<field name="maintenance_services"/>
</page>
<page string="Equipments" id="equipments">
<field name="current_equipments"/>
</page>
<page string="History Equipments" id="history_equipments">
<field name="history_equipments"/>
<field name="equipments"/>
</page>
<page string="Other Info" id="other">
<!-- <label name="company"/> -->
<!-- <field name="company"/> -->
<label name="company"/>
<field name="company"/>
</page>
</notebook>
<label name="price_contract"/>
@@ -42,9 +39,8 @@ this repository contains the full copyright notices and license terms. -->
<newline/>
<label name="state"/>
<field name="state"/>
<group col="6" id="button">
<button name="draft"/>
<button name="closed"/>
<group col="2" colspan="2" id="button">
<!--<button name="draft"/> -->
<button name="cancelled"/>
<button name="running"/>
</group>

9
view/contract_tree.xml Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0"?>
<!--This file file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
<tree>
<field name="number"/>
<field name="reference"/>
<field name="party"/>
<field name="start_date"/>
<field name="end_date"/>
</tree>

View File

@@ -2,22 +2,16 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level
this repository contains the full copyright notices and license terms. -->
<form>
<group id="create_contract" col="2">
<group id="create_contract">
<label name="party"/>
<field name="party"/>
<newline/>
<label name="invoice_address"/>
<field name="invoice_address"/>
<newline/>
<label name="contact"/>
<field name="contact"/>
<newline/>
<label name="invoice_address"/>
<field name="invoice_address"/>
<label name="start_date"/>
<field name="start_date"/>
<label name="end_date"/>
<field name="end_date"/>
<newline/>
<label name="unit_price"/>
<field name="unit_price"/>
</group>
</form>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form col="2">
<image name="tryton-question" xexpand="0" xfill="0"/>
<group col="2" xexpand="1" id="create_date">
<label string="Create Subscription Invoices for date" id="create"/>
<field name="date"/>
</group>
</form>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level
this repository contains the full copyright notices and license terms. -->
<form>
<group id="create_prorogue">
<label name="party"/>
<field name="party"/>
<label name="contact"/>
<field name="contact"/>
<newline/>
<label name="initial_contract"/>
<field name="initial_contract" colspan="3"/>
<label name="invoice_address"/>
<field name="invoice_address"/>
<label name="payment_term"/>
<field name="payment_term"/>
<newline/>
<label name="invoice_recurrence"/>
<field name="invoice_recurrence"/>
<newline/>
<label name="start_date"/>
<field name="start_date"/>
<label name="end_date"/>
<field name="end_date"/>
<label name="invoice_start_date"/>
<field name="invoice_start_date"/>
<label name="service"/>
<field name="service"/>
<label name="quantity"/>
<field name="quantity"/>
<label name="unit_price"/>
<field name="unit_price"/>
</group>
<newline/>
<field name="equipments"/>
</form>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level
this repository contains the full copyright notices and license terms. -->
<form>
<group id="create_subscription">
<label name="party"/>
<field name="party"/>
<label name="contact"/>
<field name="contact"/>
<label name="invoice_address"/>
<field name="invoice_address"/>
<label name="invoice_recurrence"/>
<field name="invoice_recurrence"/>
<label name="start_date"/>
<field name="start_date"/>
<label name="end_date"/>
<field name="end_date"/>
<label name="invoice_start_date"/>
<field name="invoice_start_date"/>
<label name="service"/>
<field name="service"/>
<label name="quantity"/>
<field name="quantity"/>
<label name="unit_price"/>
<field name="unit_price"/>
<label name="payment_term"/>
<field name="payment_term"/>
</group>
<newline/>
<field name="equipments"/>
</form>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//field[@name='supervisor']" position="after">
<label name="invima"/>
<field name="invima"/>
<newline/>
</xpath>
</data>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="sale_date"/>
<field name="sale_date"/>
</form>
<calendar
dtstart="date_expected"
dtend="date_expected">
</calendar>

View File

@@ -1,9 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms.-->
<tree>
<field name="value_patterns" expand="1"/>
<field name="value_equipment" expand="1"/>
<field name="mistake" expand="1"/>
<field name="mistake_rate" expand="1"/>
</tree>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree editable="1">
<field name="name_pattern" expand="1"/>
</tree>
<data>
</data>

View File

@@ -1,11 +1,9 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<!-- <xpath expr="/form/field[@name='maintenance_type']" position="after"> -->
<!-- <label name="equipment"/> -->
<!-- <field name="equipment"/> -->
<!-- </xpath> -->
<label name="equipment"/>
<field name="equipment"/>
</form>
<data>
<xpath expr="/form/field[@name='maintenance_type']" position="after">
<label name="equipment"/>
<field name="equipment"/>
</xpath>
</data>

View File

@@ -16,8 +16,6 @@
<field name="equipment"/>
<label name="service_maintenance"/>
<field name="service_maintenance"/>
<label name="equipment_calibrate"/>
<field name="equipment_calibrate"/>
<newline/>
<label name="description_activity"/>
<field name="description_activity" colspan="3"/>
@@ -33,6 +31,8 @@
<field name="clean_int_ext"/>
<label name="clean_eyes"/>
<field name="clean_eyes"/>
<label name="optical"/>
<field name="optical"/>
<label name="check_calibration"/>
<field name="check_calibration"/>
</page>
@@ -65,7 +65,7 @@
<group colspan="6" yexpand="1" id="lines_calibration">
<field name="lines_calibration"/>
<newline/>
<field name="calibration_total" view_ids="optical_equipment.calibration_total_view_tree,optical_equipment.calibration_total_view_form"/>
<field name="calibration_total"/>
</group>
</page>
<page string="Graph" id="graph">
@@ -73,18 +73,11 @@
</page>
</notebook>
<newline/>
<label name="technician_responsible"/>
<field name="technician_responsible"/>
<label name="invima"/>
<field name="invima"/>
<label name="state"/>
<field name="state"/>
<group id="button">
<button name="in_progress"/>
<button name="finished"/>
<button name="samples"/>
<button name="calibrate"/>
</group>
</form>

View File

@@ -14,11 +14,9 @@
<label name="maintenance_activity"/>
<field name="maintenance_activity"/>
<newline/>
<label name="quantity"/>
<field name="quantity"/>
<label name="unit"/>
<field name="unit"/>
<newline/>
<label name="description"/>
<field name="description" xexpand="1"/>
<label name="quantity"/>
<field name="quantity"/>
</form>

View File

@@ -13,8 +13,4 @@
<field name="mistake"/>
<label name="mistake_rate"/>
<field name="mistake_rate"/>
<label name="product"/>
<field name="product" invisible="1"/>
<label name="maintenance" />
<field name="maintenance"/>
</form>

View File

@@ -21,59 +21,31 @@
<label name="maintenance_type"/>
<field name="maintenance_type"/>
<newline/>
<label name="temperature_min"/>
<field name="temperature_min"/>
<label name="temperature_max"/>
<field name="temperature_max"/>
<label name="temperature_uom"/>
<field name="temperature_uom"/>
<label name="moisture_min"/>
<field name="moisture_min"/>
<label name="moisture_max"/>
<field name="moisture_max"/>
<label name="moisture_uom"/>
<field name="moisture_uom"/>
<notebook colspan="6">
<page string="General" id="general" col="2">
<label name="technical"/>
<field name="technical"/>
<newline/>
<label name="estimated_agended"/>
<field name="estimated_agended" widget="date"/>
<label name="estimated_agended" string="Hora"/>
<field name="estimated_agended" widget="time"/>
<page string="General" id="general">
<label name="state_agended"/>
<field name="state_agended"/>
<label name="technical"/>
<field name="technical"/>
<label name="estimated_agended"/>
<field name="estimated_agended"/>
</page>
<page string="Lines Of Mantenaince" id="lines_maintenance">
<field name="lines"/>
</page>
<page string="Agendes" id="agendes">
<group col="-1" id="current_agended">
<label name="current_agended"/>
<field name="current_agended"/>
</group>
<newline/>
<field name="history_agended"/>
</page>
<page string="Other Info" id="other_info">
<label name="company"/>
<field name="company"/>
<label name="technician_responsible"/>
<field name="technician_responsible"/>
<label name="invima"/>
<field name="invima"/>
</page>
</notebook>
<newline/>
<label name="state"/>
<field name="state"/>
<group id="button">
<button name="reassing_agended" string="Reassing Agended"/>
<button name="assing_agended" string="Assing Agended"/>
<button name="in_progress"/>
<button name="finished"/>
<button name="in_progress"/>
<button name="finished"/>
</group>
</form>

View File

@@ -3,7 +3,6 @@
this repository contains the full copyright notices and license terms.-->
<tree>
<field name="code"/>
<field name="maintenance_type"/>
<field name="propietary"/>
<field name="propietary_address"/>
<field name="sale_origin"/>

View File

@@ -3,9 +3,6 @@
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="/form/field[@name='product']" position="after">
<newline/>
<label name="return_equipment"/>
<field name="return_equipment"/>
<newline/>
<label name="equipment"/>
<field name="equipment"/>

Some files were not shown because too many files have changed in this diff Show More