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 @@
+
+