openerp-community-reviewer team mailing list archive
-
openerp-community-reviewer team
-
Mailing list archive
-
Message #07922
[Merge] lp:~scigghia/account-invoicing/7-adding-free-invoice-line into lp:account-invoicing
Andrea Cometa has proposed merging lp:~scigghia/account-invoicing/7-adding-free-invoice-line into lp:account-invoicing.
Requested reviews:
Account Core Editors (account-core-editors)
For more details, see:
https://code.launchpad.net/~scigghia/account-invoicing/7-adding-free-invoice-line/+merge/233317
Adding module that manage free invoice lines
--
https://code.launchpad.net/~scigghia/account-invoicing/7-adding-free-invoice-line/+merge/233317
Your team Account Core Editors is requested to review the proposed merge of lp:~scigghia/account-invoicing/7-adding-free-invoice-line into lp:account-invoicing.
=== added directory 'free_invoice_line'
=== added file 'free_invoice_line/__init__.py'
--- free_invoice_line/__init__.py 1970-01-01 00:00:00 +0000
+++ free_invoice_line/__init__.py 2014-09-04 08:53:08 +0000
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (c) 2012 Andrea Cometa All Rights Reserved.
+# www.andreacometa.it
+# openerp@xxxxxxxxxxxxxxx
+#
+# 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/>.
+#
+##############################################################################
+
+from . import account
=== added file 'free_invoice_line/__openerp__.py'
--- free_invoice_line/__openerp__.py 1970-01-01 00:00:00 +0000
+++ free_invoice_line/__openerp__.py 2014-09-04 08:53:08 +0000
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (c) 2014 Andrea Cometa All Rights Reserved.
+# www.andreacometa.it
+# openerp@xxxxxxxxxxxxxxx
+#
+# 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": "Free Invoice Lines",
+ "description": """This module adds 'for free' field to the invoice lines""",
+ "version": "0.1",
+ "depends": ['account'],
+ "category": "Accounting & Finance",
+ "author": "Andrea Cometa",
+ "url": "http://www.andreacometa.it",
+ "data": [
+ 'account/account_view.xml',
+ ],
+ "installable": True,
+ "auto_install": False,
+ "certificate": "",
+ 'images': [],
+}
=== added directory 'free_invoice_line/account'
=== added file 'free_invoice_line/account/__init__.py'
--- free_invoice_line/account/__init__.py 1970-01-01 00:00:00 +0000
+++ free_invoice_line/account/__init__.py 2014-09-04 08:53:08 +0000
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (c) 2012 Andrea Cometa All Rights Reserved.
+# www.andreacometa.it
+# openerp@xxxxxxxxxxxxxxx
+#
+# 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/>.
+#
+##############################################################################
+
+from . import account
=== added file 'free_invoice_line/account/account.py'
--- free_invoice_line/account/account.py 1970-01-01 00:00:00 +0000
+++ free_invoice_line/account/account.py 2014-09-04 08:53:08 +0000
@@ -0,0 +1,211 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (c) 2012 Andrea Cometa All Rights Reserved.
+# www.andreacometa.it
+# openerp@xxxxxxxxxxxxxxx
+#
+# 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/>.
+#
+##############################################################################
+
+from openerp.osv import fields, orm
+import decimal_precision as dp
+from tools.translate import _
+
+
+class account_invoice_line(orm.Model):
+ _inherit = "account.invoice.line"
+
+ _columns = {
+ 'free': fields.boolean('For Free'),
+ }
+
+
+class account_invoice(orm.Model):
+ _inherit = 'account.invoice'
+
+ def _amount_all(self, cr, uid, ids, name, args, context=None):
+ res = {}
+ for invoice in self.browse(cr, uid, ids, context=context):
+ res[invoice.id] = {
+ 'amount_untaxed': 0.0,
+ 'amount_tax': 0.0,
+ 'amount_untaxed_free': 0.0,
+ 'amount_tax_free': 0.0,
+ 'amount_total': 0.0
+ }
+ lines = {}
+ for line in invoice.invoice_line:
+ res[invoice.id]['amount_untaxed'] += line.price_subtotal
+ if line.free:
+ res[invoice.id]['amount_untaxed_free'] += (
+ line.price_subtotal)
+ # costruiamo un dizionario chiave=iva e valore=imponibile
+ for tax in line.invoice_line_tax_id:
+ if tax.amount in lines:
+ lines[tax.amount] += line.price_subtotal
+ else:
+ lines[tax.amount] = line.price_subtotal
+ for tl in lines:
+ res[invoice.id]['amount_tax_free'] += lines[tl] * (1 + tl)
+ for line in invoice.tax_line:
+ res[invoice.id]['amount_tax'] += line.amount
+ res[invoice.id]['amount_total'] = (
+ res[invoice.id]['amount_tax'] +
+ res[invoice.id]['amount_untaxed'])
+ return res
+
+ def _get_invoice_line(self, cr, uid, ids, context=None):
+ result = {}
+ for line in self.pool['account.invoice.line'].browse(cr, uid, ids,
+ context=context):
+ result[line.invoice_id.id] = True
+ return result.keys()
+
+ def _get_invoice_tax(self, cr, uid, ids, context=None):
+ result = {}
+ for tax in self.pool['account.invoice.tax'].browse(cr, uid, ids,
+ context=context):
+ result[tax.invoice_id.id] = True
+ return result.keys()
+
+ _columns = {
+ 'amount_untaxed_free': fields.function(
+ _amount_all, digits_compute=dp.get_precision('Account'),
+ string='"For Free" Amount',
+ store={
+ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids,
+ ['invoice_line'], 20),
+ 'account.invoice.tax': (_get_invoice_tax, None, 20),
+ 'account.invoice.line': (_get_invoice_line, [
+ 'price_unit', 'invoice_line_tax_id', 'quantity',
+ 'discount', 'invoice_id'], 20),
+ },
+ multi='all'),
+ 'amount_tax_free': fields.function(
+ _amount_all, digits_compute=dp.get_precision('Account'),
+ string='"For Free" Tax',
+ store={
+ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids,
+ ['invoice_line'], 20),
+ 'account.invoice.tax': (_get_invoice_tax, None, 20),
+ 'account.invoice.line': (_get_invoice_line, [
+ 'price_unit', 'invoice_line_tax_id', 'quantity',
+ 'discount', 'invoice_id'], 20),
+ },
+ multi='all'),
+ 'amount_untaxed': fields.function(
+ _amount_all, digits_compute=dp.get_precision('Account'),
+ string='Untaxed',
+ store={
+ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids,
+ ['invoice_line'], 20),
+ 'account.invoice.tax': (_get_invoice_tax, None, 20),
+ 'account.invoice.line': (_get_invoice_line, [
+ 'price_unit', 'invoice_line_tax_id', 'quantity',
+ 'discount', 'invoice_id'], 20),
+ },
+ multi='all'),
+ 'amount_tax': fields.function(
+ _amount_all, digits_compute=dp.get_precision('Account'),
+ string='Tax',
+ store={
+ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids,
+ ['invoice_line'], 20),
+ 'account.invoice.tax': (_get_invoice_tax, None, 20),
+ 'account.invoice.line': (_get_invoice_line, [
+ 'price_unit', 'invoice_line_tax_id', 'quantity',
+ 'discount', 'invoice_id'], 20),
+ },
+ multi='all'),
+ 'amount_total': fields.function(
+ _amount_all, digits_compute=dp.get_precision('Account'),
+ string='Total',
+ store={
+ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids,
+ ['invoice_line'], 20),
+ 'account.invoice.tax': (_get_invoice_tax, None, 20),
+ 'account.invoice.line': (_get_invoice_line, [
+ 'price_unit', 'invoice_line_tax_id', 'quantity',
+ 'discount', 'invoice_id'], 20),
+ },
+ multi='all'),
+ }
+
+ def finalize_invoice_move_lines(self, cr, uid, invoice_browse, move_lines):
+ if invoice_browse.amount_untaxed_free > 0.0:
+ precision = self.pool['decimal.precision'].precision_get(cr, 1,
+ 'Account')
+ precision_diff = round(
+ invoice_browse.amount_tax_free -
+ invoice_browse.amount_untaxed_free, precision)
+ account_id = self.pool['account.invoice.line']._default_account_id(
+ cr, uid, {'type': 'out_invoice'})
+ if (invoice_browse.amount_untaxed_free ==
+ invoice_browse.amount_untaxed):
+ # se imponibile = imponibile omaggio
+ move_lines[-1][2]['account_id'] = account_id
+ move_lines[-1][2]['date_maturity'] = False
+ move_lines[-1][2]['debit'] -= invoice_browse.amount_tax_free
+
+ # riga imponibile omaggio
+ new_line = {
+ 'analytic_account_id': False,
+ 'tax_code_id': False,
+ 'analytic_lines': [],
+ 'tax_amount': False,
+ 'name': _('"For Free" Amount'),
+ 'ref': '',
+ 'analytics_id': False,
+ 'currency_id': False,
+ 'debit': invoice_browse.amount_untaxed_free,
+ 'product_id': False,
+ 'date_maturity': False,
+ 'credit': False,
+ 'date': move_lines[0][2]['date'],
+ 'amount_currency': 0,
+ 'product_uom_id': False,
+ 'quantity': 1,
+ 'partner_id': move_lines[0][2]['partner_id'],
+ 'account_id': account_id,
+ }
+ move_lines += [(0, 0, new_line)]
+ # riga iva omaggio
+ new_line = {
+ 'analytic_account_id': False,
+ 'tax_code_id': False,
+ 'analytic_lines': [],
+ 'tax_amount': False,
+ 'name': _('"For Free" Tax Amount'),
+ 'ref': '',
+ 'analytics_id': False,
+ 'currency_id': False,
+ 'debit': precision_diff,
+ 'product_id': False,
+ 'date_maturity': False,
+ 'credit': False,
+ 'date': move_lines[0][2]['date'],
+ 'amount_currency': 0,
+ 'product_uom_id': False,
+ 'quantity': 1,
+ 'partner_id': move_lines[0][2]['partner_id'],
+ 'account_id': account_id,
+ }
+ move_lines += [(0, 0, new_line)]
+ return move_lines
+
+account_invoice()
=== added file 'free_invoice_line/account/account_view.xml'
--- free_invoice_line/account/account_view.xml 1970-01-01 00:00:00 +0000
+++ free_invoice_line/account/account_view.xml 2014-09-04 08:53:08 +0000
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <record id="free_invoice_line_form" model="ir.ui.view">
+ <field name="name">account.invoice.form</field>
+ <field name="model">account.invoice</field>
+ <field name="inherit_id" ref="account.invoice_form"/>
+ <field name="arch" type="xml">
+ <field name="discount" position="after">
+ <field name="free" />
+ </field>
+ </field>
+ </record>
+
+ </data>
+</openerp>
=== added directory 'free_invoice_line/i18n'
=== added file 'free_invoice_line/i18n/free_invoice_line.pot'
--- free_invoice_line/i18n/free_invoice_line.pot 1970-01-01 00:00:00 +0000
+++ free_invoice_line/i18n/free_invoice_line.pot 2014-09-04 08:53:08 +0000
@@ -0,0 +1,54 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * free_invoice_line
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-09-04 08:44+0000\n"
+"PO-Revision-Date: 2014-09-04 08:44+0000\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: free_invoice_line
+#: field:account.invoice,amount_untaxed_free:0
+#: code:addons/free_invoice_line/account/account.py:171
+#, python-format
+msgid "\"For Free\" Amount"
+msgstr ""
+
+#. module: free_invoice_line
+#: field:account.invoice,amount_tax_free:0
+msgid "\"For Free\" Tax"
+msgstr ""
+
+#. module: free_invoice_line
+#: code:addons/free_invoice_line/account/account.py:193
+#, python-format
+msgid "\"For Free\" Tax Amount"
+msgstr ""
+
+#. module: free_invoice_line
+#: field:account.invoice.line,free:0
+msgid "For Free"
+msgstr ""
+
+#. module: free_invoice_line
+#: code:_description:0
+#: model:ir.model,name:free_invoice_line.model_account_invoice
+#, python-format
+msgid "Invoice"
+msgstr ""
+
+#. module: free_invoice_line
+#: code:_description:0
+#: model:ir.model,name:free_invoice_line.model_account_invoice_line
+#, python-format
+msgid "Invoice Line"
+msgstr ""
+
=== added file 'free_invoice_line/i18n/it.po'
--- free_invoice_line/i18n/it.po 1970-01-01 00:00:00 +0000
+++ free_invoice_line/i18n/it.po 2014-09-04 08:53:08 +0000
@@ -0,0 +1,54 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * free_invoice_line
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-09-04 08:44+0000\n"
+"PO-Revision-Date: 2014-09-04 08:44+0000\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: free_invoice_line
+#: field:account.invoice,amount_untaxed_free:0
+#: code:addons/free_invoice_line/account/account.py:171
+#, python-format
+msgid "\"For Free\" Amount"
+msgstr "Imponibile Omaggio"
+
+#. module: free_invoice_line
+#: field:account.invoice,amount_tax_free:0
+msgid "\"For Free\" Tax"
+msgstr "Imposte Omaggio"
+
+#. module: free_invoice_line
+#: code:addons/free_invoice_line/account/account.py:193
+#, python-format
+msgid "\"For Free\" Tax Amount"
+msgstr "Importo imposte omaggio"
+
+#. module: free_invoice_line
+#: field:account.invoice.line,free:0
+msgid "For Free"
+msgstr "Omaggio"
+
+#. module: free_invoice_line
+#: code:_description:0
+#: model:ir.model,name:free_invoice_line.model_account_invoice
+#, python-format
+msgid "Invoice"
+msgstr "Fattura"
+
+#. module: free_invoice_line
+#: code:_description:0
+#: model:ir.model,name:free_invoice_line.model_account_invoice_line
+#, python-format
+msgid "Invoice Line"
+msgstr "Righe Fattura"
+
Follow ups