diff options
Diffstat (limited to 'archaeological_operations/management')
-rw-r--r-- | archaeological_operations/management/commands/clean_acttypes.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/archaeological_operations/management/commands/clean_acttypes.py b/archaeological_operations/management/commands/clean_acttypes.py new file mode 100644 index 000000000..d3e2deb96 --- /dev/null +++ b/archaeological_operations/management/commands/clean_acttypes.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2014 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +# 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/>. + +# See the file COPYING for details. + +import sys + +from django.db import models +from django.core.management.base import BaseCommand, CommandError +from django.core.exceptions import ValidationError + +from archaeological_operations import models + +class Command(BaseCommand): + args = '' + help = 'Clean duplicated act_types' + + def handle(self, *args, **options): + duplicates_lst = [] + known = [] + for act_type in models.ActType.objects.order_by('label').all(): + if act_type.label in known: + if duplicates_lst and \ + duplicates_lst[-1][0].label == act_type.label: + duplicates_lst[-1].append(act_type) + else: + duplicates_lst.append([act_type]) + known.append(act_type.label) + + nb = 0 + for duplicates in duplicates_lst: + ref = duplicates[0] + for duplicate in duplicates[1:]: + nb += 1 + models.AdministrativeAct.objects.filter(act_type=duplicate + ).update(act_type=ref) + duplicate.delete() + print("* %d acttypes merged" % nb) + |