diff --git a/academic_sale_subscription/__manifest__.py b/academic_sale_subscription/__manifest__.py index e36b30e5..38601a35 100644 --- a/academic_sale_subscription/__manifest__.py +++ b/academic_sale_subscription/__manifest__.py @@ -10,6 +10,7 @@ "license": "AGPL-3", "depends": ["academic", "sale_subscription_ux"], "data": [ + "data/ir_actions_server.xml", "security/ir.model.access.csv", "views/sale_order_template_views.xml", "views/sale_subscription_plan_views.xml", diff --git a/academic_sale_subscription/data/ir_actions_server.xml b/academic_sale_subscription/data/ir_actions_server.xml new file mode 100644 index 00000000..63e8d6f3 --- /dev/null +++ b/academic_sale_subscription/data/ir_actions_server.xml @@ -0,0 +1,12 @@ + + + + Duplicated Subscriptions + + ir.actions.server + code + +action = model.action_show_duplicate_subscriptions() + + + diff --git a/academic_sale_subscription/models/sale_order.py b/academic_sale_subscription/models/sale_order.py index 594c9cee..a8aa909e 100644 --- a/academic_sale_subscription/models/sale_order.py +++ b/academic_sale_subscription/models/sale_order.py @@ -74,3 +74,50 @@ def _onchange_next_invoice_date_show_update_end_date(self): def set_deferred_end_date_from_button(self): for record in self: record._set_deferred_end_date_from_template() + + @api.model + def get_duplicate_subscription_ids(self): + # TODO: evaluar sacar feature + grouped_subs = self.read_group( + [("partner_id", "!=", False), ("order_line", "!=", False), ("subscription_state", "=", "3_progress")], + ["partner_id"], + ["partner_id"], + lazy=False, + ) + partner_ids = {group["partner_id"][0] for group in grouped_subs if group["__count"] > 1} + + if not partner_ids: + return [("id", "in", [])] + + subscriptions = self.search( + [ + ("partner_id", "in", list(partner_ids)), + ("order_line", "!=", False), + ("subscription_state", "=", "3_progress"), + ] + ) + + grouped_by_products = {} + duplicate_ids = set() + + for sub in subscriptions: + product_ids = frozenset(sub.order_line.mapped("product_id.id")) + key = (sub.partner_id.id, product_ids) + + if key in grouped_by_products: + duplicate_ids.add(sub.id) + duplicate_ids.update(grouped_by_products[key]) + grouped_by_products.setdefault(key, set()).add(sub.id) + + return [("id", "in", list(duplicate_ids))] + + def action_show_duplicate_subscriptions(self): + # TODO: evaluac sacar feature + return { + "name": "Duplicated Subscriptions", + "type": "ir.actions.act_window", + "res_model": "sale.order", + "view_mode": "list,form", + "domain": self.get_duplicate_subscription_ids(), + "context": "{'search_default_customer': 1}", + } diff --git a/academic_sale_subscription/views/sale_subscription_views.xml b/academic_sale_subscription/views/sale_subscription_views.xml index 033ce2fb..8e275b1f 100644 --- a/academic_sale_subscription/views/sale_subscription_views.xml +++ b/academic_sale_subscription/views/sale_subscription_views.xml @@ -29,4 +29,6 @@ + +