diff --git a/product_cores_report/__init__.py b/product_cores_report/__init__.py deleted file mode 100644 index 09434554..00000000 --- a/product_cores_report/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from . import models diff --git a/product_cores_report/__manifest__.py b/product_cores_report/__manifest__.py deleted file mode 100644 index 8f7af281..00000000 --- a/product_cores_report/__manifest__.py +++ /dev/null @@ -1,21 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -{ - 'name': 'Product Core Reporting', - 'version': '15.0.1.0.0', - 'category': 'Account', - 'author': 'Hibou Corp.', - 'license': 'OPL-1', - 'website': 'https://hibou.io/', - 'depends': [ - 'account_reports', - 'product_cores', - ], - 'data': [ - 'views/account_views.xml', - 'views/report_templates.xml', - ], - 'installable': True, - 'auto_install': True, - 'application': False, - } diff --git a/product_cores_report/models/__init__.py b/product_cores_report/models/__init__.py deleted file mode 100644 index c957b3cd..00000000 --- a/product_cores_report/models/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from . import product_core_aged diff --git a/product_cores_report/models/product_core_aged.py b/product_cores_report/models/product_core_aged.py deleted file mode 100644 index 1060b15e..00000000 --- a/product_cores_report/models/product_core_aged.py +++ /dev/null @@ -1,211 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from odoo import models, api, fields, _ -from odoo.tools.misc import format_date - - -class ProductCoreAgedReport(models.AbstractModel): - _name = 'product.core.aged.report' - _description = 'Aged Product Cores' - _inherit = 'account.report' - - filter_date = {'mode': 'single', 'filter': 'today'} - filter_unfold_all = False - filter_partner = True - order_selected_column = {'default': 0} - - def _get_columns_name(self, options): - columns = [ - {}, - {'name': _('Partner'), 'class': '', 'style': 'white-space:nowrap;'}, - {'name': _('Date'), 'class': 'date', 'style': 'white-space:nowrap;'}, - {'name': _('Exp. Date'), 'class': 'date', 'style': 'white-space:nowrap;'}, - {'name': _('Account'), 'class': '', 'style': 'text-align:center; white-space:nowrap;'}, - {'name': _("As of: %s") % format_date(self.env, options['date']['date_to']), 'class': 'number sortable', 'style': 'white-space:nowrap;'}, - {'name': _("Qty."), 'class': 'number sortable', 'style': 'white-space:nowrap;'}, - {'name': _("Expired"), 'class': 'number sortable', 'style': 'white-space:nowrap;'}, - {'name': _("Exp. Qty."), 'class': 'number sortable', 'style': 'white-space:nowrap;'}, - ] - return columns - - def _get_templates(self): - templates = super(ProductCoreAgedReport, self)._get_templates() - templates['main_template'] = 'product_cores_report.template_product_core_aged_report' - templates['line_template'] = 'product_cores_report.template_product_core_aged_line_report' - return templates - - @api.model - def _get_lines(self, options, line_id=None): - # We may need to reverse the sign at some point in the future - sign = 1.0 - ctx = self._context - lines = [] - cr = self.env.cr - user_company = self.env.company - company_ids = self._context.get('company_ids') or [user_company.id] - - # expand line, filter just for this product - product = False - if line_id and 'product_' in line_id: - # we only want to fetch data about this product because we are expanding a line - product_id_str = line_id.split('_')[1] - if product_id_str.isnumeric(): - product = self.env['product.product'].browse(int(product_id_str)) - - date_from = fields.Date.from_string(self._context['date_to']) - - # put in to constants CTE for easier query - arg_list = (date_from, ) - - # product filtering - product_clause = '' - if product: - product_clause = 'AND (pp.id IN %s)' - arg_list += (tuple(product.ids), ) - - # partner filtering - partner_clause = '' - if 'partner_ids' in ctx: - if ctx['partner_ids']: - partner_clause = 'AND (l.partner_id IN %s)' - arg_list += (tuple(ctx['partner_ids'].ids),) - else: - partner_clause = 'AND l.partner_id IS NULL' - if ctx.get('partner_categories'): - partner_clause += 'AND (l.partner_id IN %s)' - partner_ids = self.env['res.partner'].search([('category_id', 'in', ctx['partner_categories'].ids)]).ids - arg_list += (tuple(partner_ids or [0]),) - - query = ''' - WITH - constants (date_from) AS (VALUES (%s)), - product_cores AS ( - SELECT pp.id AS id, pt.product_core_validity AS product_core_validity, pt.name AS product_name - FROM product_template AS pt - INNER JOIN product_product AS pp ON pp.product_tmpl_id = pt.id - WHERE pt.core_ok = true - AND pt.type = 'service' - ''' + product_clause + ''' - ) - SELECT pc.id AS product_id, - MAX(pc.product_name) AS product_name, - MAX(UPPER(pc.product_name)) AS UPNAME, - SUM(CASE - WHEN COALESCE(l.date_maturity, l.date) < (SELECT date_from FROM constants) AND l.debit != 0 THEN ABS(l.quantity) - WHEN COALESCE(l.date_maturity, l.date) < (SELECT date_from FROM constants) THEN -ABS(l.quantity) - ELSE 0.0 END) AS total_expired_qty, - SUM(CASE - WHEN COALESCE(l.date_maturity, l.date) < (SELECT date_from FROM constants) THEN l.debit - ELSE 0.0 END) AS total_expired_debit, - SUM(CASE - WHEN COALESCE(l.date_maturity, l.date) < (SELECT date_from FROM constants) THEN l.credit - ELSE 0.0 END) AS total_expired_credit, - SUM(CASE - WHEN COALESCE(l.date_maturity, l.date) >= (SELECT date_from FROM constants) AND l.debit != 0 THEN ABS(l.quantity) - WHEN COALESCE(l.date_maturity, l.date) >= (SELECT date_from FROM constants) THEN -ABS(l.quantity) - ELSE 0.0 END) AS total_qty, - SUM(CASE - WHEN COALESCE(l.date_maturity, l.date) >= (SELECT date_from FROM constants) THEN l.debit - ELSE 0.0 END) AS total_debit, - SUM(CASE - WHEN COALESCE(l.date_maturity, l.date) >= (SELECT date_from FROM constants) THEN l.credit - ELSE 0.0 END) AS total_credit, - SUM(CASE - WHEN COALESCE(l.date_maturity, l.date) >= (SELECT date_from FROM constants) THEN l.credit - ELSE 0.0 END) AS total_credit, - array_agg(l.id) FILTER (WHERE COALESCE(l.date_maturity, l.date) >= (SELECT date_from FROM constants)) AS aml_ids - FROM account_move_line AS l - INNER JOIN product_cores AS pc ON l.product_id = pc.id - WHERE (l.date <= (SELECT date_from FROM constants)) - ''' + partner_clause + ''' - AND (l.company_id IN %s) - GROUP BY pc.id - ORDER BY UPNAME ASC - ''' - arg_list += (tuple(company_ids), ) - cr.execute(query, arg_list) - - totals = {'total': 0.0, 'total_qty': 0.0, 'total_expired': 0.0, 'total_expired_qty': 0.0} - product_cores = cr.dictfetchall() - for product_core in product_cores: - ref = 'product_%s' % (product_core['product_id'], ) - product_total = product_core['total_debit'] - product_core['total_credit'] - product_total_qty = product_core['total_qty'] - product_expired_total = product_core['total_expired_debit'] - product_core['total_expired_credit'] - product_expired_total_qty = product_core['total_expired_qty'] - totals['total'] += product_total - totals['total_qty'] += product_total_qty - totals['total_expired'] += product_expired_total - totals['total_expired_qty'] += product_expired_total_qty - vals = { - 'id': ref, - 'name': product_core['product_name'], - 'level': 2, - 'columns': [{'name': ''}] * 4 + - [{'name': self.format_value(sign * product_total), 'no_format': sign * product_total}, - {'name': sign * product_total_qty, 'no_format': sign * product_total_qty}, - {'name': self.format_value(sign * product_expired_total), 'no_format': sign * product_expired_total}, - {'name': sign * product_expired_total_qty, 'no_format': sign * product_expired_total_qty}, - ], - 'unfoldable': True, - 'unfolded': ref in options.get('unfolded_lines'), - } - lines.append(vals) - if ref in options.get('unfolded_lines'): - amls = self.env['account.move.line'].browse(product_core['aml_ids']) - for aml in amls: - if aml.move_id.is_purchase_document(): - caret_type = 'account.invoice.in' - elif aml.move_id.is_sale_document(): - caret_type = 'account.invoice.out' - elif aml.payment_id: - caret_type = 'account.payment' - else: - caret_type = 'account.move' - - expires = aml.date_maturity if aml.date_maturity else aml.date - expired = expires < date_from - amount = aml.debit - aml.credit - amount_not_expired = amount if not expired else 0.0 - amount_expired = amount if expired else 0.0 - qty = abs(aml.quantity) if aml.debit else -abs(aml.quantity) - qty_not_expired = qty if not expired else 0.0 - qty_expired = qty if expired else 0.0 - - vals = { - 'id': aml.id, - 'name': aml.move_id.name, - 'class': 'date', - 'caret_options': caret_type, - 'level': 4, - 'parent_id': ref, - 'columns': [{'name': v} for v in [aml.partner_id.display_name or 'Undefined', format_date(self.env, aml.date), format_date(self.env, expires), aml.account_id.display_name]] + - [{'name': self.format_value(sign * amount_not_expired, blank_if_zero=True), 'no_format': sign * amount_not_expired}, - {'name': sign * qty_not_expired or '', 'no_format': sign * qty_not_expired}, - {'name': self.format_value(sign * amount_expired, blank_if_zero=True), 'no_format': sign * amount_expired}, - {'name': sign * qty_expired or '', 'no_format': sign * qty_expired}, - ], - 'action_context': { - 'default_move_type': aml.move_id.move_type, - 'default_journal_id': aml.move_id.journal_id.id, - }, - 'title_hover': self._format_aml_name(aml.name, aml.ref, aml.move_id.name), - } - lines.append(vals) - - if not line_id: - total_line = { - 'id': 0, - 'name': _('Total'), - 'class': 'total', - 'level': 2, - 'columns': [{'name': ''}] * 4 + - [{'name': self.format_value(sign * totals['total']), 'no_format': sign * totals['total']}, - {'name': sign * totals['total_qty'], 'no_format': sign * totals['total_qty']}, - {'name': self.format_value(sign * totals['total_expired']), 'no_format': sign * totals['total_expired']}, - {'name': sign * totals['total_expired_qty'], 'no_format': sign * totals['total_expired_qty']}, - ], - } - lines.append(total_line) - - return lines diff --git a/product_cores_report/views/account_views.xml b/product_cores_report/views/account_views.xml deleted file mode 100644 index 14ea69fc..00000000 --- a/product_cores_report/views/account_views.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - Product Cores - account_report - - - - - - \ No newline at end of file diff --git a/product_cores_report/views/report_templates.xml b/product_cores_report/views/report_templates.xml deleted file mode 100644 index a4253449..00000000 --- a/product_cores_report/views/report_templates.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - -