Added supplier/customer return packings
This commit is contained in:
1 parent
11545034fd
commit
6f36dacad5
3 files changed
+1031
-13
No files matched your search
@@ -39,6 +39,10 @@ class Move(OSV):
|
||||
readonly=True, select=1)
|
||||
packing_out = fields.Many2One('stock.packing.out', 'Customer Packing',
|
||||
readonly=True, select=1)
|
||||
packing_out_return = fields.Many2One('stock.packing.out.return',
|
||||
'Customer Return Packing', readonly=True, select=1)
|
||||
packing_in_return = fields.Many2One('stock.packing.in.return',
|
||||
'Supplier Return Packing', readonly=True, select=1)
|
||||
packing_internal = fields.Many2One('stock.packing.internal',
|
||||
'Internal Packing', readonly=True, select=1)
|
||||
planned_date = fields.Date("Planned Date", states=STATES, select=2)
|
||||
@@ -161,6 +165,10 @@ class Move(OSV):
|
||||
supplier = party_obj.browse(cursor, user, context['supplier'],
|
||||
context=context)
|
||||
res = supplier.supplier_location.id
|
||||
elif context.get('customer'):
|
||||
customer = party_obj.browse(cursor, user, context['customer'],
|
||||
context=context)
|
||||
res = customer.customer_location.id
|
||||
|
||||
if context.get('from_location'):
|
||||
res = context.get('from_location')
|
||||
|
||||
+504
@@ -287,6 +287,158 @@ class PackingIn(OSV):
|
||||
PackingIn()
|
||||
|
||||
|
||||
class PackingInReturn(OSV):
|
||||
"Supplier Return Packing"
|
||||
_name = 'stock.packing.in.return'
|
||||
_description = __doc__
|
||||
_rec_name = 'code'
|
||||
|
||||
effective_date =fields.Date('Effective Date', readonly=True)
|
||||
planned_date = fields.Date(
|
||||
'Planned Date', states={'readonly': "state != 'draft'",})
|
||||
code = fields.Char("Code", size=None, select=1, readonly=True)
|
||||
reference = fields.Char(
|
||||
"Reference", size=None, select=1,
|
||||
states={'readonly': "state != 'draft'",})
|
||||
from_location = fields.Many2One(
|
||||
'stock.location', "From Location", required=True,
|
||||
states={ 'readonly': "state != 'draft' or bool(moves)", },
|
||||
domain=[('type', '=', 'storage')])
|
||||
to_location = fields.Many2One('stock.location', "To Location",
|
||||
required=True, states={
|
||||
'readonly': "state != 'draft' or bool(moves)",
|
||||
}, domain=[('type', '=', 'supplier')])
|
||||
moves = fields.One2Many(
|
||||
'stock.move', 'packing_in_return', 'Moves',
|
||||
states={'readonly': "state != 'draft' or "\
|
||||
"not(bool(from_location) and bool (to_location))"},
|
||||
context="{'from_location': from_location,"
|
||||
"'to_location': to_location,"
|
||||
"'planned_date': planned_date}",
|
||||
)
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('cancel', 'Cancel'),
|
||||
('assigned', 'Assigned'),
|
||||
('waiting', 'Waiting'),
|
||||
('done', 'Done'),
|
||||
], 'State', readonly=True)
|
||||
|
||||
def default_state(self, cursor, user, context=None):
|
||||
return 'draft'
|
||||
|
||||
def button_draft(self, cursor, user, ids, context=None):
|
||||
workflow_service = LocalService('workflow')
|
||||
for packing in self.browse(cursor, user, ids, context=context):
|
||||
workflow_service.trg_create(user, self._name, packing.id, cursor,
|
||||
context=context)
|
||||
return True
|
||||
|
||||
def __init__(self):
|
||||
super(PackingInReturn, self).__init__()
|
||||
self._rpc_allowed += [
|
||||
'button_draft',
|
||||
]
|
||||
self._order[0] = ('id', 'DESC')
|
||||
|
||||
def create(self, cursor, user, values, context=None):
|
||||
values = values.copy()
|
||||
values['code'] = self.pool.get('ir.sequence').get(
|
||||
cursor, user, 'stock.packing.in.return', context=context)
|
||||
return super(PackingInReturn, self).create(
|
||||
cursor, user, values, context=context)
|
||||
|
||||
def set_state_draft(self, cursor, user, packing_id, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
self.write(
|
||||
cursor, user, packing_id, {'state': 'draft'}, context=context)
|
||||
move_obj.write(
|
||||
cursor, user, [m.id for m in packing.moves], {'state': 'draft'},
|
||||
context=context)
|
||||
|
||||
def set_state_waiting(self, cursor, user, packing_id, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_obj.write(cursor, user, [m.id for m in packing.moves], {
|
||||
'state': 'draft',
|
||||
'planned_date': packing.planned_date,
|
||||
}, context=context)
|
||||
self.write(
|
||||
cursor, user, packing_id, {'state': 'waiting'}, context=context)
|
||||
|
||||
def set_state_assigned(self, cursor, user, packing_id, context=None):
|
||||
self.write(
|
||||
cursor, user, packing_id, {'state': 'assigned'}, context=context)
|
||||
|
||||
def set_state_done(self, cursor, user, packing_id, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_obj.write(
|
||||
cursor, user, [m.id for m in packing.moves], {'state': 'done'},
|
||||
context=context)
|
||||
self.write( cursor, user, packing_id,
|
||||
{'state': 'done',
|
||||
'effective_date': datetime.date.today()},
|
||||
context=context)
|
||||
|
||||
def set_state_cancel(self, cursor, user, packing_id, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_obj.write(
|
||||
cursor, user, [m.id for m in packing.moves], {'state': 'cancel'},
|
||||
context=context)
|
||||
self.write(
|
||||
cursor, user, packing_id, {'state': 'cancel'}, context=context)
|
||||
|
||||
def assign_try(self, cursor, user, packing_id, context=None):
|
||||
product_obj = self.pool.get('product.product')
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
date_obj = self.pool.get('ir.date')
|
||||
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
|
||||
cursor.execute('LOCK TABLE stock_move')
|
||||
|
||||
local_ctx = context and context.copy() or {}
|
||||
local_ctx['stock_date_end'] = date_obj.today(cursor, user,
|
||||
context=context)
|
||||
local_ctx['stock_assign'] = True
|
||||
location_ids = [m.from_location.id for m in packing.moves]
|
||||
pbl = product_obj.products_by_location(cursor, user,
|
||||
location_ids=location_ids,
|
||||
product_ids=[m.product.id for m in packing.moves],
|
||||
context=local_ctx)
|
||||
|
||||
for move in packing.moves:
|
||||
if move.state != 'draft':
|
||||
continue
|
||||
if (move.from_location.id, move.product.id) in pbl:
|
||||
qty_default_uom = pbl[(move.from_location.id, move.product.id)]
|
||||
qty = uom_obj.compute_qty(
|
||||
cursor, user, move.product.default_uom, qty_default_uom,
|
||||
move.uom, round=False, context=context)
|
||||
if qty < move.quantity:
|
||||
return False
|
||||
pbl[(move.from_location.id, move.product.id)] = \
|
||||
pbl[(move.from_location.id, move.product.id)] - qty_default_uom
|
||||
|
||||
move_obj.write(cursor, user, [m.id for m in packing.moves],
|
||||
{'state': 'assigned'}, context=context)
|
||||
return True
|
||||
|
||||
def assign_force(self, cursor, user, packing_id, context=None):
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_obj = self.pool.get('stock.move')
|
||||
move_obj.write(cursor, user, [m.id for m in packing.moves], {
|
||||
'state': 'assigned',
|
||||
}, context=context)
|
||||
return True
|
||||
|
||||
|
||||
PackingInReturn()
|
||||
|
||||
|
||||
class PackingOut(OSV):
|
||||
"Customer Packing"
|
||||
_name = 'stock.packing.out'
|
||||
@@ -675,6 +827,289 @@ class PackingOut(OSV):
|
||||
PackingOut()
|
||||
|
||||
|
||||
|
||||
class PackingOutReturn(OSV):
|
||||
"Customer Return Packing"
|
||||
_name = 'stock.packing.out.return'
|
||||
_description = __doc__
|
||||
_rec_name = 'code'
|
||||
|
||||
effective_date = fields.Date('Effective Date', readonly=True)
|
||||
planned_date = fields.Date('Planned Date',
|
||||
states={
|
||||
'readonly': "state != 'draft'",
|
||||
})
|
||||
customer = fields.Many2One('party.party', 'Customer', required=True,
|
||||
states={
|
||||
'readonly': "state != 'draft' or bool(incoming_moves)",
|
||||
}, on_change=['customer'])
|
||||
delivery_address = fields.Many2One('party.address',
|
||||
'Delivery Address', required=True,
|
||||
states={
|
||||
'readonly': "state != 'draft'",
|
||||
}, domain="[('party', '=', customer)]")
|
||||
reference = fields.Char("Reference", size=None, select=1,
|
||||
states={
|
||||
'readonly': "state != 'draft'",
|
||||
})
|
||||
warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
|
||||
states={
|
||||
'readonly': "state != 'draft' or bool(incoming_moves)",
|
||||
}, domain=[('type', '=', 'warehouse')])
|
||||
customer_location = fields.Many2One('stock.location', "Customer Location",
|
||||
required=True, states={
|
||||
'readonly': "state != 'draft'",
|
||||
}, domain="[('type', '=', 'customer')]")
|
||||
incoming_moves = fields.Function('get_incoming_moves', type='one2many',
|
||||
relation='stock.move', string='Incoming Moves',
|
||||
fnct_inv='set_incoming_moves',
|
||||
states={
|
||||
'readonly':"state != 'draft'",
|
||||
}, context="{'warehouse': warehouse, 'type': 'incoming'," \
|
||||
"'customer': customer}")
|
||||
inventory_moves = fields.Function('get_inventory_moves', type='one2many',
|
||||
relation='stock.move', string='Inventory Moves',
|
||||
fnct_inv='set_inventory_moves',
|
||||
states={
|
||||
'readonly':"state in ('draft', 'cancel', 'done')",
|
||||
}, context="{'warehouse': warehouse, 'type': 'inventory_out',}")
|
||||
moves = fields.One2Many('stock.move', 'packing_out_return', 'Moves',
|
||||
readonly=True)
|
||||
code = fields.Char("Code", size=None, select=1, readonly=True)
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('done', 'Done'),
|
||||
('cancel', 'Cancel'),
|
||||
('received', 'Received'),
|
||||
], 'State', readonly=True)
|
||||
|
||||
def __init__(self):
|
||||
super(PackingOutReturn, self).__init__()
|
||||
self._rpc_allowed += [
|
||||
'button_draft',
|
||||
]
|
||||
self._order[0] = ('id', 'DESC')
|
||||
self._error_messages.update({
|
||||
'incoming_move_input_dest': 'Incoming Moves must ' \
|
||||
'have the warehouse input location as destination location!',
|
||||
'inventory_move_input_source': 'Inventory Moves must ' \
|
||||
'have the warehouse input location as source location!',
|
||||
})
|
||||
|
||||
|
||||
def default_state(self, cursor, user, context=None):
|
||||
return 'draft'
|
||||
|
||||
def default_warehouse(self, cursor, user, context=None):
|
||||
location_obj = self.pool.get('stock.location')
|
||||
location_ids = location_obj.search(cursor, user,
|
||||
self.warehouse._domain, context=context)
|
||||
if len(location_ids) == 1:
|
||||
return location_obj.name_get(cursor, user, location_ids,
|
||||
context=context)[0]
|
||||
return False
|
||||
|
||||
def on_change_customer(self, cursor, user, ids, values, context=None):
|
||||
if not values.get('customer'):
|
||||
return {'delivery_address': False,
|
||||
'customer_location': False}
|
||||
party_obj = self.pool.get("party.party")
|
||||
address_id = party_obj.address_get(cursor, user, values['customer'],
|
||||
type='delivery', context=context)
|
||||
party = party_obj.browse(cursor, user, values['customer'], context=context)
|
||||
return {
|
||||
'delivery_address': address_id,
|
||||
'customer_location': party.customer_location.id,
|
||||
}
|
||||
|
||||
def get_incoming_moves(self, cursor, user, ids, name, arg, context=None):
|
||||
res = {}
|
||||
for packing in self.browse(cursor, user, ids, context=context):
|
||||
res[packing.id] = []
|
||||
for move in packing.moves:
|
||||
if move.to_location.id == \
|
||||
packing.warehouse.input_location.id:
|
||||
res[packing.id].append(move.id)
|
||||
return res
|
||||
|
||||
def set_incoming_moves(self, cursor, user, packing_id, name, value, arg,
|
||||
context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
|
||||
if not value:
|
||||
return
|
||||
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_ids = []
|
||||
for act in value:
|
||||
if act[0] == 'create':
|
||||
if 'to_location' in act[1]:
|
||||
if act[1]['to_location'] != \
|
||||
packing.warehouse.input_location.id:
|
||||
self.raise_user_error(cursor,
|
||||
'incoming_move_input_dest', context=context)
|
||||
elif act[0] == 'write':
|
||||
if 'to_location' in act[2]:
|
||||
if act[2]['to_location'] != \
|
||||
packing.warehouse.input_location.id:
|
||||
self.raise_user_error(cursor,
|
||||
'incoming_move_input_dest', context=context)
|
||||
elif act[0] == 'add':
|
||||
move_ids.append(act[1])
|
||||
elif act[0] == 'set':
|
||||
move_ids.extend(act[1])
|
||||
|
||||
moves = move_obj.browse(cursor, user, move_ids, context=context)
|
||||
for move in moves:
|
||||
if move.to_location.id != \
|
||||
packing.warehouse.input_location.id:
|
||||
self.raise_user_error(cursor,
|
||||
'incoming_move_input_dest', context=context)
|
||||
self.write(cursor, user, packing_id, {
|
||||
'moves': value,
|
||||
}, context=context)
|
||||
|
||||
def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
|
||||
res = {}
|
||||
for packing in self.browse(cursor, user, ids, context=context):
|
||||
res[packing.id] = []
|
||||
for move in packing.moves:
|
||||
if move.from_location.id == \
|
||||
packing.warehouse.input_location.id:
|
||||
res[packing.id].append(move.id)
|
||||
return res
|
||||
|
||||
def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
|
||||
context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
|
||||
if not value:
|
||||
return
|
||||
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_ids = []
|
||||
for act in value:
|
||||
if act[0] == 'create':
|
||||
if 'from_location' in act[1]:
|
||||
if act[1]['from_location'] != \
|
||||
packing.warehouse.input_location.id:
|
||||
self.raise_user_error(cursor,
|
||||
'inventory_move_input_source', context=context)
|
||||
elif act[0] == 'write':
|
||||
if 'from_location' in act[2]:
|
||||
if act[2]['from_location'] != \
|
||||
packing.warehouse.input_location.id:
|
||||
self.raise_user_error(cursor,
|
||||
'inventory_move_input_source', context=context)
|
||||
elif act[0] == 'add':
|
||||
move_ids.append(act[1])
|
||||
elif act[0] == 'set':
|
||||
move_ids.extend(act[1])
|
||||
|
||||
moves = move_obj.browse(cursor, user, move_ids, context=context)
|
||||
for move in moves:
|
||||
if move.from_location.id != \
|
||||
packing.warehouse.input_location.id:
|
||||
self.raise_user_error(cursor,
|
||||
'inventory_move_input_source', context=context)
|
||||
self.write(cursor, user, packing_id, {
|
||||
'moves': value,
|
||||
}, context=context)
|
||||
|
||||
def create(self, cursor, user, values, context=None):
|
||||
values = values.copy()
|
||||
values['code'] = self.pool.get('ir.sequence').get(
|
||||
cursor, user, 'stock.packing.out.return', context=context)
|
||||
return super(PackingOutReturn, self).create(cursor, user, values,
|
||||
context=context)
|
||||
|
||||
def copy(self, cursor, user, ids, default=None, context=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
default = default.copy()
|
||||
default['inventory_moves']= False
|
||||
default['incoming_moves']= False
|
||||
return super(PackingOutReturn, self).copy(cursor, user, ids,
|
||||
default=default, context=context)
|
||||
|
||||
|
||||
def button_draft(self, cursor, user, ids, context=None):
|
||||
workflow_service = LocalService('workflow')
|
||||
for packing in self.browse(cursor, user, ids, context=context):
|
||||
workflow_service.trg_create(user, self._name, packing.id, cursor,
|
||||
context=context)
|
||||
|
||||
def set_state_done(self, cursor, user, packing_id, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_obj.write(
|
||||
cursor, user, [m.id for m in packing.inventory_moves],
|
||||
{'state': 'done'}, context)
|
||||
self.write(cursor, user, packing_id,{
|
||||
'state': 'done',
|
||||
'effective_date': datetime.date.today(),
|
||||
}, context=context)
|
||||
|
||||
def set_state_cancel(self, cursor, user, packing_id, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_obj.write(
|
||||
cursor, user, [m.id for m in packing.incoming_moves] +\
|
||||
[m.id for m in packing.inventory_moves], {'state': 'cancel'},
|
||||
context)
|
||||
self.write(cursor, user, packing_id, {'state': 'cancel'},
|
||||
context=context)
|
||||
|
||||
def set_state_received(self, cursor, user, packing_id, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_obj.write(
|
||||
cursor, user, [m.id for m in packing.incoming_moves],
|
||||
{'state': 'done'}, context=context)
|
||||
self.write(cursor, user, packing_id, {
|
||||
'state': 'received'
|
||||
}, context=context)
|
||||
|
||||
def set_state_draft(self, cursor, user, packing_id, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
move_obj.write(cursor, user, [m.id for m in packing.incoming_moves
|
||||
if m.state != 'draft'], {
|
||||
'state': 'draft',
|
||||
}, context=context)
|
||||
move_obj.delete(cursor, user,
|
||||
[m.id for m in packing.inventory_moves], context=context)
|
||||
self.write(cursor, user, packing_id, {
|
||||
'state': 'draft',
|
||||
}, context=context)
|
||||
|
||||
def _get_inventory_moves(self, cursor, user, incoming_move, context=None):
|
||||
res = {}
|
||||
if incoming_move.quantity <= 0.0:
|
||||
return None
|
||||
res['product'] = incoming_move.product.id
|
||||
res['uom'] = incoming_move.uom.id
|
||||
res['quantity'] = incoming_move.quantity
|
||||
res['from_location'] = incoming_move.to_location.id
|
||||
res['to_location'] = incoming_move.packing_out_return.warehouse.\
|
||||
storage_location.id
|
||||
res['state'] = 'draft'
|
||||
res['company'] = incoming_move.company.id
|
||||
return res
|
||||
|
||||
def create_inventory_moves(self, cursor, user, packing_id, context=None):
|
||||
packing = self.browse(cursor, user, packing_id, context=context)
|
||||
for incoming_move in packing.incoming_moves:
|
||||
vals = self._get_inventory_moves(cursor, user, incoming_move,
|
||||
context=context)
|
||||
if vals:
|
||||
self.write(cursor, user, packing.id, {
|
||||
'inventory_moves': [('create', vals)]
|
||||
}, context=context)
|
||||
|
||||
PackingOutReturn()
|
||||
|
||||
|
||||
class AssignPackingOutAskForce(WizardOSV):
|
||||
'Assign Packing Out Ask Force'
|
||||
_name = 'stock.packing.out.assign.ask_force'
|
||||
@@ -939,6 +1374,75 @@ class AssignPackingInternal(Wizard):
|
||||
AssignPackingInternal()
|
||||
|
||||
|
||||
class AssignPackingInReturnAskForce(WizardOSV):
|
||||
'Assign Supplier return Packing Ask Force'
|
||||
_name = 'stock.packing.in.return.assign.ask_force'
|
||||
_description = __doc__
|
||||
|
||||
moves = fields.Many2Many('stock.move', None, None, None, 'Moves',
|
||||
readonly=True)
|
||||
|
||||
AssignPackingInReturnAskForce()
|
||||
|
||||
|
||||
class AssignPackingInReturn(Wizard):
|
||||
'Assign Supplier Return Packing'
|
||||
_name = 'stock.packing.in.return.assign'
|
||||
states = {
|
||||
'init': {
|
||||
'result': {
|
||||
'type': 'choice',
|
||||
'next_state': '_choice',
|
||||
},
|
||||
},
|
||||
'ask_force': {
|
||||
'actions': ['_moves'],
|
||||
'result': {
|
||||
'type': 'form',
|
||||
'object': 'stock.packing.in.return.assign.ask_force',
|
||||
'state': [
|
||||
('force', 'Force Assign', 'tryton-go-next'),
|
||||
('end', 'Ok', 'tryton-ok', True),
|
||||
],
|
||||
},
|
||||
},
|
||||
'force': {
|
||||
'result': {
|
||||
'type': 'action',
|
||||
'action': '_force',
|
||||
'state': 'end',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
def _choice(self, cursor, user, data, context=None):
|
||||
workflow_service = LocalService('workflow')
|
||||
packing_internal_obj = self.pool.get('stock.packing.in.return')
|
||||
|
||||
workflow_service.trg_validate(user, 'stock.packing.in.return',
|
||||
data['id'], 'assign', cursor, context=context)
|
||||
packing = packing_internal_obj.browse(cursor, user, data['id'],
|
||||
context=context)
|
||||
if not [x.id for x in packing.moves if x.state == 'draft']:
|
||||
return 'end'
|
||||
else:
|
||||
return 'ask_force'
|
||||
|
||||
def _moves(self, cursor, user, data, context=None):
|
||||
packing_internal_obj = self.pool.get('stock.packing.in.return')
|
||||
packing = packing_internal_obj.browse(cursor, user, data['id'],
|
||||
context=context)
|
||||
return {'moves': [x.id for x in packing.moves if x.state == 'draft']}
|
||||
|
||||
def _force(self, cursor, user, data, context=None):
|
||||
workflow_service = LocalService('workflow')
|
||||
workflow_service.trg_validate(user, 'stock.packing.in.return',
|
||||
data['id'], 'force_assign', cursor, context=context)
|
||||
return {}
|
||||
|
||||
AssignPackingInReturn()
|
||||
|
||||
|
||||
class Address(OSV):
|
||||
_name = 'party.address'
|
||||
delivery = fields.Boolean('Delivery')
|
||||
|
||||
+519
-13
@@ -146,14 +146,140 @@ this repository contains the full copyright notices and license terms. -->
|
||||
action="act_packing_in_form_received"
|
||||
id="menu_packing_in_received"/>
|
||||
|
||||
<record model="ir.sequence.type" id="sequence_type_packing_in">
|
||||
<field name="name">Supplier Packing</field>
|
||||
<field name="code">stock.packing.in</field>
|
||||
<!-- Packing In Return view-->
|
||||
<record model="ir.action.wizard" id="wizard_packing_in_return_assign">
|
||||
<field name="name">Assign Purchase Return Packing</field>
|
||||
<field name="wiz_name">stock.packing.in.return.assign</field>
|
||||
<field name="model">stock.packing.in.return</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.sequence" id="sequence_packing_in">
|
||||
<field name="name">Supplier Packing</field>
|
||||
<field name="code">stock.packing.in</field>
|
||||
<record model="ir.ui.view" id="packing_in_return_view_form">
|
||||
<field name="model">stock.packing.in.return</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<form string="Supplier Return Packing" col="4" cursor="from_location">
|
||||
<label name="reference"/>
|
||||
<field name="reference"/>
|
||||
<label name="code"/>
|
||||
<field name="code"/>
|
||||
<label name="from_location"/>
|
||||
<field name="from_location"/>
|
||||
<label name="to_location"/>
|
||||
<field name="to_location"/>
|
||||
<label name="planned_date"/>
|
||||
<field name="planned_date"/>
|
||||
<label name="effective_date"/>
|
||||
<field name="effective_date"/>
|
||||
<separator name="moves" colspan="4"/>
|
||||
<field name="moves" colspan="4"/>
|
||||
<label name="state"/>
|
||||
<field name="state"/>
|
||||
<group col="6" colspan="2" id="buttons">
|
||||
<button string="Cancel" name="cancel"
|
||||
states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-cancel"/>
|
||||
<button string="Draft" name="draft"
|
||||
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-go-previous"/>
|
||||
<button string="Waiting" name="waiting"
|
||||
states="{'invisible': '''state not in ('assigned', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'draft' and 'tryton-go-next' or False'''}"/>
|
||||
<button string="Assign" name="%(wizard_packing_in_return_assign)d"
|
||||
type="action"
|
||||
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-go-next"/>
|
||||
<button string="Reset to Draft" name="button_draft"
|
||||
type="object" states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-clear"/>
|
||||
<button string="Done" name="done"
|
||||
states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="packing_in_return_view_tree">
|
||||
<field name="model">stock.packing.in.return</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<tree string="Supplier Return Packings">
|
||||
<field name="code" select="1"/>
|
||||
<field name="reference" select="2"/>
|
||||
<field name="planned_date" select="2"/>
|
||||
<field name="effective_date" select="2"/>
|
||||
<field name="from_location" select="2"/>
|
||||
<field name="to_location" select="2"/>
|
||||
<field name="state" select="1"/>
|
||||
</tree>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window" id="act_packing_in_return_form">
|
||||
<field name="name">Supplier Return Packings</field>
|
||||
<field name="res_model">stock.packing.in.return</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_packing_in_return_form_view1">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view" ref="packing_in_return_view_tree"/>
|
||||
<field name="act_window" ref="act_packing_in_return_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_packing_in_return_form_view2">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view" ref="packing_in_return_view_form"/>
|
||||
<field name="act_window" ref="act_packing_in_return_form"/>
|
||||
</record>
|
||||
<menuitem parent="menu_packing_in_form" sequence="40"
|
||||
action="act_packing_in_return_form"
|
||||
id="menu_packing_in_return_form"/>
|
||||
|
||||
<record model="ir.action.act_window" id="act_packing_in_return_new_form">
|
||||
<field name="name">New Supplier Return Packing</field>
|
||||
<field name="res_model">stock.packing.in.return</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_packing_in_return_new_form_view1">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view" ref="packing_in_return_view_tree"/>
|
||||
<field name="act_window" ref="act_packing_in_return_new_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_packing_in_return_new_form_view2">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view" ref="packing_in_return_view_form"/>
|
||||
<field name="act_window" ref="act_packing_in_return_new_form"/>
|
||||
</record>
|
||||
<menuitem parent="menu_packing_in_return_form" sequence="10"
|
||||
action="act_packing_in_return_new_form"
|
||||
id="menu_packing_in_return_new_form"/>
|
||||
|
||||
<record model="ir.ui.view" id="packing_in_return_assign_ask_force_view_form">
|
||||
<field name="model">stock.packing.in.return.assign.ask_force</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<form string="Unable to Assign" col="2">
|
||||
<image name="tryton-dialog-information"/>
|
||||
<group col="1" id="labels">
|
||||
<separator string="Unable to assign those products:"
|
||||
id="unable"/>
|
||||
<field name="moves">
|
||||
<tree string="Moves" fill="1">
|
||||
<field name="product"/>
|
||||
<field name="quantity"/>
|
||||
<field name="uom"/>
|
||||
<field name="unit_digits" tree_invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</form>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!--Packing out view-->
|
||||
@@ -554,16 +680,128 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Sequence packing out -->
|
||||
<record model="ir.sequence.type" id="sequence_type_packing_out">
|
||||
<field name="name">Customer Packing</field>
|
||||
<field name="code">stock.packing.out</field>
|
||||
<!--Return Packing Out view-->
|
||||
<record model="ir.ui.view" id="packing_out_return_view_form">
|
||||
<field name="model">stock.packing.out.return</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<form string="Customer Return Packing" col="4" cursor="customer">
|
||||
<label name="reference"/>
|
||||
<field name="reference"/>
|
||||
<label name="code"/>
|
||||
<field name="code"/>
|
||||
<label name="customer"/>
|
||||
<field name="customer"/>
|
||||
<label name="delivery_address"/>
|
||||
<field name="delivery_address"/>
|
||||
<label name="warehouse"/>
|
||||
<field name="warehouse"/>
|
||||
<label name="customer_location"/>
|
||||
<field name="customer_location"/>
|
||||
<label name="planned_date"/>
|
||||
<field name="planned_date"/>
|
||||
<label name="effective_date"/>
|
||||
<field name="effective_date"/>
|
||||
<notebook colspan="6">
|
||||
<page string="Incoming Moves" id="incoming_moves">
|
||||
<field name="incoming_moves" colspan="4">
|
||||
<tree string="Moves">
|
||||
<field name="product" select="1"/>
|
||||
<field name="from_location" select="2"/>
|
||||
<field name="to_location" select="2"/>
|
||||
<field name="quantity" select="1"/>
|
||||
<field name="uom" select="1"/>
|
||||
<field name="planned_date" select="1"/>
|
||||
<field name="state" select="2"/>
|
||||
<field name="unit_digits" tree_invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Inventory Moves" id="inventory_moves">
|
||||
<field name="inventory_moves" colspan="4"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<group col="4" colspan="6" id="state_buttons">
|
||||
<label name="state"/>
|
||||
<field name="state"/>
|
||||
<group col="5" colspan="2" id="buttons">
|
||||
<button string="Cancel" name="cancel"
|
||||
states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-cancel"/>
|
||||
<button string="Received" name="received"
|
||||
states="{'invisible': '''state != 'draft' ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-go-next"/>
|
||||
<button string="Done" name="done"
|
||||
states="{'invisible': '''state != 'received' ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-ok"/>
|
||||
<button string="Reset to Draft" name="button_draft"
|
||||
type="object"
|
||||
states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
|
||||
icon="tryton-clear"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="packing_out_return_view_tree">
|
||||
<field name="model">stock.packing.out.return</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<tree string="Customer Return Packings">
|
||||
<field name="code" select="1"/>
|
||||
<field name="reference" select="1"/>
|
||||
<field name="state" select="1"/>
|
||||
<field name="planned_date" select="2"/>
|
||||
<field name="effective_date" select="2"/>
|
||||
<field name="customer" select="2"/>
|
||||
<field name="delivery_address" select="2"/>
|
||||
</tree>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window" id="act_packing_out_return_form">
|
||||
<field name="name">Customer Return Packings</field>
|
||||
<field name="res_model">stock.packing.out.return</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_packing_out_return_form_view1">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view" ref="packing_out_return_view_tree"/>
|
||||
<field name="act_window" ref="act_packing_out_return_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_packing_out_return_form_view2">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view" ref="packing_out_return_view_form"/>
|
||||
<field name="act_window" ref="act_packing_out_return_form"/>
|
||||
</record>
|
||||
<menuitem parent="menu_packing_out_form" sequence="40"
|
||||
action="act_packing_out_return_form"
|
||||
id="menu_packing_out_return_form"/>
|
||||
|
||||
<record model="ir.sequence" id="sequence_packing_out">
|
||||
<field name="name">Customer Packing</field>
|
||||
<field name="code">stock.packing.out</field>
|
||||
<record model="ir.action.act_window" id="act_packing_out_return_form2">
|
||||
<field name="name">New Customer Return Packing</field>
|
||||
<field name="res_model">stock.packing.out.return</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_packing_out_return_form2_view1">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view" ref="packing_out_return_view_form"/>
|
||||
<field name="act_window" ref="act_packing_out_return_form2"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_packing_out_return_form2_view2">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view" ref="packing_out_return_view_tree"/>
|
||||
<field name="act_window" ref="act_packing_out_return_form2"/>
|
||||
</record>
|
||||
<menuitem parent="menu_packing_out_return_form" sequence="10"
|
||||
action="act_packing_out_return_form2" id="menu_packing_out_return_form2"/>
|
||||
|
||||
<!-- Workflow packing in -->
|
||||
<record model="workflow" id="wkf_packingin">
|
||||
@@ -894,6 +1132,227 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<field name="signal">cancel</field>
|
||||
</record>
|
||||
|
||||
<!-- Workflow packing out return -->
|
||||
<record model="workflow" id="wkf_packing_out_return">
|
||||
<field name="name">Customer Return Packing</field>
|
||||
<field name="osv">stock.packing.out.return</field>
|
||||
<field name="on_create">True</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_out_return_act_draft">
|
||||
<field name="workflow" ref="wkf_packing_out_return"/>
|
||||
<field name="flow_start">True</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">set_state_draft()</field>
|
||||
<field name="name">Draft</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_out_return_act_cancel">
|
||||
<field name="workflow" ref="wkf_packing_out_return"/>
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="name">Cancel</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">set_state_cancel()</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_out_return_act_done">
|
||||
<field name="workflow" ref="wkf_packing_out_return"/>
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="name">Done</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">set_state_done()</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_out_return_act_received">
|
||||
<field name="name">Received</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="workflow" ref="wkf_packing_out_return"/>
|
||||
<field name="action">set_state_received() create_inventory_moves()</field>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition"
|
||||
id="packing_out_return_trans_draft_received">
|
||||
<field name="act_from" ref="packing_out_return_act_draft"/>
|
||||
<field name="act_to" ref="packing_out_return_act_received"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">received</field>
|
||||
</record>
|
||||
<record model="workflow.transition"
|
||||
id="packing_out_return_trans_received_draft">
|
||||
<field name="act_from" ref="packing_out_return_act_received"/>
|
||||
<field name="act_to" ref="packing_out_return_act_draft"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">draft</field>
|
||||
</record>
|
||||
<record model="workflow.transition" id="packing_out_return_trans_received_done">
|
||||
<field name="act_from" ref="packing_out_return_act_received"/>
|
||||
<field name="act_to" ref="packing_out_return_act_done"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">done</field>
|
||||
</record>
|
||||
<record model="workflow.transition" id="packing_out_return_trans_draft_cancel">
|
||||
<field name="act_from" ref="packing_out_return_act_draft"/>
|
||||
<field name="act_to" ref="packing_out_return_act_cancel"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">cancel</field>
|
||||
</record>
|
||||
<record model="workflow.transition"
|
||||
id="packing_out_return_trans_received_cancel">
|
||||
<field name="act_from" ref="packing_out_return_act_received"/>
|
||||
<field name="act_to" ref="packing_out_return_act_cancel"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">cancel</field>
|
||||
</record>
|
||||
|
||||
<!-- Workflow purchase return packing -->
|
||||
<record model="workflow" id="wkf_packing_in_return">
|
||||
<field name="name">Supplier Return Packing</field>
|
||||
<field name="osv">stock.packing.in.return</field>
|
||||
<field name="on_create">True</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_in_return_act_draft">
|
||||
<field name="workflow" ref="wkf_packing_in_return"/>
|
||||
<field name="flow_start">True</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">set_state_draft()</field>
|
||||
<field name="name">Draft</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_in_return_act_cancel">
|
||||
<field name="workflow" ref="wkf_packing_in_return"/>
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="name">Cancel</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">set_state_cancel()</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_in_return_act_done">
|
||||
<field name="workflow" ref="wkf_packing_in_return"/>
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="name">Done</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">set_state_done()</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_in_return_act_waiting">
|
||||
<field name="name">Waiting</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="workflow" ref="wkf_packing_in_return"/>
|
||||
<field name="action">set_state_waiting()</field>
|
||||
</record>
|
||||
<record model="workflow.activity" id="packing_in_return_act_assigned">
|
||||
<field name="name">Assigned</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="workflow" ref="wkf_packing_in_return"/>
|
||||
<field name="action">set_state_assigned()</field>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition"
|
||||
id="packing_in_return_trans_draft_waiting">
|
||||
<field name="act_from" ref="packing_in_return_act_draft"/>
|
||||
<field name="act_to" ref="packing_in_return_act_waiting"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">waiting</field>
|
||||
</record>
|
||||
<record model="workflow.transition"
|
||||
id="packing_in_return_trans_waiting_draft">
|
||||
<field name="act_from" ref="packing_in_return_act_waiting"/>
|
||||
<field name="act_to" ref="packing_in_return_act_draft"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">draft</field>
|
||||
</record>
|
||||
<record model="workflow.transition"
|
||||
id="packing_in_return_trans_waiting_assigned">
|
||||
<field name="act_from" ref="packing_in_return_act_waiting"/>
|
||||
<field name="act_to" ref="packing_in_return_act_assigned"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">assign</field>
|
||||
<field name="condition">assign_try()</field>
|
||||
</record>
|
||||
<record model="workflow.transition"
|
||||
id="packing_in_return_trans_assigned_waiting">
|
||||
<field name="act_from" ref="packing_in_return_act_assigned"/>
|
||||
<field name="act_to" ref="packing_in_return_act_waiting"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">waiting</field>
|
||||
</record>
|
||||
<record model="workflow.transition"
|
||||
id="packing_in_return_trans_waiting_assigned_force">
|
||||
<field name="act_from" ref="packing_in_return_act_waiting"/>
|
||||
<field name="act_to" ref="packing_in_return_act_assigned"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">force_assign</field>
|
||||
<field name="condition">assign_force()</field>
|
||||
</record>
|
||||
<record model="workflow.transition" id="packing_in_return_trans_assigned_done">
|
||||
<field name="act_from" ref="packing_in_return_act_assigned"/>
|
||||
<field name="act_to" ref="packing_in_return_act_done"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">done</field>
|
||||
</record>
|
||||
<record model="workflow.transition" id="packing_in_return_trans_draft_cancel">
|
||||
<field name="act_from" ref="packing_in_return_act_draft"/>
|
||||
<field name="act_to" ref="packing_in_return_act_cancel"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">cancel</field>
|
||||
</record>
|
||||
<record model="workflow.transition"
|
||||
id="packing_in_return_trans_waiting_cancel">
|
||||
<field name="act_from" ref="packing_in_return_act_waiting"/>
|
||||
<field name="act_to" ref="packing_in_return_act_cancel"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">cancel</field>
|
||||
</record>
|
||||
<record model="workflow.transition"
|
||||
id="packing_in_return_trans_assigned_cancel">
|
||||
<field name="act_from" ref="packing_in_return_act_assigned"/>
|
||||
<field name="act_to" ref="packing_in_return_act_cancel"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="signal">cancel</field>
|
||||
</record>
|
||||
|
||||
<!-- Sequence packing out -->
|
||||
<record model="ir.sequence.type" id="sequence_type_packing_out">
|
||||
<field name="name">Customer Packing</field>
|
||||
<field name="code">stock.packing.out</field>
|
||||
</record>
|
||||
<record model="ir.sequence" id="sequence_packing_out">
|
||||
<field name="name">Customer Packing</field>
|
||||
<field name="code">stock.packing.out</field>
|
||||
</record>
|
||||
|
||||
<!-- Sequence packing in -->
|
||||
<record model="ir.sequence.type" id="sequence_type_packing_in">
|
||||
<field name="name">Supplier Packing</field>
|
||||
<field name="code">stock.packing.in</field>
|
||||
</record>
|
||||
<record model="ir.sequence" id="sequence_packing_in">
|
||||
<field name="name">Supplier Packing</field>
|
||||
<field name="code">stock.packing.in</field>
|
||||
</record>
|
||||
|
||||
<!-- Sequence packing internal -->
|
||||
<record model="ir.sequence.type" id="sequence_type_packing_internal">
|
||||
<field name="name">Internal Packing</field>
|
||||
<field name="code">stock.packing.internal</field>
|
||||
</record>
|
||||
<record model="ir.sequence" id="sequence_packing_internal">
|
||||
<field name="name">InternalPacking</field>
|
||||
<field name="code">stock.packing.internal</field>
|
||||
</record>
|
||||
|
||||
<!-- Sequence packing out return-->
|
||||
<record model="ir.sequence.type" id="sequence_type_packing_out_return">
|
||||
<field name="name">Customer Return Packing</field>
|
||||
<field name="code">stock.packing.out.return</field>
|
||||
</record>
|
||||
<record model="ir.sequence" id="sequence_packing_out_return">
|
||||
<field name="name">Customer Retrun Packing</field>
|
||||
<field name="code">stock.packing.out.return</field>
|
||||
</record>
|
||||
|
||||
<!-- Sequence packing in return -->
|
||||
<record model="ir.sequence.type" id="sequence_type_packing_in_return">
|
||||
<field name="name">Supplier Return Packing</field>
|
||||
<field name="code">stock.packing.in.return</field>
|
||||
</record>
|
||||
<record model="ir.sequence" id="sequence_packing_in_return">
|
||||
<field name="name">Supplier Retrun Packing</field>
|
||||
<field name="code">stock.packing.in.return</field>
|
||||
</record>
|
||||
|
||||
<!-- Add delivery field on address -->
|
||||
<record model="ir.ui.view" id="address_view_tree">
|
||||
@@ -999,5 +1458,52 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<field name="perm_delete" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.model.access" id="access_packing_out_return">
|
||||
<field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
<record model="ir.model.access" id="access_packing_out_return_group_stock">
|
||||
<field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
<record model="ir.model.access" id="access_packing_out_return_group_stock_admin">
|
||||
<field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
|
||||
<field name="group" ref="group_stock_admin"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_delete" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.model.access" id="access_packing_in_return">
|
||||
<field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
<record model="ir.model.access" id="access_packing_in_return_group_stock">
|
||||
<field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
|
||||
<field name="group" ref="group_stock"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
<record model="ir.model.access" id="access_packing_in_return_group_stock_admin">
|
||||
<field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
|
||||
<field name="group" ref="group_stock_admin"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_delete" eval="True"/>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
Reference in new issue
Block a user