trytondo-optical_equipment/purchase.py

126 lines
4.7 KiB
Python

#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, ModelSQL, fields
from trytond.pyson import Eval, If, Bool
from trytond.exceptions import UserError
from trytond.i18n import gettext
from .exceptions import (
InvalidNumberPurchases)
class Purchase(metaclass=PoolMeta):
__name__ = 'purchase.purchase'
equipment_available = fields.Boolean("Equipments Availables", readonly=True)
@classmethod
def __setup__(cls):
super(Purchase, cls).__setup__()
cls._buttons.update({
'create_equipments': {
'invisible': If(Bool(Eval('equipment_available')), True)},
})
@classmethod
@ModelView.button
def create_equipments(cls, purchases):
if len(purchases) == 1:
pool = Pool()
Equipment = pool.get('optical_equipment.equipment')
Line = pool.get('purchase.line')
lines = []
purchase = purchases[0]
for line in purchase.lines:
if line.product.equipment:
equipment = Equipment(
company=line.company,
equipment_type=line.product.equipment_type,
party_address=line.address_equipment,
product=line.product,
risk=line.product.risk,
use=line.product.use,
biomedical_class=line.product.biomedical_class,
calibration=line.product.calibration,
refurbish=line.refurbish,
serial=line.serial_equipment,
software_version=line.product.software_version)
equipment.save()
else:
continue
purchase.equipment_available = True
cls.save(purchases)
#raise UserError(str(purchase.equipment_available))
else:
raise InvalidNumberPurchases(
gettext('purchase.msg_invalid_number_purchases'))
"""
@classmethod
@ModelView.button
def process(cls, purchases):
pool = Pool()
Equipment = pool.get('optical_equipment.equipment')
#raise UserError(str(type(Equipment)))
Line = pool.get('purchase.line')
lines = []
process, done = [], []
cls.lock(purchases)
for purchase in purchases:
if purchase.state not in {'confirmed', 'processing', 'done'}:
continue
purchase.create_invoice()
purchase.set_invoice_state()
purchase.create_move('in')
return_moves = purchase.create_move('return')
if return_moves:
purchase.create_return_shipment(return_moves)
purchase.set_shipment_state()
#raise UserError(str(dir(purchase)))
#equipment = Equipment()
for line in purchase.lines:
#raise UserError(str(dir(line)))
equipment = Equipment(
company=line.company,
equipment_type=line.product.equipment_type,
party_address=line.address_equipment,
product=line.product,
risk=line.product.risk,
use=line.product.use,
biomedical_class=line.product.biomedical_class,
calibration=line.product.calibration,
refurbish=line.refurbish,
serial=line.serial_equipment,
software_version=line.product.software_version,
)
equipment.save()
#raise UserError(str([equipment.serial, equipment.software_version]))
line.set_actual_quantity()
lines.append(line)
if purchase.is_done():
if purchase.state != 'done':
if purchase.state == 'confirmed':
process.append(purchase)
done.append(purchase)
elif purchase.state != 'processing':
process.append(purchase)
Line.save(lines)
if process:
cls.proceed(process)
if done:
cls.do(done)
"""
class Line(metaclass=PoolMeta):
__name__ = 'purchase.line'
address_equipment = fields.Many2One('party.address', "Direccion")
serial_equipment = fields.Char("Serial", size=None, required=True)
refurbish = fields.Boolean("Refurbish")