diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py index b7a8b9d7..37030471 100644 --- a/sf_warehouse/models/model.py +++ b/sf_warehouse/models/model.py @@ -21,7 +21,6 @@ class SfLocation(models.Model): name = fields.Char('Location Name', required=True, size=20) barcode = fields.Char('Barcode', copy=False, size=15) - # 仓库类别(selection:库区、库位、货位) # location_type = fields.Selection([ # ('库区', '库区'), @@ -127,7 +126,7 @@ class SfLocation(models.Model): for record in self: if record.product_sn_id: record.product_id = record.product_sn_id.product_id - record.location_status = '占用' + # record.location_status = '占用' else: record.product_id = False # record.location_status = '空闲' @@ -305,7 +304,7 @@ class SfShelf(models.Model): class ShelfLocation(models.Model): _name = 'sf.shelf.location' _description = '货位' - _order = 'create_date desc' + _order = 'id asc, create_date asc' # current_location_id = fields.Many2one('sf.shelf.location', string='当前位置') # # 目的位置 @@ -356,10 +355,20 @@ class ShelfLocation(models.Model): ('空闲', '空闲'), ('占用', '占用'), ('禁用', '禁用') - ], string='货位状态', default='空闲', readonly=True) + ], string='货位状态', default='空闲', compute='_compute_product_num', store=True) # product_id = fields.Many2one('product.template', string='产品') - product_id = fields.Many2one('product.product', string='产品', readonly=True) + product_id = fields.Many2one('product.product', string='产品', compute='_compute_product_id', store=True) product_sn_id = fields.Many2one('stock.lot', string='产品序列号') + # 产品数量 + product_num = fields.Integer('数量') + + @api.depends('product_num') + def _compute_product_num(self): + for record in self: + if record.product_num > 0: + record.location_status = '占用' + elif record.product_num == 0: + record.location_status = '空闲' # 修改货位状态为禁用 def action_location_status_disable(self): @@ -376,12 +385,20 @@ class ShelfLocation(models.Model): """ for record in self: if record.product_sn_id: - record.sudo().product_id = record.product_sn_id.product_id - record.sudo().location_status = '占用' + try: + record.sudo().product_id = record.product_sn_id.product_id + # record.sudo().location_status = '占用' + record.sudo().product_num = 1 + except Exception as e: + print('eeeeeee占用', e) else: - record.product_id = False - # record.location_status = '空闲' + try: + record.sudo().product_id = False + # record.sudo().location_status = '空闲' + record.sudo().product_num = 0 + except Exception as e: + print('eeeeeee空闲', e) # 调取获取货位信息接口 def get_sf_shelf_location_info(self): @@ -418,6 +435,8 @@ class Sf_stock_move_line(models.Model): location_dest_id_value = fields.Integer(compute='_compute_location_dest_id_value', store=True) # lot_qr_code = fields.Binary(string='二维码', compute='_compute_lot_qr_code', store=True) lot_qr_code = fields.Binary(string='二维码', compute='_compute_lot_qr_code', store=True) + current_product_id = fields.Integer(compute='_compute_location_dest_id_value', store=True) + there_is_no_sn = fields.Boolean('是否有序列号', default=False) rfid = fields.Char('Rfid', readonly=True) @@ -689,6 +708,7 @@ class Sf_stock_move_line(models.Model): def _compute_location_dest_id_value(self): for record in self: record.location_dest_id_value = record.location_dest_id.id if record.location_dest_id else False + record.current_product_id = record.product_id.id if record.product_id else False destination_location_id = fields.Many2one( 'sf.shelf.location', string='目标货位') @@ -696,23 +716,31 @@ class Sf_stock_move_line(models.Model): @api.onchange('destination_location_id') def _compute_destination_location_id(self): for record in self: - shelf_location_obj = self.env['sf.shelf.location'].search( - [('product_sn_id', '=', record.lot_id.id)]) - if shelf_location_obj: - shelf_location_obj.product_sn_id = False - # obj = self.env['sf.shelf.location'].search([('location_id', '=', - # self.destination_location_id.id)]) - obj = self.env['sf.shelf.location'].search([('name', '=', - self.destination_location_id.name)]) - if obj: - obj.product_sn_id = record.lot_id.id + if record.lot_id: + shelf_location_obj = self.env['sf.shelf.location'].search( + [('product_sn_id', '=', record.lot_id.id)]) + if shelf_location_obj: + shelf_location_obj.product_sn_id = False + # obj = self.env['sf.shelf.location'].search([('location_id', '=', + # self.destination_location_id.id)]) + obj = self.env['sf.shelf.location'].search([('name', '=', + self.destination_location_id.name)]) + if obj: + obj.product_sn_id = record.lot_id.id + else: + pass else: - pass + obj = self.env['sf.shelf.location'].search([('name', '=', + self.destination_location_id.name)]) + if obj: + obj.product_sn_id = record.lot_id.id else: obj = self.env['sf.shelf.location'].search([('name', '=', self.destination_location_id.name)]) if obj: - obj.product_sn_id = record.lot_id.id + obj.product_id = record.product_id.id + # obj.location_status = '占用' + obj.product_num += record.reserved_uom_qty class SfStockPicking(models.Model): @@ -737,8 +765,10 @@ class SfStockPicking(models.Model): for line in self.move_line_ids: if line: if line.current_location_id: - line.current_location_id.product_sn_id = False - line.current_location_id.location_status = '空闲' + if line.current_location_id.product_sn_id: + line.current_location_id.product_sn_id = False + # line.current_location_id.location_status = '空闲' + line.current_location_id.product_num = 0 for move in self.move_ids: if move and move.product_id.cutting_tool_material_id.name == '刀柄' or '托盘' in ( @@ -750,19 +780,20 @@ class SfStockPicking(models.Model): self.env['stock.lot'].search([('name', '=', item.lot_name)]).write({'rfid': item.rfid}) return res - # def print_all_barcode(self): - # """ - # 打印所有编码 - # """ - # print('================') - # for record in self.move_ids_without_package: - # print('record', record) - # print('record.move_line_ids', record.move_line_ids) - # - # # record.move_line_ids.print_qr_code() - # - # print('record.move_line_ids.lot_id', record.move_line_ids.lot_id) - # print('record.move_line_ids.lot_id.name', record.move_line_ids.lot_id.name) + +# def print_all_barcode(self): +# """ +# 打印所有编码 +# """ +# print('================') +# for record in self.move_ids_without_package: +# print('record', record) +# print('record.move_line_ids', record.move_line_ids) +# +# # record.move_line_ids.print_qr_code() +# +# print('record.move_line_ids.lot_id', record.move_line_ids.lot_id) +# print('record.move_line_ids.lot_id.name', record.move_line_ids.lot_id.name) class SfProcurementGroup(models.Model): diff --git a/sf_warehouse/views/change_stock_move_views.xml b/sf_warehouse/views/change_stock_move_views.xml index 0875fa12..0f328b4e 100644 --- a/sf_warehouse/views/change_stock_move_views.xml +++ b/sf_warehouse/views/change_stock_move_views.xml @@ -10,10 +10,18 @@ - + + + + + + + + + + diff --git a/sf_warehouse/views/shelf_location.xml b/sf_warehouse/views/shelf_location.xml index 49fdf42e..9cd4446a 100644 --- a/sf_warehouse/views/shelf_location.xml +++ b/sf_warehouse/views/shelf_location.xml @@ -149,6 +149,7 @@ +