mirror of
https://github.com/guohuadeng/app-odoo.git
synced 2025-02-23 04:11:36 +02:00
update common
This commit is contained in:
@@ -1,120 +0,0 @@
|
|||||||
=====================
|
|
||||||
Product Brand Manager
|
|
||||||
=====================
|
|
||||||
|
|
||||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
|
||||||
!! changes will be overwritten. !!
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
|
|
||||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
|
|
||||||
:target: https://odoo-community.org/page/development-status
|
|
||||||
:alt: Mature
|
|
||||||
.. |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/12.0/product_brand
|
|
||||||
: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-12-0/product-attribute-12-0-product_brand
|
|
||||||
: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/12.0
|
|
||||||
:alt: Try me on Runbot
|
|
||||||
|
|
||||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
|
||||||
|
|
||||||
This module allows odoo users to easily manage product brands.
|
|
||||||
|
|
||||||
**Table of contents**
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
Usage
|
|
||||||
=====
|
|
||||||
|
|
||||||
To create a new brand:
|
|
||||||
|
|
||||||
#. Go to *Sales > Configuration > Products > Product Brands*.
|
|
||||||
#. You can set its logo, associate a partner and add a description.
|
|
||||||
|
|
||||||
To add a product to a brand:
|
|
||||||
|
|
||||||
#. Go to the product itself and edit.
|
|
||||||
#. Below the product's name there is a Brand field where you can pick the one
|
|
||||||
the product belongs to.
|
|
||||||
|
|
||||||
To see the sales report based on brand dimension:
|
|
||||||
|
|
||||||
#. Go to *Sales > Reporting > Sales*.
|
|
||||||
#. There you can *Group by* brand or add it as a dimension in the pivot view.
|
|
||||||
|
|
||||||
To see the invoice report based on brand dimension:
|
|
||||||
|
|
||||||
#. Go to *Invoicing > Reporting > Management > Invoices*.
|
|
||||||
#. There you can *Group by* brand or add it as a dimension in the pivot view.
|
|
||||||
|
|
||||||
Known issues / Roadmap
|
|
||||||
======================
|
|
||||||
|
|
||||||
* Add a field with brands associated to a Customer or Supplier on
|
|
||||||
the Customers/Suppliers Form View.
|
|
||||||
* Fix smart button alignment in brand form view
|
|
||||||
|
|
||||||
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_brand%0Aversion:%2012.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
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
* NetAndCo
|
|
||||||
* Akretion
|
|
||||||
* Prisnet Telecommunications SA
|
|
||||||
* MONK Software
|
|
||||||
* SerpentCS Pvt. Ltd.
|
|
||||||
* Tecnativa
|
|
||||||
|
|
||||||
Contributors
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
* Mathieu Lemercier <mathieu@netandco.net>
|
|
||||||
* Franck Bret <franck@netandco.net>
|
|
||||||
* Seraphine Lantible <s.lantible@gmail.com>
|
|
||||||
* Gunnar Wagner <vrms@netcologne.de>
|
|
||||||
* Leonardo Donelli <donelli@webmonks.it>
|
|
||||||
* Serpent Consulting Services Pvt. Ltd. <jay.vora@serpentcs.com>
|
|
||||||
* Marcelo Pickler <loxamir@gmail.com>
|
|
||||||
* Andrius Laukavičius <ala@boolit.eu> (Boolit)
|
|
||||||
* Daniel Campos <danielcampos@avanzosc.es>
|
|
||||||
* `Tecnativa <https://www.tecnativa.com>`_
|
|
||||||
|
|
||||||
* David Vidal <david.vidal@tecnativa.com>
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
This module is part of the `OCA/product-attribute <https://github.com/OCA/product-attribute/tree/12.0/product_brand>`_ project on GitHub.
|
|
||||||
|
|
||||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
from . import models
|
from . import models
|
||||||
# from . import reports
|
from . import report
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Product Brand Manager',
|
'name': 'Product Brand Manager',
|
||||||
'version': '13.22.03.28',
|
'version': '13.22.12.29',
|
||||||
'author': 'Sunpop.cn',
|
'author': 'Sunpop.cn',
|
||||||
'category': 'Product',
|
'category': 'Product',
|
||||||
'website': 'https://www.sunpop.cn',
|
'website': 'https://www.sunpop.cn',
|
||||||
@@ -51,7 +51,8 @@
|
|||||||
'currency': 'EUR',
|
'currency': 'EUR',
|
||||||
'images': ['static/description/banner.png'],
|
'images': ['static/description/banner.png'],
|
||||||
'depends': [
|
'depends': [
|
||||||
'sale',
|
'app_sale_pro',
|
||||||
|
'app_purchase_pro',
|
||||||
],
|
],
|
||||||
'summary': """
|
'summary': """
|
||||||
Product brand manager. Odoo App of Sunpop.cn
|
Product brand manager. Odoo App of Sunpop.cn
|
||||||
@@ -71,7 +72,8 @@
|
|||||||
5. Odoo 13, 12, 11, 企业版,社区版,多版本支持
|
5. Odoo 13, 12, 11, 企业版,社区版,多版本支持
|
||||||
""",
|
""",
|
||||||
'depends': [
|
'depends': [
|
||||||
'sale',
|
'app_purchase_pro',
|
||||||
|
'app_sale_pro',
|
||||||
],
|
],
|
||||||
'data': [
|
'data': [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
@@ -79,7 +81,8 @@
|
|||||||
'views/product_template_views.xml',
|
'views/product_template_views.xml',
|
||||||
'views/product_product_views.xml',
|
'views/product_product_views.xml',
|
||||||
# todo: update report
|
# todo: update report
|
||||||
# 'reports/sale_report_view.xml',
|
'report/sale_report_views.xml',
|
||||||
|
'report/purchase_report_views.xml',
|
||||||
# 'reports/account_invoice_report_view.xml',
|
# 'reports/account_invoice_report_view.xml',
|
||||||
],
|
],
|
||||||
'qweb': [
|
'qweb': [
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Odoo Server 13.0+e\n"
|
"Project-Id-Version: Odoo Server 13.0+e-20220602\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2019-12-11 17:04+0000\n"
|
"POT-Creation-Date: 2022-09-06 11:10+0000\n"
|
||||||
"PO-Revision-Date: 2019-12-11 17:04+0000\n"
|
"PO-Revision-Date: 2022-09-06 11:10+0000\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -97,6 +97,11 @@ msgstr "Logo文件"
|
|||||||
msgid "Number of products"
|
msgid "Number of products"
|
||||||
msgstr "产品数量"
|
msgstr "产品数量"
|
||||||
|
|
||||||
|
#. module: app_product_brand
|
||||||
|
#: model:ir.model.fields,help:app_product_brand.field_product_brand__message_unread_counter
|
||||||
|
msgid "Number of unread messages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#. module: app_product_brand
|
#. module: app_product_brand
|
||||||
#: model:ir.model.fields,field_description:app_product_brand.field_product_brand__partner_id
|
#: model:ir.model.fields,field_description:app_product_brand.field_product_brand__partner_id
|
||||||
msgid "Partner"
|
msgid "Partner"
|
||||||
@@ -105,7 +110,11 @@ msgstr "业务伙伴"
|
|||||||
#. module: app_product_brand
|
#. module: app_product_brand
|
||||||
#: model:ir.actions.act_window,name:app_product_brand.action_open_single_product_brand
|
#: model:ir.actions.act_window,name:app_product_brand.action_open_single_product_brand
|
||||||
#: model:ir.model,name:app_product_brand.model_product_brand
|
#: model:ir.model,name:app_product_brand.model_product_brand
|
||||||
|
#: model:ir.model.fields,field_description:app_product_brand.field_sale_report__product_brand_id
|
||||||
|
#: model:ir.model.fields,field_description:app_product_brand.field_purchase_report__product_brand_id
|
||||||
|
#: model_terms:ir.ui.view,arch_db:app_product_brand.app_view_order_product_search
|
||||||
#: model_terms:ir.ui.view,arch_db:app_product_brand.product_brand_search_form_view
|
#: model_terms:ir.ui.view,arch_db:app_product_brand.product_brand_search_form_view
|
||||||
|
#: model_terms:ir.ui.view,arch_db:app_product_brand.app_view_purchase_order_search
|
||||||
msgid "Product Brand"
|
msgid "Product Brand"
|
||||||
msgstr "产品品牌"
|
msgstr "产品品牌"
|
||||||
|
|
||||||
@@ -125,6 +134,21 @@ msgstr "产品"
|
|||||||
msgid "Products"
|
msgid "Products"
|
||||||
msgstr "产品"
|
msgstr "产品"
|
||||||
|
|
||||||
|
#. module: app_product_brand
|
||||||
|
#: model:ir.model.fields,field_description:app_product_brand.field_product_brand__activity_user_id
|
||||||
|
msgid "Responsible User"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: app_product_brand
|
||||||
|
#: model:ir.model.fields,field_description:app_product_brand.field_product_brand__message_has_sms_error
|
||||||
|
msgid "SMS Delivery error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: app_product_brand
|
||||||
|
#: model:ir.model,name:app_product_brand.model_sale_report
|
||||||
|
msgid "Sales Analysis Report"
|
||||||
|
msgstr "销售分析报告"
|
||||||
|
|
||||||
#. module: app_product_brand
|
#. module: app_product_brand
|
||||||
#: model:ir.model.fields,help:app_product_brand.field_product_product__product_brand_id
|
#: model:ir.model.fields,help:app_product_brand.field_product_product__product_brand_id
|
||||||
#: model:ir.model.fields,help:app_product_brand.field_product_template__product_brand_id
|
#: model:ir.model.fields,help:app_product_brand.field_product_template__product_brand_id
|
||||||
|
|||||||
@@ -1,2 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from . import product_brand
|
from . import product_brand
|
||||||
from . import product_template
|
from . import product_template
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright 2009 NetAndCo (<http://www.netandco.net>).
|
# Copyright 2009 NetAndCo (<http://www.netandco.net>).
|
||||||
# Copyright 2011 Akretion Benoît Guillot <benoit.guillot@akretion.com>
|
# Copyright 2011 Akretion Benoît Guillot <benoit.guillot@akretion.com>
|
||||||
# Copyright 2014 prisnet.ch Seraphine Lantible <s.lantible@gmail.com>
|
# Copyright 2014 prisnet.ch Seraphine Lantible <s.lantible@gmail.com>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright 2009 NetAndCo (<http://www.netandco.net>).
|
# Copyright 2009 NetAndCo (<http://www.netandco.net>).
|
||||||
# Copyright 2011 Akretion Benoît Guillot <benoit.guillot@akretion.com>
|
# Copyright 2011 Akretion Benoît Guillot <benoit.guillot@akretion.com>
|
||||||
# Copyright 2014 prisnet.ch Seraphine Lantible <s.lantible@gmail.com>
|
# Copyright 2014 prisnet.ch Seraphine Lantible <s.lantible@gmail.com>
|
||||||
|
|||||||
35
app_product_brand/models/sale_order_line.py
Normal file
35
app_product_brand/models/sale_order_line.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import logging
|
||||||
|
from odoo import fields, models, api, _
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class SaleOrderLine(models.Model):
|
||||||
|
_inherit = "sale.order.line"
|
||||||
|
|
||||||
|
product_brand_id = fields.Many2one(
|
||||||
|
'product.brand',
|
||||||
|
string='Brand',
|
||||||
|
compute='_compute_product_code',
|
||||||
|
readonly=True, store=True,
|
||||||
|
help='Select a brand for this product'
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.depends('product_id')
|
||||||
|
def _compute_product_code(self):
|
||||||
|
# 直接覆盖 app_sale_pro
|
||||||
|
data = self.env['product.product'].search_read([('id', 'in', self.mapped('product_id').ids)],
|
||||||
|
fields=['id', 'default_code', 'product_brand_id'])
|
||||||
|
for rec in self:
|
||||||
|
rec.product_code = rec.product_id.default_code
|
||||||
|
rec.categ_id = rec.product_id.categ_id
|
||||||
|
rec.product_brand_id = rec.product_id.product_brand_id
|
||||||
|
|
||||||
|
# for rec in self:
|
||||||
|
# rec.update({
|
||||||
|
# 'product_code': data[rec.product_id.id].get('default_code'),
|
||||||
|
# 'product_brand_id': data[rec.product_id.id].get('product_brand_id')
|
||||||
|
# })
|
||||||
|
|
||||||
|
|
||||||
@@ -1,2 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import sale_report
|
||||||
|
from . import purchase_report
|
||||||
|
|||||||
17
app_product_brand/report/purchase_report.py
Normal file
17
app_product_brand/report/purchase_report.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from odoo import tools
|
||||||
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class PurchaseReport(models.Model):
|
||||||
|
_inherit = "purchase.report"
|
||||||
|
|
||||||
|
product_brand_id = fields.Many2one('product.brand', string='Product Brand', readonly=True)
|
||||||
|
|
||||||
|
def _select(self):
|
||||||
|
return super(PurchaseReport, self)._select() + \
|
||||||
|
", t.product_brand_id as product_brand_id"
|
||||||
|
|
||||||
|
def _group_by(self):
|
||||||
|
return super(PurchaseReport, self)._group_by() + ",t.product_brand_id"
|
||||||
30
app_product_brand/report/purchase_report_views.xml
Normal file
30
app_product_brand/report/purchase_report_views.xml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<record id="app_product_brand_purchase_report_tree" model="ir.ui.view">
|
||||||
|
<field name="name">app.product.brand.purchase.report.tree</field>
|
||||||
|
<field name="model">purchase.report</field>
|
||||||
|
<field name="inherit_id" ref="app_purchase_pro.app_purchase_report_tree"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='product_id']" position="after">
|
||||||
|
<field name="category_id" optional="hide"/>
|
||||||
|
<field name="product_brand_id" optional="hide"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<record id="app_view_purchase_order_search" model="ir.ui.view">
|
||||||
|
<field name="name">app.purchase.report.search</field>
|
||||||
|
<field name="model">purchase.report</field>
|
||||||
|
<field name="inherit_id" ref="purchase.view_purchase_order_search"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//search//field[@name='category_id']" position="after">
|
||||||
|
<field name="product_brand_id"/>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//filter[@name='group_category_id']" position="after">
|
||||||
|
<filter string="Product Brand" name="groupby_product_brand_id"
|
||||||
|
context="{'group_by':'product_brand_id'}"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
16
app_product_brand/report/sale_report.py
Normal file
16
app_product_brand/report/sale_report.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from odoo import tools
|
||||||
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class SaleReport(models.Model):
|
||||||
|
_inherit = "sale.report"
|
||||||
|
|
||||||
|
product_brand_id = fields.Many2one('product.brand', string='Product Brand', readonly=True)
|
||||||
|
|
||||||
|
|
||||||
|
def _query(self, with_clause='', fields={}, groupby='', from_clause=''):
|
||||||
|
fields['product_brand_id'] = ", t.product_brand_id as product_brand_id"
|
||||||
|
groupby += ', t.product_brand_id'
|
||||||
|
return super(SaleReport, self)._query(with_clause, fields, groupby, from_clause)
|
||||||
29
app_product_brand/report/sale_report_views.xml
Normal file
29
app_product_brand/report/sale_report_views.xml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<record id="app_product_brand_sale_report_tree" model="ir.ui.view">
|
||||||
|
<field name="name">app.product.brand.sale.report.tree</field>
|
||||||
|
<field name="model">sale.report</field>
|
||||||
|
<field name="inherit_id" ref="app_sale_pro.app_sale_report_tree"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='product_id']" position="after">
|
||||||
|
<field name="categ_id" optional="hide"/>
|
||||||
|
<field name="product_brand_id" optional="hide"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<record id="app_view_order_product_search" model="ir.ui.view">
|
||||||
|
<field name="name">app.sale.report.search</field>
|
||||||
|
<field name="model">sale.report</field>
|
||||||
|
<field name="inherit_id" ref="sale.view_order_product_search"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//search//field[@name='categ_id']" position="after">
|
||||||
|
<field name="product_brand_id" optional="hide"/>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//filter[@name='Category']" position="after">
|
||||||
|
<filter string="Product Brand" name="groupby_product_brand_id" context="{'group_by':'product_brand_id'}"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user