l10n_ar_invoice/report/invoice_analysis.py
# -*- coding: utf-8 -*-
##############################################################################
# For copyright and license notices, see __openerp__.py file in module root
# directory
##############################################################################
from openerp import fields, models, _
from openerp import tools
class account_invoice_line_report(models.Model):
_name = "account.invoice.line.report"
_description = "Invoices Statistics"
_auto = False
price_unit = fields.Float('Unit Price', readonly=True)
price_subtotal = fields.Float(
'Subtotal', readonly=True, group_operator="sum")
quantity = fields.Float('Quantity', readonly=True, group_operator="sum")
discount = fields.Float('Discount (%)', readonly=True)
price_gross_subtotal = fields.Float(
'Gross Subtotal', readonly=True, group_operator="sum")
discount_amount = fields.Float(
'Discount Amount', readonly=True, group_operator="sum")
period_id = fields.Many2one('account.period', 'Period', readonly=True)
fiscalyear_id = fields.Many2one(
'account.fiscalyear', 'Fiscal Year', readonly=True)
date_due = fields.Date('Due Date', readonly=True)
number = fields.Char(string='Number', size=128, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
('proforma', 'Pro-forma'),
('proforma2', 'Pro-forma'),
('open', 'Open'),
('paid', 'Done'),
('cancel', 'Cancelled')
], 'Invoice State', readonly=True)
date_invoice = fields.Date('Date Invoice', readonly=True)
date_invoice_from = fields.Date(
compute=lambda *a, **k: {}, method=True, string=_("Date Invoice from"))
date_invoice_to = fields.Date(
compute=lambda *a, **k: {}, method=True, string=_("Date Invoice to"))
amount_total = fields.Float(
'Invoice Total', readonly=True, group_operator="sum")
ean13 = fields.Char('EAN13', size=13, help='Barcode', readonly=True)
product_id = fields.Many2one('product.product', 'Product', readonly=True)
name_template = fields.Char(
string="Product by text", size=128, readonly=True)
partner_id = fields.Many2one('res.partner', 'Partner', readonly=True)
customer = fields.Boolean(
'Customer',
help="Check this box if this contact is a customer.", readonly=True)
supplier = fields.Boolean(
'Supplier',
help="Check this box if this contact is a supplier."
" If it's not checked,"
"purchase people will not see it when encoding a purchase order.",
readonly=True)
journal_id = fields.Many2one('account.journal', 'Journal', readonly=True)
type = fields.Selection([
('out_invoice', 'Customer Invoice'),
('in_invoice', 'Supplier Invoice'),
('out_refund', 'Customer Refund'),
('in_refund', 'Supplier Refund'),
], 'Type', readonly=True)
user_id = fields.Many2one('res.users', 'Salesman', readonly=True)
state_id = fields.Many2one('res.country.state', 'State', readonly=True)
company_id = fields.Many2one('res.company', 'Company', readonly=True)
product_category_id = fields.Many2one(
'product.category', 'Category', readonly=True)
account_analytic_id = fields.Many2one(
'account.analytic.account',
'Analytic Account',
readonly=True)
_order = 'id'
def init(self, cr):
tools.drop_view_if_exists(cr, 'account_invoice_line_report')
cr.execute("""
CREATE OR REPLACE VIEW account_invoice_line_report AS (
SELECT
"account_invoice_line"."id" AS "id",
"account_invoice_line"."price_unit" AS "price_unit",
"account_invoice_line"."discount" AS "discount",
"account_invoice_line"."account_analytic_id" AS "account_analytic_id",
case when "account_invoice"."type" in ('in_refund','out_refund') then
-("account_invoice_line"."quantity")
else
"account_invoice_line"."quantity"
end as "quantity",
case when "account_invoice"."type" in ('in_refund','out_refund') then
-("account_invoice_line"."price_subtotal")
else
"account_invoice_line"."price_subtotal"
end as "price_subtotal",
-- Campos Calculados
case when "account_invoice"."type" in ('in_refund','out_refund') then
-("price_unit" * "quantity")
else
("price_unit" * "quantity")
end as "price_gross_subtotal",
case when "account_invoice"."type" in ('in_refund','out_refund') then
-("price_unit" * "quantity" * ("discount"/100))
else
("price_unit" * "quantity" * ("discount"/100))
end as "discount_amount",
"account_invoice_line"."partner_id" AS "partner_id",--n
"account_invoice_line"."product_id" AS "product_id", --n
"account_invoice"."date_due" AS "date_due",
COALESCE("account_invoice"."afip_document_number", "account_invoice"."number") AS "number",
"account_invoice"."journal_id" AS "journal_id",--n
"account_invoice"."user_id" AS "user_id",--n
"account_invoice"."company_id" AS "company_id",--n
"account_invoice"."state_id" AS "state_id",--n
"account_invoice"."type" AS "type",
"account_invoice"."state" AS "state",
"account_invoice"."date_invoice" AS "date_invoice",
"account_invoice"."amount_total" AS "amount_total",
"product_product"."ean13" AS "ean13",
"product_product"."name_template" AS "name_template",
"product_template"."categ_id" as "product_category_id", --n
"res_partner"."customer" AS "customer",
"res_partner"."supplier" AS "supplier",
"account_invoice"."period_id" AS "period_id",
"account_period"."fiscalyear_id" AS "fiscalyear_id"
FROM "public"."account_invoice_line" "account_invoice_line"
INNER JOIN "public"."account_invoice" "account_invoice" ON ("account_invoice_line"."invoice_id" = "account_invoice"."id")
LEFT JOIN "public"."product_product" "product_product" ON ("account_invoice_line"."product_id" = "product_product"."id")
INNER JOIN "public"."res_partner" "res_partner" ON ("account_invoice"."partner_id" = "res_partner"."id")
LEFT JOIN "public"."product_template" "product_template" ON ("product_product"."product_tmpl_id" = "product_template"."id")
INNER JOIN "public"."account_period" "account_period" ON ("account_invoice"."period_id" = "account_period"."id")
ORDER BY number ASC
)""")