Browse Source

Muestra en la ficha de productos lineas de facturas de ese producto

sebastian 5 năm trước cách đây
commit
8808924a06

+ 5 - 0
__init__.py

@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in root directory
+##############################################################################
+from . import models

BIN
__init__.pyc


+ 44 - 0
__openerp__.py

@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+#    Trey, Kilobytes de Soluciones
+#    Copyright (C) 2017-Today Trey, Kilobytes de Soluciones <www.trey.es>
+#
+#    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 <http://www.gnu.org/licenses/>.
+#
+###############################################################################
+{
+    'name': 'Product Invoiced Line',
+    'summary': 'Include invoiced lines in product\'s form',
+    'description': '''
+Include two buttons in product\'s form:  customer's invoice lines and
+supplier's invoice lines'
+    ''',
+    'author': 'Trey (www.trey.es)',
+    'license': 'AGPL-3',
+    'website': 'https://www.trey.es',
+    'category': 'Product',
+    'version': '8.0.1.0.0',
+    'depends': [
+        'account',
+        'purchase',
+        'sale',
+    ],
+    'data': [
+        'views/account_invoice_line.xml',
+        'views/product_product.xml',
+        'views/product_template.xml',
+    ],
+    'installable': True,
+}

+ 130 - 0
i18n/es.po

@@ -0,0 +1,130 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* product_invoiced_line
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 8.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-10-31 13:05+0000\n"
+"PO-Revision-Date: 2017-10-31 14:14+0100\n"
+"Last-Translator: <info@trey.es>\n"
+"Language-Team: trey <info@trey.es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: es_ES\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+#. module: product_invoiced_line
+#: help:account.invoice.line,inv_state:0
+msgid ""
+" * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n"
+" * The 'Pro-forma' when invoice is in Pro-forma status,invoice does not have an invoice number.\n"
+" * The 'Open' status is used when user create invoice,a invoice number is generated.Its in open status till user does not pay invoice.\n"
+" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
+" * The 'Cancelled' status is used when user cancel invoice."
+msgstr ""
+" * El estado 'Borrador' se usa cuando un usuario está registrando una factura no confirmada.\n"
+" * El 'Pro-forma' cuando la factura está en estado Pro-forma, la factura no tiene un número de factura.\n"
+" * El estado 'Abierto' se usa cuando el usuario crea la factura, un número de factura es generado.Estará en estado abierto mientras el usuario no pague la factura.\n"
+" * El estado 'Pagado' se establece automáticamente cuando la factura está pagada. Está relacionado con entradas de diario estén o no reconciliadas.\n"
+" * El estado 'Cancelado' se usa cuando el usuario cancela la factura."
+
+#. module: product_invoiced_line
+#: view:product.product:product_invoiced_line.product_normal_form_view
+#: view:product.template:product_invoiced_line.product_template_only_form_view
+msgid "Cus. Inv. Lines"
+msgstr "Líneas fact. cli."
+
+#. module: product_invoiced_line
+#: field:product.product,cus_inv_lines_count:0
+#: field:product.template,cus_inv_lines_count:0
+msgid "Customer Lines"
+msgstr "Líneas cliente"
+
+#. module: product_invoiced_line
+#: code:addons/product_invoiced_line/models/product_product.py:65
+#: code:addons/product_invoiced_line/models/product_template.py:65
+#, python-format
+msgid "Customer Lines invoiced"
+msgstr "Líneas facturadas de cliente"
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Draft"
+msgstr "Borrador"
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Group By..."
+msgstr "Agrupar por..."
+
+#. module: product_invoiced_line
+#: model:ir.model,name:product_invoiced_line.model_account_invoice_line
+msgid "Invoice Line"
+msgstr "Línea de factura"
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+#: field:account.invoice.line,inv_date:0
+msgid "Invoice Date"
+msgstr "Fecha factura"
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+#: field:account.invoice.line,inv_state:0
+msgid "Invoice State"
+msgstr "Estado factura"
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_tree
+msgid "Invoice line"
+msgstr "Línea factura"
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Open"
+msgstr "Abierto"
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Paid"
+msgstr "Pagado"
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Partner"
+msgstr "Cliente"
+
+#. module: product_invoiced_line
+#: model:ir.model,name:product_invoiced_line.model_product_product
+msgid "Product"
+msgstr "Producto"
+
+#. module: product_invoiced_line
+#: model:ir.model,name:product_invoiced_line.model_product_template
+msgid "Product Template"
+msgstr "Plantilla de producto"
+
+#. module: product_invoiced_line
+#: view:product.product:product_invoiced_line.product_normal_form_view
+#: view:product.template:product_invoiced_line.product_template_only_form_view
+msgid "Sup. Inv. Lines"
+msgstr "Líneas fact. prov."
+
+#. module: product_invoiced_line
+#: field:product.product,sup_inv_lines_count:0
+#: field:product.template,sup_inv_lines_count:0
+msgid "Supplier Lines"
+msgstr "Líneas proveedor"
+
+#. module: product_invoiced_line
+#: code:addons/product_invoiced_line/models/product_product.py:45
+#: code:addons/product_invoiced_line/models/product_template.py:45
+#, python-format
+msgid "Supplier Lines invoiced"
+msgstr "Líneas facturadas proveedor"

+ 125 - 0
i18n/product_invoiced_line.pot

@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* product_invoiced_line
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 8.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-10-31 14:16+0100\n"
+"PO-Revision-Date: 2017-10-31 13:15+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: Trey <info@trey.es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 1.8.7.1\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+#. module: product_invoiced_line
+#: help:account.invoice.line,inv_state:0
+msgid ""
+" * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n"
+" * The 'Pro-forma' when invoice is in Pro-forma status,invoice does not have an invoice number.\n"
+" * The 'Open' status is used when user create invoice,a invoice number is generated.Its in open status till user does not pay invoice.\n"
+" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
+" * The 'Cancelled' status is used when user cancel invoice."
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:product.product:product_invoiced_line.product_normal_form_view
+#: view:product.template:product_invoiced_line.product_template_only_form_view
+msgid "Cus. Inv. Lines"
+msgstr ""
+
+#. module: product_invoiced_line
+#: field:product.product,cus_inv_lines_count:0
+#: field:product.template,cus_inv_lines_count:0
+msgid "Customer Lines"
+msgstr ""
+
+#. module: product_invoiced_line
+#: code:addons/product_invoiced_line/models/product_product.py:65
+#: code:addons/product_invoiced_line/models/product_template.py:65
+#, python-format
+msgid "Customer Lines invoiced"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Draft"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Group By..."
+msgstr ""
+
+#. module: product_invoiced_line
+#: model:ir.model,name:product_invoiced_line.model_account_invoice_line
+msgid "Invoice Line"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+#: field:account.invoice.line,inv_state:0
+msgid "Invoice State"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+#: field:account.invoice.line,inv_date:0
+msgid "Invoice Date"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_tree
+msgid "Invoice line"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Open"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Paid"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:account.invoice.line:product_invoiced_line.product_account_invoice_line_search
+msgid "Partner"
+msgstr ""
+
+#. module: product_invoiced_line
+#: model:ir.model,name:product_invoiced_line.model_product_product
+msgid "Product"
+msgstr ""
+
+#. module: product_invoiced_line
+#: model:ir.model,name:product_invoiced_line.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: product_invoiced_line
+#: view:product.product:product_invoiced_line.product_normal_form_view
+#: view:product.template:product_invoiced_line.product_template_only_form_view
+msgid "Sup. Inv. Lines"
+msgstr ""
+
+#. module: product_invoiced_line
+#: field:product.product,sup_inv_lines_count:0
+#: field:product.template,sup_inv_lines_count:0
+msgid "Supplier Lines"
+msgstr ""
+
+#. module: product_invoiced_line
+#: code:addons/product_invoiced_line/models/product_product.py:45
+#: code:addons/product_invoiced_line/models/product_template.py:45
+#, python-format
+msgid "Supplier Lines invoiced"
+msgstr ""

+ 7 - 0
models/__init__.py

@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in root directory
+##############################################################################
+from . import account_invoice_line
+from . import product_product
+from . import product_template

BIN
models/__init__.pyc


+ 18 - 0
models/account_invoice_line.py

@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in root directory
+##############################################################################
+from openerp import models, fields
+
+
+class AccountInvoiceLine(models.Model):
+    _inherit = 'account.invoice.line'
+
+    inv_state = fields.Selection(
+        string='Invoice State',
+        related='invoice_id.state',
+        store=True)
+    inv_date = fields.Date(
+        string='Invoice Date',
+        related='invoice_id.date_invoice',
+        store=True)

BIN
models/account_invoice_line.pyc


+ 82 - 0
models/product_product.py

@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in root directory
+##############################################################################
+from openerp import models, fields, api, _
+
+
+class ProductProduct(models.Model):
+    _inherit = 'product.product'
+
+    sup_inv_lines_count = fields.Float(
+        string='Supplier Lines',
+        compute='_supplier_lines_count')
+    cus_inv_lines_count = fields.Float(
+        string='Customer Lines',
+        compute='_customer_lines_count')
+
+    @api.multi
+    def _supplier_lines_count(self):
+        for prod in self:
+            prod.sup_inv_lines_count = self.env[
+                'account.invoice.line'].search_count(
+                    prod._get_product_supplier_domain())
+
+    @api.multi
+    def _customer_lines_count(self):
+        for prod in self:
+            prod.cus_inv_lines_count = self.env[
+                'account.invoice.line'].search_count(
+                    prod._get_product_customer_domain())
+
+    @api.multi
+    def _get_product_supplier_domain(self):
+        return [
+            ('product_id', 'in', self.ids),
+            ('invoice_id.type', 'in', ['in_invoice', 'in_refund']),
+            ('invoice_id.state', '!=', 'cancel')]
+
+    @api.multi
+    def _get_product_customer_domain(self):
+        return [
+            ('product_id', 'in', self.ids),
+            ('invoice_id.type', 'in', ['out_invoice', 'out_refund']),
+            ('invoice_id.state', '!=', 'cancel')]
+
+    @api.multi
+    def action_view_supplier_invoice_lines(self):
+        tree_view = self.env.ref(
+            'product_invoiced_line.product_account_invoice_line_tree')
+        search_view = self.env.ref(
+            'product_invoiced_line.product_account_invoice_line_search')
+        return {
+            'name': _('Supplier Lines invoiced'),
+            'domain': self._get_product_supplier_domain(),
+            'res_model': 'account.invoice.line',
+            'type': 'ir.actions.act_window',
+            'views': [(tree_view.id, 'tree')],
+            'view_mode': 'tree',
+            'search_view_id': search_view.id,
+            'view_type': 'form',
+            'context': {
+                'search_default_inv_open': 1,
+                'search_default_inv_paid': 1}}
+
+    @api.multi
+    def action_view_customer_invoice_lines(self):
+        tree_view = self.env.ref(
+            'product_invoiced_line.product_account_invoice_line_tree')
+        search_view = self.env.ref(
+            'product_invoiced_line.product_account_invoice_line_search')
+        return {
+            'name': _('Customer Lines invoiced'),
+            'domain': self._get_product_customer_domain(),
+            'res_model': 'account.invoice.line',
+            'type': 'ir.actions.act_window',
+            'views': [(tree_view.id, 'tree')],
+            'view_mode': 'tree',
+            'search_view_id': search_view.id,
+            'view_type': 'form',
+            'context': {
+                'search_default_inv_open': 1,
+                'search_default_inv_paid': 1}}

BIN
models/product_product.pyc


+ 80 - 0
models/product_template.py

@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in root directory
+##############################################################################
+from openerp import models, fields, api, _
+
+
+class ProductTemplate(models.Model):
+    _inherit = 'product.template'
+
+    sup_inv_lines_count = fields.Float(
+        string='Supplier Lines',
+        compute='_supplier_lines_count')
+    cus_inv_lines_count = fields.Float(
+        string='Customer Lines',
+        compute='_customer_lines_count')
+
+    @api.multi
+    def _supplier_lines_count(self):
+        for template in self:
+            template.sup_inv_lines_count = sum(
+                [p.sup_inv_lines_count for p in template.product_variant_ids])
+
+    @api.multi
+    def _customer_lines_count(self):
+        for template in self:
+            template.cus_inv_lines_count = sum(
+                [p.cus_inv_lines_count for p in template.product_variant_ids])
+
+    @api.multi
+    def _get_product_template_supplier_domain(self):
+        return [
+            ('product_id', 'in', self._get_products()),
+            ('invoice_id.type', 'in', ['in_invoice', 'in_refund']),
+            ('invoice_id.state', '!=', 'cancel')]
+
+    @api.multi
+    def _get_product_template_customer_domain(self):
+        return [
+            ('product_id', 'in', self._get_products()),
+            ('invoice_id.type', 'in', ['out_invoice', 'out_refund']),
+            ('invoice_id.state', '!=', 'cancel')]
+
+    @api.multi
+    def action_view_pt_supplier_invoice_lines(self):
+        tree_view = self.env.ref(
+            'product_invoiced_line.product_account_invoice_line_tree')
+        search_view = self.env.ref(
+            'product_invoiced_line.product_account_invoice_line_search')
+        return {
+            'name': _('Supplier Lines invoiced'),
+            'domain': self._get_product_template_supplier_domain(),
+            'res_model': 'account.invoice.line',
+            'type': 'ir.actions.act_window',
+            'views': [(tree_view.id, 'tree')],
+            'view_mode': 'tree',
+            'search_view_id': search_view.id,
+            'view_type': 'form',
+            'context': {
+                'search_default_inv_open': 1,
+                'search_default_inv_paid': 1}}
+
+    @api.multi
+    def action_view_pt_customer_invoice_lines(self):
+        tree_view = self.env.ref(
+            'product_invoiced_line.product_account_invoice_line_tree')
+        search_view = self.env.ref(
+            'product_invoiced_line.product_account_invoice_line_search')
+        return {
+            'name': _('Customer Lines invoiced'),
+            'domain': self._get_product_template_customer_domain(),
+            'res_model': 'account.invoice.line',
+            'type': 'ir.actions.act_window',
+            'views': [(tree_view.id, 'tree')],
+            'view_mode': 'tree',
+            'search_view_id': search_view.id,
+            'view_type': 'form',
+            'context': {
+                'search_default_inv_open': 1,
+                'search_default_inv_paid': 1}}

BIN
models/product_template.pyc


BIN
static/description/icon.png


+ 41 - 0
views/account_invoice_line.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <record id="product_account_invoice_line_tree" model="ir.ui.view">
+            <field name="model">account.invoice.line</field>
+            <field name="arch" type="xml">
+                <tree string="Invoice line" create="false">
+                    <field name="invoice_id"/>
+                    <field name="inv_date"/>
+                    <field name="partner_id"/>
+                    <field name="product_id"/>
+                    <field name="name"/>
+                    <field name="quantity"/>
+                    <field name="uos_id" groups="product.group_uom"/>
+                    <field name="price_unit"/>
+                    <field name="price_subtotal"/>
+                    <field name="inv_state"/>
+                </tree>
+            </field>
+        </record>
+        <record id="product_account_invoice_line_search" model="ir.ui.view">
+            <field name="model">account.invoice.line</field>
+            <field name="arch" type="xml">
+                <search string="Invoice line">
+                    <field name="product_id"/>
+                    <field name="name"/>
+                    <field name="inv_date"/>
+                    <filter name="inv_draft" string="Draft" domain="[('inv_state','=', 'draft')]"/>
+                    <filter name="inv_open" string="Open" domain="[('inv_state','=', 'open')]"/>
+                    <filter name="inv_paid" string="Paid" domain="[('inv_state','=', 'paid')]"/>
+                    <newline />
+                    <group expand="0" string="Group By...">
+                        <filter string="Invoice State" domain="[]" context="{'group_by':'inv_state'}"/>
+                        <filter string="Partner" domain="[]" context="{'group_by':'partner_id'}"/>
+                        <filter string="Invoice Date" domain="[]" context="{'group_by':'inv_date'}"/>
+                    </group>
+                </search>
+            </field>
+        </record>
+    </data>
+</openerp>

+ 22 - 0
views/product_product.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <record id="product_normal_form_view" model="ir.ui.view">
+            <field name="model">product.product</field>
+            <field name="inherit_id" ref="product.product_normal_form_view"/>
+            <field name="groups_id" eval="[(4, ref('account.group_account_invoice'))]"/>
+            <field name="arch" type="xml">
+                <xpath expr="//div[@name='buttons']" position="inside">
+                   <button class="oe_inline oe_stat_button" name="action_view_supplier_invoice_lines" type="object"
+                       icon="fa-shopping-cart">
+                       <field string="Sup. Inv. Lines" name="sup_inv_lines_count" widget="statinfo"/>
+                   </button>
+                   <button class="oe_inline oe_stat_button" name="action_view_customer_invoice_lines" type="object"
+                       icon="fa-strikethrough">
+                       <field string="Cus. Inv. Lines" name="cus_inv_lines_count" widget="statinfo"/>
+                   </button>
+                </xpath>
+            </field>
+        </record>
+    </data>
+</openerp>

+ 22 - 0
views/product_template.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <record id="product_template_only_form_view" model="ir.ui.view">
+            <field name="model">product.template</field>
+            <field name="inherit_id" ref="product.product_template_only_form_view"/>
+            <field name="groups_id" eval="[(4, ref('account.group_account_invoice'))]"/>
+            <field name="arch" type="xml">
+                <xpath expr="//div[@name='buttons']" position="inside">
+                   <button class="oe_inline oe_stat_button" name="action_view_pt_supplier_invoice_lines" type="object"
+                       icon="fa-shopping-cart">
+                       <field string="Sup. Inv. Lines" name="sup_inv_lines_count" widget="statinfo"/>
+                   </button>
+                   <button class="oe_inline oe_stat_button" name="action_view_pt_customer_invoice_lines" type="object"
+                       icon="fa-strikethrough">
+                       <field string="Cus. Inv. Lines" name="cus_inv_lines_count" widget="statinfo"/>
+                   </button>
+                </xpath>
+            </field>
+        </record>
+    </data>
+</openerp>