from odoo import models, api, fields from odoo.exceptions import AccessError, UserError, ValidationError from datetime import timedelta, date import logging _logger = logging.getLogger(__name__) class PrintPickingList(models.Model): _name = "print.picking.list" _rec_name = 'name' _description = "Print Picking List" _inherit = ['mail.thread'] _order = 'id desc' name = fields.Char(string='Name', index=True, copy=False, readonly=True) user_id = fields.Many2one('res.users', string='Created By', default=lambda self: self.env.user, readonly=True) print_picking_list_line = fields.One2many('print.picking.list.line', 'print_picking_list_id', string='Print Picking List Lines', auto_join=True) @api.model def create(self, vals): if not vals.get('name') or vals['name'] == 'New': vals['name'] = self.env['ir.sequence'].next_by_code('print.picking.list') or 'new' return super(PrintPickingList, self).create(vals) def action_get_picking(self): for record in self: if not record.print_picking_list_line: raise UserError("Tidak ada line.") for line in record.print_picking_list_line: if not line.invoice_marketplace: raise UserError( "Invoice Marketplace kosong di salah satu line." ) picking = self.env['stock.picking'].search([ ('invoice_mp', '=', line.invoice_marketplace) ], limit=1) if not picking: raise UserError( f"BU/OUT tidak ditemukan untuk Invoice Marketplace: {line.invoice_marketplace}" ) line.picking_id = picking.id class PrintPickingListLine(models.Model): _name = 'print.picking.list.line' _description = 'Print Picking List Line' _order = 'print_picking_list_id, id' print_picking_list_id = fields.Many2one('print.picking.list', string='Ref', required=True, ondelete='cascade', index=True, copy=False) invoice_marketplace = fields.Char(string='Invoice Marketplace') # picking_id = fields.Many2one('stock.picking', string='BU/OUT', compute='_compute_picking_id') picking_id = fields.Many2one('stock.picking', string='BU/OUT') # @api.depends('invoice_marketplace') # def _compute_picking_id(self): # for line in self: # picking = self.env['stock.picking'].search([('invoice_mp', '=', line.invoice_marketplace)], limit=1) # line.picking_id = picking.id if picking else False