Files
tryton/purchase.py
T
2013-04-05 00:17:18 +02:00

110 lines
3.6 KiB
Python

#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 fields
from trytond.pyson import Eval
from trytond.pool import Pool, PoolMeta
__all__ = ['PurchaseRequest', 'Purchase', 'PurchaseLine', 'ProductSupplier',
'CreatePurchase']
__metaclass__ = PoolMeta
class PurchaseRequest:
__name__ = 'purchase.request'
customer = fields.Many2One('party.party', 'Customer', readonly=True,
states={
'invisible': ~Eval('customer'),
})
delivery_address = fields.Many2One('party.address', 'Delivery Address',
domain=[('party', '=', Eval('customer'))],
states={
'invisible': ~Eval('customer'),
'readonly': Eval('state') != 'draft',
},
depends=['customer', 'state'])
class Purchase:
__name__ = 'purchase.purchase'
customer = fields.Many2One('party.party', 'Customer', readonly=True,
states={
'invisible': ~Eval('customer'),
},
on_change=['customer', 'delivery_address'])
delivery_address = fields.Many2One('party.address', 'Delivery Address',
domain=[('party', '=', Eval('customer'))],
states={
'readonly': Eval('state') != 'draft',
'invisible': ~Eval('customer'),
},
depends=['state', 'customer'])
drop_shipments = fields.Function(fields.One2Many('stock.shipment.drop',
None, 'Drop Shipments',
states={
'invisible': ~Eval('customer'),
},
depends=['customer']),
'get_drop_shipments')
def on_change_customer(self):
result = {
'delivery_address': None,
}
delivery_address = None
if self.customer:
delivery_address = self.customer.address_get(type='delivery')
if delivery_address:
result['delivery_address'] = delivery_address.id
result['delivery_address.rec_name'] = delivery_address.rec_name
return result
def get_drop_shipments(self, name):
DropShipment = Pool().get('stock.shipment.drop')
return list(set(m.shipment.id for l in self.lines for m in l.moves
if isinstance(m.shipment, DropShipment)))
class PurchaseLine:
__name__ = 'purchase.line'
def get_to_location(self, name):
result = super(PurchaseLine, self).get_to_location(name)
# If delivery_address is empty, it is no more a drop shipment
if self.purchase.customer and self.purchase.delivery_address:
return self.purchase.customer.customer_location.id
return result
def get_move(self):
move = super(PurchaseLine, self).get_move()
if move and self.purchase.customer:
move.cost_price = move.unit_price
return move
class ProductSupplier:
__name__ = 'purchase.product_supplier'
drop_shipment = fields.Boolean('Drop Shipment',
states={
'invisible': ~Eval('_parent_product', {}).get('supply_on_sale',
False),
})
class CreatePurchase:
__name__ = 'purchase.request.create_purchase'
@classmethod
def _group_purchase_key(cls, requests, request):
result = super(CreatePurchase, cls)._group_purchase_key(requests,
request)
result += (
('customer', request.customer.id if request.customer else None),
('delivery_address', request.delivery_address.id
if request.delivery_address else None),
)
return result