summaryrefslogtreecommitdiff
path: root/archaeological_files/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_files/admin.py')
-rw-r--r--archaeological_files/admin.py101
1 files changed, 100 insertions, 1 deletions
diff --git a/archaeological_files/admin.py b/archaeological_files/admin.py
index edc6be716..df2afd677 100644
--- a/archaeological_files/admin.py
+++ b/archaeological_files/admin.py
@@ -19,7 +19,13 @@
from ajax_select import make_ajax_form
+from django import forms
from django.conf import settings
+from django.conf.urls import url
+from django.core.urlresolvers import reverse
+from django.http import HttpResponseRedirect
+from django.shortcuts import get_object_or_404, render
+from django.utils.translation import ugettext_lazy as _
from ishtar_common.apps import admin_site
from ishtar_common.admin import (
@@ -87,6 +93,7 @@ class JobAdmin(GeneralTypeAdmin):
list_filter = ("available", "price_agreement")
LIST_DISPLAY = [
"label",
+ "price_agreement",
"permanent_contract",
"order",
"ground_daily_cost",
@@ -116,6 +123,7 @@ class EquipmentServiceCostAdmin(ImportActionAdmin):
list_filter = ("available", "price_agreement")
list_display = [
"equipment_service_type",
+ "price_agreement",
"specificity",
"parent",
"unitary_cost",
@@ -130,7 +138,98 @@ class EquipmentServiceCostAdmin(ImportActionAdmin):
admin_site.register(models.EquipmentServiceCost, EquipmentServiceCostAdmin)
-class PriceAgreementAdmin(GeneralTypeAdmin):
+class CopyPriceForm(forms.Form):
+ source = forms.ChoiceField(
+ label=_("Copy from"),
+ choices=[],
+ )
+ destination = forms.ChoiceField(
+ label=_("To"),
+ choices=[],
+ )
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ choices = [
+ (idx, label)
+ for idx, label in models.PriceAgreement.objects.values_list("id", "label")
+ ]
+ self.fields["source"].choices = choices
+ self.fields["destination"].choices = choices
+
+ def clean(self):
+ if self.cleaned_data.get("source", None) \
+ == self.cleaned_data.get("destination", None):
+ raise forms.ValidationError(
+ _("Source and destination must be different.")
+ )
+ return self.cleaned_data
+
+
+class CopyPriceAgreementAdmin(GeneralTypeAdmin):
+ change_list_template = "admin/copy_price_change_list.html"
+
+ def get_urls(self):
+ urls = super(CopyPriceAgreementAdmin, self).get_urls()
+ my_urls = [
+ url(r"^copy-price-agreement/$", self.copy_price_agreement),
+ ]
+ return my_urls + urls
+
+ def copy_price_agreement(self, request):
+ form = None
+
+ if "apply" in request.POST:
+ form = CopyPriceForm(request.POST)
+ if form.is_valid():
+ created, already_here = 0, 0
+ source = get_object_or_404(
+ models.PriceAgreement, pk=form.cleaned_data["source"]
+ )
+ destination = get_object_or_404(
+ models.PriceAgreement, pk=form.cleaned_data["destination"]
+ )
+ for model, slug_name in ((models.Job, "txt_idx"),
+ (models.EquipmentServiceCost, "slug")):
+ items = model.objects.filter(price_agreement_id=source.pk).all()
+ for item in items:
+ slug = getattr(item, slug_name).split("--")[0] + "--" + \
+ str(source.pk)
+ q = model.objects.filter(**{slug_name: slug})
+ if q.count():
+ already_here += 1
+ continue
+ new_item = item
+ new_item.pk = None
+ setattr(new_item, slug_name, slug)
+ new_item.price_agreement_id = destination.pk
+ new_item.save()
+ created += 1
+ if created:
+ self.message_user(
+ request, str(_("{} item(s) created.")).format(created)
+ )
+ if already_here:
+ self.message_user(
+ request, str(_("{} item(s) already in database.")).format(
+ already_here)
+ )
+ c_url = reverse(
+ "admin:{}_{}_changelist".format(
+ self.model._meta.app_label, self.model._meta.model_name
+ )
+ )
+ return HttpResponseRedirect(c_url)
+ if not form:
+ form = CopyPriceForm()
+ return render(
+ request,
+ "admin/copy_price.html",
+ {"file_form": form, "current_action": "import_generic"},
+ )
+
+
+class PriceAgreementAdmin(CopyPriceAgreementAdmin):
list_filter = ("available",)
extra_list_display = [
"start_date",