def METHOD_NAME(self, invoice_ids):
    order_lines = self.mapped("order_line").filtered(
        lambda l: l.is_invoiced and l.delivery_note_line_ids
    )
    delivery_note_lines = order_lines.mapped("delivery_note_line_ids").filtered(
        lambda l: l.is_invoiceable
    )
    delivery_notes = delivery_note_lines.mapped("delivery_note_id")
    ready_delivery_notes = delivery_notes.filtered(
        lambda n: n.state != DOMAIN_DELIVERY_NOTE_STATES[0]
    )
    draft_delivery_notes = delivery_notes - ready_delivery_notes
    draft_delivery_note_lines = (
        draft_delivery_notes.mapped("line_ids") & delivery_note_lines
    )
    ready_delivery_note_lines = delivery_note_lines - draft_delivery_note_lines
    #
    # TODO: È necessario gestire il caso di fatturazione splittata
    #        di una stessa riga d'ordine associata ad una sola
    #        picking (e di conseguenza, ad un solo DdT)?
    #       Può essere, invece, un caso "borderline"
    #        da lasciar gestire all'operatore?
    #       Personalmente, non lo gestirei e delegherei
    #        all'operatore questa responsabilità...
    #
    draft_delivery_note_lines.write(
        {"invoice_status": DOMAIN_INVOICE_STATUSES[0], "sale_line_id": None}
    )
    ready_delivery_note_lines.write({"invoice_status": DOMAIN_INVOICE_STATUSES[2]})
    for ready_delivery_note in ready_delivery_notes:
        ready_invoice_ids = [
            invoice_id
            for invoice_id in ready_delivery_note.sale_ids.mapped("invoice_ids").ids
            if invoice_id in invoice_ids
        ]
        ready_delivery_note.write(
            {"invoice_ids": [(4, invoice_id) for invoice_id in ready_invoice_ids]}
        )
    ready_delivery_notes._compute_invoice_status()