# -*- coding: utf-8 -*- # Copyright 2019 Coop IT Easy SCRL fs # Robin Keunen # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from openerp import models, fields, api import logging _logger = logging.getLogger(__name__) class ProcurementOrder(models.Model): _inherit = "procurement.order" @api.model def cron_cleanup_procurement_order(self): running_procurement = self.env["procurement.order"].search( [("state", "=", "running")] ) # checks if procurement order is done # -> if all moves are 'done' or 'cancel' _logger.info("check procurements in running state.") running_procurement.check() # in remaining procurement, cancel those with no procurement order unlinked_procurement = self.env["procurement.order"].search( [("state", "=", "running"), ("purchase_line_id", "=", False)] ) _logger.info( "cancelling %s procurement unlinked from PO." % len(unlinked_procurement) ) unlinked_procurement.cancel() # in remaining procurement, delete those from 'done' purchase order procurement_linked_to_done_PO = self.env["procurement.order"].search( [ ("state", "=", "running"), ("purchase_line_id", "!=", False), ("purchase_line_id.order_id.state", "=", "done"), ] ) _logger.info( "set %s procurement to done (linked to done PO)" % len(procurement_linked_to_done_PO) ) procurement_linked_to_done_PO.write({"state": "done"}) # cancel procurement order from exceptions # Refused by SPP - La Fève, overload this function in custom modules # to automate cleanup of exceptions # exception_procurement = self.env["procurement.order"].search( # [("state", "=", "exception"), ("purchase_line_id", "=", False)] # ) # _logger.info( # "cancelling %s procurement in exception" # % len(exception_procurement) # ) # exception_procurement.cancel()