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] storage_media_product #294

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
792aa41
[REF] refactor product_media and split it in two module storage_media…
sebastienbeau Jun 7, 2018
b813dec
[IMP] add related fields to simplify access for the module build on t…
sebastienbeau Jul 31, 2018
7394516
[FIX] clean with pre-commit and pep 8
bguillot Apr 10, 2019
d5a3f7c
[12.0] storage*: Make installable False
rousseldenis Jun 7, 2019
9d2d545
[FIX] __manifest__: Uses github repo url as website and add OCA into …
lmignon Sep 24, 2019
3892bbf
pre-commit, black, isort
sbidoul Oct 1, 2019
4a8950f
[REF] storage_media_product: Black python code
simahawk Aug 12, 2020
0691c09
[MIG] storage_media_product: Migration to 13.0
simahawk Aug 12, 2020
058b619
storage_media_product: fix plural for 'media'
simahawk Aug 12, 2020
52eb733
storage_media_product: fix model description and field label
simahawk Aug 17, 2020
add73bd
[UPD] Update storage_media_product.pot
oca-travis Aug 28, 2020
a69e568
[ADD] icon.png
OCA-git-bot Aug 28, 2020
9906114
[ADD] add new V14 config
sebastienbeau Dec 6, 2020
87525d4
[IMP] all: black, isort, prettier
sebastienbeau Dec 6, 2020
1270a0a
[MIG] batch migration of modules
sebastienbeau Dec 6, 2020
f31ff37
storage_media_product 14.0.1.0.1
OCA-git-bot Mar 1, 2021
8a6d6c3
[UPD] Update storage_media_product.pot
oca-travis Jun 9, 2021
e53fa5e
[CHG] storage: Use more permissive licence: AGPL-> LGPL
etobella Mar 10, 2021
62be141
storage_media_product 14.0.2.0.0
OCA-git-bot Aug 2, 2021
0e0641a
[14.0][FIX] storage media listed on product variant
TDu Sep 3, 2021
0e22792
storage_media_product 14.0.2.0.1
OCA-git-bot Oct 6, 2021
913fe67
[FIX] storage_media_product: domain for media attributes
i-vyshnevska Feb 2, 2021
9cedaf4
storage_media_product 14.0.2.0.2
OCA-git-bot Dec 11, 2021
bd53bf2
s_media_product: proxy url_path too on media relation
simahawk Jun 1, 2022
9bfc503
[UPD] Update storage_media_product.pot
oca-travis Jun 15, 2022
a00c98f
storage_media_product 14.0.2.1.0
OCA-git-bot Jun 15, 2022
7c6c4a6
[IMP] storage_media_product: Add optional description
HviorForgeFlow Jun 30, 2022
675b9df
[UPD] Update storage_media_product.pot
Oct 17, 2022
0adae8e
storage_media_product 14.0.2.2.0
OCA-git-bot Oct 17, 2022
fece677
[IMP] storage_media_product: black, isort, prettier
JasminSForgeFlow Oct 25, 2023
037acad
[MIG] storage_media_product: Migration to 16.0
JasminSForgeFlow Oct 26, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions setup/storage_media_product/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
65 changes: 65 additions & 0 deletions storage_media_product/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@

.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3

=============
Image Product
=============


Attach images to products and categories

Installation
============

See installation notes of the following modules :

- storage_image
- storage_file
- storage_backend


Configuration
=============

See installation

Usage
=====

A) Categories

Go to Sales > Configuration > Products > Product Categories.
A new field Image is available to upload or use an existing image.

B) Products

Go to Sales > Products. In variants tab, after the attributes selection, you will find the images.


For uploading and managing the images see the module storage_image.



Known issues / Roadmap
======================

* For products: no filter on attribute values used in the template
* For categories : a better place can be set.


Credits
=======


Contributors
------------

* Raphaël Reverdy <[email protected]>


Maintainer
----------

* Akretion
1 change: 1 addition & 0 deletions storage_media_product/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
20 changes: 20 additions & 0 deletions storage_media_product/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Copyright 2018 Akretion (http://www.akretion.com).
# @author Sébastien BEAU <[email protected]>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).

{
"name": "Storage Media Product",
"summary": "Link media to products and categories",
"version": "16.0.2.2.0",
"category": "Storage",
"website": "https://github.com/OCA/storage",
"author": " Akretion, Odoo Community Association (OCA)",
"license": "LGPL-3",
"installable": True,
"depends": ["storage_media", "product"],
"data": [
"security/ir.model.access.csv",
"views/product.xml",
"views/product_category.xml",
],
}
155 changes: 155 additions & 0 deletions storage_media_product/i18n/storage_media_product.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * storage_media_product
#
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: storage_media_product
#: model:ir.model.fields,help:storage_media_product.field_product_media_relation__url_path
msgid "Accessible path, no base URL"
msgstr ""

#. module: storage_media_product
#: model_terms:ir.ui.view,arch_db:storage_media_product.product_media_relation_form
#: model_terms:ir.ui.view,arch_db:storage_media_product.product_media_relation_tree
msgid "Association"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__attribute_value_ids
msgid "Attributes"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__available_attribute_value_ids
msgid "Available attributes"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__create_uid
msgid "Created by"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__create_date
msgid "Created on"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__description
msgid "Description"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_category__display_name
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__display_name
#: model:ir.model.fields,field_description:storage_media_product.field_product_product__display_name
#: model:ir.model.fields,field_description:storage_media_product.field_product_template__display_name
msgid "Display Name"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,help:storage_media_product.field_product_media_relation__url
msgid "HTTP accessible path to the file"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_category__id
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__id
#: model:ir.model.fields,field_description:storage_media_product.field_product_product__id
#: model:ir.model.fields,field_description:storage_media_product.field_product_template__id
msgid "ID"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_category____last_update
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation____last_update
#: model:ir.model.fields,field_description:storage_media_product.field_product_product____last_update
#: model:ir.model.fields,field_description:storage_media_product.field_product_template____last_update
msgid "Last Modified on"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__write_uid
msgid "Last Updated by"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__write_date
msgid "Last Updated on"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_category__media_ids
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__media_id
#: model:ir.model.fields,field_description:storage_media_product.field_product_product__media_ids
#: model:ir.model.fields,field_description:storage_media_product.field_product_template__media_ids
#: model_terms:ir.ui.view,arch_db:storage_media_product.product_category_form_view
#: model_terms:ir.ui.view,arch_db:storage_media_product.product_normal_form_view
#: model_terms:ir.ui.view,arch_db:storage_media_product.product_template_only_form_view
msgid "Media"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__media_type_id
msgid "Media Type"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__name
msgid "Name"
msgstr ""

#. module: storage_media_product
#: model:ir.model,name:storage_media_product.model_product_product
msgid "Product"
msgstr ""

#. module: storage_media_product
#: model:ir.model,name:storage_media_product.model_product_category
msgid "Product Category"
msgstr ""

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

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__product_tmpl_id
msgid "Product Tmpl"
msgstr ""

#. module: storage_media_product
#: model:ir.model,name:storage_media_product.model_product_media_relation
msgid "Products and storage media relation"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__sequence
msgid "Sequence"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__url
msgid "Url"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_media_relation__url_path
msgid "Url Path"
msgstr ""

#. module: storage_media_product
#: model:ir.model.fields,field_description:storage_media_product.field_product_product__variant_media_ids
msgid "Variant Media"
msgstr ""
2 changes: 2 additions & 0 deletions storage_media_product/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import product
from . import product_category
71 changes: 71 additions & 0 deletions storage_media_product/models/product.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Copyright 2018 Akretion (http://www.akretion.com).
# @author Sébastien BEAU <[email protected]>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).

from odoo import api, fields, models


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

media_ids = fields.One2many(
"product.media.relation", inverse_name="product_tmpl_id"
)


class ProductProduct(models.Model):
_inherit = "product.product"

variant_media_ids = fields.Many2many(
"product.media.relation",
compute="_compute_variant_media_ids",
store=True,
)

@api.depends(
"product_tmpl_id.media_ids",
"product_template_attribute_value_ids",
"product_tmpl_id.media_ids.attribute_value_ids",
)
def _compute_variant_media_ids(self):
for variant in self:
variant_attr_values = variant.product_template_attribute_value_ids.mapped(
"product_attribute_value_id"
)
res = self.env["product.media.relation"].browse([])
for media in variant.media_ids:
if not (media.attribute_value_ids - variant_attr_values):
res |= media
variant.variant_media_ids = res


class ProductMediaRelation(models.Model):
_name = "product.media.relation"
_order = "sequence, media_id"
_description = "Products and storage media relation"

sequence = fields.Integer()
media_id = fields.Many2one("storage.media", required=True)
attribute_value_ids = fields.Many2many(
"product.attribute.value", string="Attributes"
)
# This field will list all attribute value used by the template
# in order to filter the attribute value available for the current media
available_attribute_value_ids = fields.Many2many(
"product.attribute.value",
string="Available attributes",
compute="_compute_available_attribute",
)
product_tmpl_id = fields.Many2one("product.template")
name = fields.Char(related="media_id.name", readonly=True)
description = fields.Text()
url = fields.Char(related="media_id.url", readonly=True)
media_type_id = fields.Many2one(related="media_id.media_type_id", readonly=True)

@api.depends("media_id", "product_tmpl_id.attribute_line_ids.value_ids")
def _compute_available_attribute(self):
# the depend on 'media_id' only added for triggering the onchange
for rec in self:
rec.available_attribute_value_ids = rec.product_tmpl_id.mapped(
"attribute_line_ids.value_ids"
)
12 changes: 12 additions & 0 deletions storage_media_product/models/product_category.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Copyright 2018 Akretion (http://www.akretion.com).
# @author Sébastien BEAU <[email protected]>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).


from odoo import fields, models


class ProductCategory(models.Model):
_inherit = "product.category"

media_ids = fields.Many2many("storage.media")
3 changes: 3 additions & 0 deletions storage_media_product/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_product_media_edit,product_media edit,model_product_media_relation,storage_media.group_media_manager,1,1,1,1
access_product_media_read,product_media read,model_product_media_relation,base.group_user,1,0,0,0
Binary file added storage_media_product/static/description/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading