/usr/lib/python3/dist-packages/trytond/modules/carrier/carrier.py is in tryton-modules-carrier 4.6.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | # 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 ModelView, ModelSQL, MatchMixin, fields, \
sequence_ordered
from trytond.transaction import Transaction
from trytond.pool import Pool
from trytond.cache import Cache
__all__ = ['Carrier', 'CarrierSelection']
class Carrier(ModelSQL, ModelView):
'Carrier'
__name__ = 'carrier'
party = fields.Many2One('party.party', 'Party', required=True,
ondelete='CASCADE')
carrier_product = fields.Many2One('product.product', 'Carrier Product',
required=True, domain=[
('type', '=', 'service'),
('template.type', '=', 'service'),
])
carrier_cost_method = fields.Selection([
('product', 'Product Price'),
], 'Carrier Cost Method', required=True,
help='Method to compute carrier cost')
@staticmethod
def default_carrier_cost_method():
return 'product'
def get_rec_name(self, name):
return '%s - %s' % (self.party.rec_name, self.carrier_product.rec_name)
def get_sale_price(self):
'Compute carrier sale price with currency'
User = Pool().get('res.user')
if self.carrier_cost_method == 'product':
user = User(Transaction().user
or Transaction().context.get('user'))
return self.carrier_product.list_price, user.company.currency.id
return 0, None
def get_purchase_price(self):
'Compute carrier purchase price with currency'
User = Pool().get('res.user')
if self.carrier_cost_method == 'product':
user = User(Transaction().user)
return self.carrier_product.cost_price, user.company.currency.id
return 0, None
@classmethod
def create(cls, *args, **kwargs):
pool = Pool()
CarrierSelection = pool.get('carrier.selection')
carriers = super(Carrier, cls).create(*args, **kwargs)
CarrierSelection._get_carriers_cache.clear()
return carriers
@classmethod
def delete(cls, *args, **kwargs):
pool = Pool()
CarrierSelection = pool.get('carrier.selection')
super(Carrier, cls).delete(*args, **kwargs)
CarrierSelection._get_carriers_cache.clear()
class CarrierSelection(sequence_ordered(), MatchMixin, ModelSQL, ModelView):
'Carrier Selection'
__name__ = 'carrier.selection'
_get_carriers_cache = Cache('carrier.selection.get_carriers')
active = fields.Boolean('Active')
from_country = fields.Many2One('country.country', 'From Country',
ondelete='RESTRICT')
to_country = fields.Many2One('country.country', 'To Country',
ondelete='RESTRICT')
carrier = fields.Many2One('carrier', 'Carrier', required=True,
ondelete='CASCADE')
@staticmethod
def default_active():
return True
@classmethod
def create(cls, *args, **kwargs):
selections = super(CarrierSelection, cls).create(*args, **kwargs)
cls._get_carriers_cache.clear()
return selections
@classmethod
def write(cls, *args, **kwargs):
super(CarrierSelection, cls).write(*args, **kwargs)
cls._get_carriers_cache.clear()
@classmethod
def delete(cls, *args, **kwargs):
super(CarrierSelection, cls).delete(*args, **kwargs)
cls._get_carriers_cache.clear()
@classmethod
def get_carriers(cls, pattern):
pool = Pool()
Carrier = pool.get('carrier')
key = tuple(sorted(pattern.items()))
carriers = cls._get_carriers_cache.get(key)
if carriers is not None:
return Carrier.browse(carriers)
carriers = []
selections = cls.search([])
if not selections:
with Transaction().set_context(active_test=False):
carriers = Carrier.search([])
else:
for selection in selections:
if selection.match(pattern):
carriers.append(selection.carrier)
cls._get_carriers_cache.set(key, list(map(int, carriers)))
return carriers
|