add reports
This commit is contained in:
parent
35c74076b5
commit
b387f2b10b
1440
locale/es.po
Normal file
1440
locale/es.po
Normal file
File diff suppressed because it is too large
Load Diff
255
move.py
Normal file
255
move.py
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
from trytond.model import fields, ModelSQL, ModelView, Workflow, dualmethod
|
||||||
|
from trytond.modules.company import CompanyReport
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
class Move(metaclass=PoolMeta):
|
||||||
|
"Stock Move"
|
||||||
|
__name__ = "stock.move"
|
||||||
|
|
||||||
|
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')
|
||||||
|
|
||||||
|
|
||||||
|
@fields.depends('product')
|
||||||
|
def get_product_equipment(self, product):
|
||||||
|
if self.product.equipment:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
@fields.depends('equipment')
|
||||||
|
def get_equipment_serial(self, equipment):
|
||||||
|
if self.equipment:
|
||||||
|
return self.equipment.serial
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
@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
|
||||||
|
self.equipment_serial = self.get_equipment_serial(self.equipment)
|
||||||
|
else:
|
||||||
|
self.equipment_serial = None
|
||||||
|
|
||||||
|
|
||||||
|
class ShipmentOut(metaclass=PoolMeta):
|
||||||
|
"Customer Shipment"
|
||||||
|
__name__ = 'stock.shipment.out'
|
||||||
|
|
||||||
|
service_maintenance_initial = fields.Boolean('Maintenance Initial', states={'readonly': True})
|
||||||
|
sale_type = fields.Char('Type sale origin')
|
||||||
|
|
||||||
|
@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'])))}
|
||||||
|
})
|
||||||
|
|
||||||
|
@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')
|
||||||
|
def done(cls, shipments):
|
||||||
|
pool = Pool()
|
||||||
|
Move = pool.get('stock.move')
|
||||||
|
Date = pool.get('ir.date')
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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])
|
||||||
|
for company, c_shipments in groupby(
|
||||||
|
shipments, key=lambda s: s.company):
|
||||||
|
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,
|
||||||
|
})
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@ModelView.button
|
||||||
|
def maintenance_initial(cls, shipments):
|
||||||
|
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:
|
||||||
|
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,
|
||||||
|
state='draft')
|
||||||
|
maintenanceService.save()
|
||||||
|
|
||||||
|
serial = False
|
||||||
|
for move in shipment.inventory_moves:
|
||||||
|
if move.product_equipment and move.equipment:
|
||||||
|
serial = True
|
||||||
|
elif not move.product_equipment:
|
||||||
|
serial = True
|
||||||
|
else:
|
||||||
|
serial = False
|
||||||
|
|
||||||
|
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,
|
||||||
|
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 = move.equipment.product.template.check_equipment,
|
||||||
|
check_electric_system = move.equipment.product.template.check_electric_system,
|
||||||
|
clean_int_ext = move.equipment.product.template.clean_int_ext,
|
||||||
|
clean_eyes = move.equipment.product.template.clean_eyes,
|
||||||
|
check_calibration = move.equipment.product.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()
|
||||||
|
shipment.service_maintenance_initial = True
|
||||||
|
shipment.save()
|
||||||
|
else:
|
||||||
|
raise UserError(str('Por favor Primero debe Asignar un serial a todos los Equipos.'))
|
||||||
|
|
||||||
|
|
||||||
|
class ShipmentInternal(metaclass=PoolMeta):
|
||||||
|
'Shipment Interncal'
|
||||||
|
__name__ = 'stock.shipment.internal'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@ModelView.button
|
||||||
|
@Workflow.transition('done')
|
||||||
|
@set_employee('done_by')
|
||||||
|
def done(cls, shipments):
|
||||||
|
pool = Pool()
|
||||||
|
Move = pool.get('stock.move')
|
||||||
|
Date = pool.get('ir.date')
|
||||||
|
|
||||||
|
for shipment in shipments:
|
||||||
|
for move in shipment.moves:
|
||||||
|
if move.equipment:
|
||||||
|
move.equipment.location = shipment.to_location
|
||||||
|
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')
|
||||||
|
|
||||||
|
|
||||||
|
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
|
42
move.xml
Normal file
42
move.xml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?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>
|
||||||
|
<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">
|
||||||
|
<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>
|
||||||
|
</tryton>
|
1606
report/CV_Equipment.fodt
Normal file
1606
report/CV_Equipment.fodt
Normal file
File diff suppressed because it is too large
Load Diff
1944
report/Calibration.fodt
Normal file
1944
report/Calibration.fodt
Normal file
File diff suppressed because it is too large
Load Diff
1170
report/Capacitation.fodt
Normal file
1170
report/Capacitation.fodt
Normal file
File diff suppressed because it is too large
Load Diff
4943
report/Contract.fodt
Normal file
4943
report/Contract.fodt
Normal file
File diff suppressed because it is too large
Load Diff
4756
report/Delivery_Certificated.fodt
Normal file
4756
report/Delivery_Certificated.fodt
Normal file
File diff suppressed because it is too large
Load Diff
1676
report/Maintenance_History.fodt
Normal file
1676
report/Maintenance_History.fodt
Normal file
File diff suppressed because it is too large
Load Diff
1512
report/Maintenance_Service.fodt
Normal file
1512
report/Maintenance_Service.fodt
Normal file
File diff suppressed because it is too large
Load Diff
1346
report/Maintenance_Timeline.fodt
Normal file
1346
report/Maintenance_Timeline.fodt
Normal file
File diff suppressed because it is too large
Load Diff
1596
report/Purchase.fodt
Normal file
1596
report/Purchase.fodt
Normal file
File diff suppressed because it is too large
Load Diff
5221
report/Sale.fodt
Normal file
5221
report/Sale.fodt
Normal file
File diff suppressed because it is too large
Load Diff
5698
report/Sale_Internal.fodt
Normal file
5698
report/Sale_Internal.fodt
Normal file
File diff suppressed because it is too large
Load Diff
10
shipment.xml
Normal file
10
shipment.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?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>
|
||||||
|
<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>
|
12
view/move_form.xml
Normal file
12
view/move_form.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?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="/form/field[@name='product']" position="after">
|
||||||
|
<newline/>
|
||||||
|
<label name="equipment"/>
|
||||||
|
<field name="equipment"/>
|
||||||
|
<label name="equipment_serial"/>
|
||||||
|
<field name="equipment_serial"/>
|
||||||
|
</xpath>
|
||||||
|
</data>
|
10
view/move_list_shipment.xml
Normal file
10
view/move_list_shipment.xml
Normal 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. -->
|
||||||
|
<data>
|
||||||
|
<xpath
|
||||||
|
expr="//field[@name='product']" position="after">
|
||||||
|
<field name="equipment"/>
|
||||||
|
<field name="equipment_serial"/>
|
||||||
|
</xpath>
|
||||||
|
</data>
|
14
view/shipment_out_form.xml
Normal file
14
view/shipment_out_form.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?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. -->
|
||||||
|
<data>
|
||||||
|
<xpath
|
||||||
|
expr="//field[@name='warehouse']" position="after">
|
||||||
|
<newline/>
|
||||||
|
<label name="service_maintenance_initial"/>
|
||||||
|
<field name="service_maintenance_initial"/>
|
||||||
|
</xpath>
|
||||||
|
<xpath
|
||||||
|
expr="//button[@name='wait']" position="after">
|
||||||
|
<button name="maintenance_initial"/>
|
||||||
|
</xpath>
|
||||||
|
</data>
|
Loading…
Reference in New Issue
Block a user