summaryrefslogtreecommitdiff
path: root/fixco_custom/models/print_picking_list.py
blob: 512468d3103738c2cb18e29b51d422c5e5f5c482 (plain)
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
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