Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0] [MIG] product_state_history: Migration to 16.0 #1396

Closed
107 changes: 107 additions & 0 deletions product_state_history/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
=====================
Product State History
=====================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github
:target: https://github.com/OCA/product-attribute/tree/14.0/product_state_history
:alt: OCA/product-attribute
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/product-attribute-14-0/product-attribute-14-0-product_state_history
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/135/14.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows you to store your product life-cycle history in order
to retrieve statistics about it.

* Product Form:

.. image:: https://user-images.githubusercontent.com/19529533/89024532-8e210200-d325-11ea-8966-48e68a2961c7.png

* History Tree:

.. image:: https://user-images.githubusercontent.com/19529533/89024542-924d1f80-d325-11ea-9d3f-b5ccd9904d47.png

* History Pivot:

.. image:: https://user-images.githubusercontent.com/19529533/89024559-96793d00-d325-11ea-9eb0-5dd0433ebb46.png

* History Report:

.. image:: https://user-images.githubusercontent.com/19529533/89024565-99742d80-d325-11ea-99a8-deb1714c3346.png

**Table of contents**

.. contents::
:local:

Usage
=====

* On each product form, you can access its state history through the
'State History' button.
* A report is also accessible after having installed the sale related module.
* Only the Product State History Manager is allowed to modify or delete an
history entry.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-attribute/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/product-attribute/issues/new?body=module:%20product_state_history%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* ACSONE SA/NV

Contributors
~~~~~~~~~~~~

* Denis Roussel <denis.roussel@acsone.eu>

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-rousseldenis| image:: https://github.com/rousseldenis.png?size=40px
:target: https://github.com/rousseldenis
:alt: rousseldenis

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-rousseldenis|

This module is part of the `OCA/product-attribute <https://github.com/OCA/product-attribute/tree/14.0/product_state_history>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions product_state_history/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import wizards
25 changes: 25 additions & 0 deletions product_state_history/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "Product State History",
"summary": """
Allows to store product state history for reporting purpose""",
"version": "16.0.1.0.0",
"license": "AGPL-3",
"category": "Sales",
"maintainers": ["rousseldenis"],
"author": "ACSONE SA/NV,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/product-attribute",
"depends": [
"product_state",
],
"data": [
"security/product_state_history.xml",
"security/product_state_history_wizard.xml",
"views/product_state_history.xml",
"views/product_template.xml",
"wizards/product_state_history_wizard.xml",
"report/report_product_state_history.xml",
],
}
160 changes: 160 additions & 0 deletions product_state_history/i18n/product_state_history.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * product_state_history
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.report_product_state_history
msgid "<strong>Code</strong>"
msgstr ""

#. module: product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.product_state_history_wizard_form_view
msgid "Cancel"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__create_uid
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard__create_uid
msgid "Created by"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__create_date
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard__create_date
msgid "Created on"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__state_date
msgid "Date"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__display_name
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard__display_name
#: model:ir.model.fields,field_description:product_state_history.field_product_template__display_name
#: model:ir.model.fields,field_description:product_state_history.field_report_product_state_history_report_product_state_history__display_name
msgid "Display Name"
msgstr ""

#. module: product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.product_state_history_search_view
msgid "Group By"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__id
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard__id
#: model:ir.model.fields,field_description:product_state_history.field_product_template__id
#: model:ir.model.fields,field_description:product_state_history.field_report_product_state_history_report_product_state_history__id
msgid "ID"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history____last_update
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard____last_update
#: model:ir.model.fields,field_description:product_state_history.field_product_template____last_update
#: model:ir.model.fields,field_description:product_state_history.field_report_product_state_history_report_product_state_history____last_update
msgid "Last Modified on"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__write_uid
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard__write_uid
msgid "Last Updated by"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__write_date
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard__write_date
msgid "Last Updated on"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard__pivot_date
msgid "Pivot Date"
msgstr ""

#. module: product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.report_product_state_history
msgid "Pivot Date:"
msgstr ""

#. module: product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.product_state_history_wizard_form_view
msgid "Print"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__product_template_id
#: model_terms:ir.ui.view,arch_db:product_state_history.product_state_history_search_view
#: model_terms:ir.ui.view,arch_db:product_state_history.report_product_state_history
msgid "Product"
msgstr ""

#. module: product_state_history
#: model:ir.actions.act_window,name:product_state_history.product_state_history_act_window
#: model:ir.actions.report,name:product_state_history.action_report_product_state_history
#: model:ir.model,name:product_state_history.model_product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.product_state_history_pivot_view
#: model_terms:ir.ui.view,arch_db:product_state_history.report_product_state_history
msgid "Product State History"
msgstr ""

#. module: product_state_history
#: model:res.groups,name:product_state_history.product_state_history_group_manager
msgid "Product State History Manager"
msgstr ""

#. module: product_state_history
#: model:ir.model,name:product_state_history.model_product_state_history_wizard
#: model:ir.model,name:product_state_history.model_report_product_state_history_report_product_state_history
msgid "Product State History Report"
msgstr ""

#. module: product_state_history
#: model:ir.actions.act_window,name:product_state_history.action_product_state_history_wizard
msgid "Product State Report"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history_wizard__product_state_id
msgid "Product Status"
msgstr ""

#. module: product_state_history
#: model:ir.model,name:product_state_history.model_product_template
msgid "Product Template"
msgstr ""

#. module: product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.product_state_history_search_view
#: model_terms:ir.ui.view,arch_db:product_state_history.report_product_state_history
msgid "State"
msgstr ""

#. module: product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.report_product_state_history
msgid "State Date"
msgstr ""

#. module: product_state_history
#: model_terms:ir.ui.view,arch_db:product_state_history.product_template_form_view
msgid "State History"
msgstr ""

#. module: product_state_history
#: model:ir.model.fields,field_description:product_state_history.field_product_state_history__product_state_id
msgid "Status"
msgstr ""
3 changes: 3 additions & 0 deletions product_state_history/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import product_state_history
from . import product_template
from . import report_product_state_history
31 changes: 31 additions & 0 deletions product_state_history/models/product_state_history.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import fields, models


class ProductStateHistory(models.Model):
_name = "product.state.history"
_description = "Product State History"
_order = "id desc"
_rec_name = "product_template_id"

product_template_id = fields.Many2one(
comodel_name="product.template",
string="Product",
required=True,
ondelete="cascade",
index=True,
)
product_state_id = fields.Many2one(
comodel_name="product.state",
index=True,
string="Status",
required=True,
)
state_date = fields.Datetime(
default=lambda s: fields.Datetime.now(),
string="Date",
required=True,
index=True,
)
42 changes: 42 additions & 0 deletions product_state_history/models/product_template.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Copyright 2020 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from odoo import models


class ProductTemplate(models.Model):
_inherit = "product.template"

def _prepare_product_state_history_values(self, state_id):
"""Prepare product state history values for create"""
self.ensure_one()
vals = {
"product_template_id": self.id,
"product_state_id": state_id,
}
return vals

def _set_product_state_history(self, vals):
"""Create a list of history values"""
history_obj = self.env["product.state.history"]
history_vals = []
state_id = vals["product_state_id"]
# We check if new state is different from the current one
for template in self.filtered(lambda t: t.product_state_id.id != state_id):
history_vals.append(
template._prepare_product_state_history_values(state_id)
)
if history_vals:
history_obj.create(history_vals)

def write(self, vals):
if "product_state_id" in vals:
self._set_product_state_history(vals)
res = super().write(vals)
return res

def action_product_state_history(self):
xmlid = "product_state_history.product_state_history_act_window"
action = self.env["ir.actions.act_window"]._for_xml_id(xmlid)
action.update({"domain": [("product_template_id", "in", self.ids)]})
return action
Loading