From d7085dad708dd94c7da5566794e15953390deade Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Sun, 3 Apr 2016 10:53:35 +0200 Subject: [PATCH] Add scheduler.procurement.log Re-organize the code, so that each module xxx_usability only depend on xxx --- sale_stock_usability/sale_stock.py | 10 +++ sale_stock_usability/sale_stock_view.xml | 17 ++++ stock_usability/__init__.py | 1 + stock_usability/__openerp__.py | 6 +- stock_usability/procurement.py | 93 ++++++++++++++++++++ stock_usability/procurement_view.xml | 63 +++++++++++++ stock_usability/security/ir.model.access.csv | 3 + stock_usability/stock.py | 18 ---- 8 files changed, 192 insertions(+), 19 deletions(-) create mode 100644 stock_usability/procurement.py create mode 100644 stock_usability/procurement_view.xml create mode 100644 stock_usability/security/ir.model.access.csv diff --git a/sale_stock_usability/sale_stock.py b/sale_stock_usability/sale_stock.py index 47cb712..5f89046 100644 --- a/sale_stock_usability/sale_stock.py +++ b/sale_stock_usability/sale_stock.py @@ -40,3 +40,13 @@ class SaleOrderLine(models.Model): product_tmpl_id = fields.Many2one( 'product.template', related='product_id.product_tmpl_id', string='Product Template', readonly=True) + + +class ProcurementGroup(models.Model): + _inherit = 'procurement.group' + + sale_ids = fields.One2many( + 'sale.order', 'procurement_group_id', string='Sale Orders', + readonly=True) + picking_ids = fields.One2many( + 'stock.picking', 'group_id', string='Pickings', readonly=True) diff --git a/sale_stock_usability/sale_stock_view.xml b/sale_stock_usability/sale_stock_view.xml index 181b8e0..3930596 100644 --- a/sale_stock_usability/sale_stock_view.xml +++ b/sale_stock_usability/sale_stock_view.xml @@ -34,5 +34,22 @@ + + + sale_stock_usability.procurement.group.form + procurement.group + + + + + + + + + + + + + diff --git a/stock_usability/__init__.py b/stock_usability/__init__.py index b857415..2e4abfb 100644 --- a/stock_usability/__init__.py +++ b/stock_usability/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- from . import stock +from . import procurement diff --git a/stock_usability/__openerp__.py b/stock_usability/__openerp__.py index f1eb2dd..d9b1ce3 100644 --- a/stock_usability/__openerp__.py +++ b/stock_usability/__openerp__.py @@ -43,6 +43,10 @@ This module has been written by Alexis de Lattre from Akretion +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import models, fields +from datetime import datetime +import logging + +logger = logging.getLogger(__name__) + + +class ProcurementOrder(models.Model): + _inherit = 'procurement.order' + + def _procure_orderpoint_confirm( + self, cr, uid, use_new_cursor=False, company_id=False, + context=None): + logger.info( + 'procurement scheduler: START to create procurements from ' + 'orderpoints') + res = super(ProcurementOrder, self)._procure_orderpoint_confirm( + cr, uid, use_new_cursor=use_new_cursor, company_id=company_id, + context=context) + logger.info( + 'procurement scheduler: END creation of procurements from ' + 'orderpoints') + return res + + # Why is this code in stock_usability and not in procurement_usability ? + # For a very good reason + # The stock module inherits run_scheduler(). So, if we want to have the START and + # END log message and a good end date for procurement.scheduler.log + # the method below must be called first, so we must be "above" all + # modules that call run_scheduler() + def run_scheduler( + self, cr, uid, use_new_cursor=False, company_id=False, + context=None): + '''Inherit to add info logs''' + logger.info( + 'START procurement scheduler ' + '(company ID=%d, uid=%d, use_new_cursor=%s)', + company_id, uid, use_new_cursor) + start_datetime = datetime.now() + res = super(ProcurementOrder, self).run_scheduler( + cr, uid, use_new_cursor=use_new_cursor, company_id=company_id, + context=context) + logger.info( + 'END procurement scheduler ' + '(company ID=%d, uid=%d, use_new_cursor=%s)', + company_id, uid, use_new_cursor) + try: + # I put it in a try/except, to be sure that, even if the user + # the execute the scheduler doesn't have create right on + # procurement.scheduler.log + self.pool['procurement.scheduler.log'].create( + cr, uid, { + 'company_id': company_id, + 'start_datetime': start_datetime, + }, context=context) + # If I don't do an explicit cr.commit(), it doesn't create + # the procurement.scheduler.log... I don't know why + cr.commit() + except: + logger.warning('Could not create procurement.scheduler.log') + return res + + +class ProcurementSchedulerLog(models.Model): + _name = 'procurement.scheduler.log' + _description = 'Logs of the Procurement Scheduler' + _order = 'create_date desc' + + company_id = fields.Many2one( + 'res.company', string='Company', readonly=True) + start_datetime = fields.Datetime(string='Start Date', readonly=True) diff --git a/stock_usability/procurement_view.xml b/stock_usability/procurement_view.xml new file mode 100644 index 0000000..46d96ba --- /dev/null +++ b/stock_usability/procurement_view.xml @@ -0,0 +1,63 @@ + + + + + + + + + stock_usability.procurement.group.form + procurement.group + + + + + + + + + + procurement_usability.procurement.order.form + procurement.order + + + + + + + + + + + + + + + procurement_scheduler_log_tree + procurement.scheduler.log + + + + + + + + + + + + Scheduler Logs + procurement.scheduler.log + tree + + + + + + diff --git a/stock_usability/security/ir.model.access.csv b/stock_usability/security/ir.model.access.csv new file mode 100644 index 0000000..5e34784 --- /dev/null +++ b/stock_usability/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_procurement_scheduler_log_full,Full access on procurement.scheduler.log to System group,model_procurement_scheduler_log,base.group_system,1,1,1,1 +access_procurement_scheduler_log_read,Read access on procurement.scheduler.log to Employee,model_procurement_scheduler_log,base.group_user,1,0,0,0 diff --git a/stock_usability/stock.py b/stock_usability/stock.py index 441ce2f..3a745aa 100644 --- a/stock_usability/stock.py +++ b/stock_usability/stock.py @@ -103,21 +103,3 @@ class StockMove(models.Model): name = name + ' ' + fields.Date.to_string(date_expec_dt) res.append((line.id, name)) return res - - -class ProcurementOrder(models.Model): - _inherit = "procurement.order" - - def _procure_orderpoint_confirm( - self, cr, uid, use_new_cursor=False, company_id=False, - context=None): - logger.info( - 'procurement scheduler: START to create procurements from ' - 'orderpoints') - res = super(ProcurementOrder, self)._procure_orderpoint_confirm( - cr, uid, use_new_cursor=use_new_cursor, company_id=company_id, - context=context) - logger.info( - 'procurement scheduler: END creation of procurements from ' - 'orderpoints') - return res