Skip to content
This repository has been archived by the owner on Dec 13, 2022. It is now read-only.

Commit

Permalink
CPA-292 POST edit tasks
Browse files Browse the repository at this point in the history
- [x] All the post edit task are done when edit in contract
- [x] Created task when tender value are also edited
- [x] USD conversion is done for each tender edited
- [x] contry_aplha_2 used instead of country in management commands
  • Loading branch information
Suyoj Man Tamrakar committed May 5, 2021
1 parent 792efbd commit 220c648
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 27 deletions.
50 changes: 46 additions & 4 deletions country/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from django import forms
from django.contrib import admin
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.forms import TextInput
from django.utils.html import format_html

Expand All @@ -20,6 +22,7 @@
Tender,
Topic,
)
from .tasks import fix_contract_name_value, local_currency_to_usd


class EquityInline(admin.TabularInline):
Expand Down Expand Up @@ -267,13 +270,15 @@ class GoodsAndServicesInline(admin.TabularInline):
model = GoodsServices
extra = 0
fields = (
"id",
"classification_code",
"contract_title",
"contract_desc",
"tender_value_local",
"contract_value_local",
"award_value_local",
"goods_services_category",
"country",
)


Expand All @@ -293,10 +298,10 @@ class Meta:
"buyer",
)

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["buyer"].queryset = Buyer.objects.filter(tenders__country=self.instance.country)
self.fields["supplier"].queryset = Supplier.objects.filter(tenders__country=self.instance.country)
# def __init__(self, *args, **kwargs):
# super().__init__(*args, **kwargs)
# self.fields["buyer"].queryset = Buyer.objects.filter(tenders__country=self.instance.country)
# self.fields["supplier"].queryset = Supplier.objects.filter(tenders__country=self.instance.country)


class TenderAdmin(admin.ModelAdmin):
Expand All @@ -308,10 +313,47 @@ class TenderAdmin(admin.ModelAdmin):
GoodsAndServicesInline,
]

def save_model(self, request, obj, form, change):
obj.from_admin_site = True # here we setting instance attribute which we check in `post_save`
super().save_model(request, obj, form, change)

def save_related(self, request, form, formsets, change):
conversion_date = form["contract_date"].value()
for form_set in formsets:
if form_set.has_changed():
for value in form_set:
contract_value_local = float(value["contract_value_local"].value())
tender_value_local = float(value["tender_value_local"].value())
award_value_local = float(value["award_value_local"].value())
country_id = value["country"].value()
source_currency = Country.objects.get(id=country_id).currency
source_values = {
"tender_value_local": tender_value_local or None,
"award_value_local": award_value_local or None,
"contract_value_local": contract_value_local or None,
}
goods_services_row_id = value["id"].value()
local_currency_to_usd.apply_async(
args=(goods_services_row_id, conversion_date, source_currency, source_values), queue="covid19"
)

super().save_related(request, form, formsets, change)


admin.site.register(Tender, TenderAdmin)


@receiver(post_save, sender=Tender)
def save_model(sender, instance, **kwargs):
if getattr(instance, "from_admin_site", False):
tender_id = instance.id
tender_country = instance.country
# tender_country_alpha_code_2 = instance.country.country_code_alpha_2
fix_contract_name_value(tender_id, tender_country)
# management.call_command("generate_country_contract_excel", tender_country_alpha_code_2)
# management.call_command("generate_excel_summary")


@admin.register(RedFlag)
class RedFlagAdmin(admin.ModelAdmin):
list_display = ("title", "implemented")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class Command(BaseCommand):
help = "Generate Country Contract Excel"

def add_arguments(self, parser):
parser.add_argument("--country", type=str)
parser.add_argument("country", type=str)

def handle(self, *args, **kwargs):
country = kwargs["country"]
Expand Down
2 changes: 1 addition & 1 deletion country/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ class GoodsServices(models.Model):
contract_value_usd = models.FloatField(verbose_name=_("Contract value USD"), null=True, blank=True, db_index=True)

def __str__(self):
return f"{self.goods_services_category} - {self.contract_title}"
return str(self.id)


class CovidMonthlyActiveCases(models.Model):
Expand Down
37 changes: 16 additions & 21 deletions country/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,15 +172,13 @@ def fix_contract_name_value(tender_id, country):
tender_instance.save()
goodservices = tender_instance.goods_services.filter(country=country_obj)
for good_service in goodservices:
print(good_service.id)
for keyword in keywords:
keyword_value = keyword.keyword
if (
keyword_value in good_service.contract_title.strip()
or keyword_value in good_service.contract_desc.strip()
):
category = keyword.equity_category.category_name
print(category)
instance = EquityCategory.objects.get(category_name=category)
tender_instance.equity_category.add(instance)
process_redflag7.apply_async(args=(tender_instance.id,), queue="covid19")
Expand Down Expand Up @@ -351,9 +349,6 @@ def import_tender_from_batch_id(batch_id, country, currency):
ppu_including_vat=ppu_including_vat or None,
)
goods_services_obj.save()

print(tender_obj.id, goods_services_obj.id)

# Execute local currency to USD conversion celery tasks
conversion_date = contract_date
source_currency = country_obj.currency
Expand Down Expand Up @@ -656,8 +651,8 @@ def store_in_temp_table(instance_id):


@app.task(name="country_contract_excel")
def country_contract_excel(country):
if not country:
def country_contract_excel(country_alpha_2):
if not country_alpha_2:
countries = Country.objects.all().exclude(country_code_alpha_2="gl")
for country in countries:
country_name = country.name
Expand Down Expand Up @@ -723,12 +718,12 @@ def country_contract_excel(country):
"goods_services__goods_services_category__category_name",
)
.annotate(
contract_usd=Sum("goods_services__contract_value_usd"),
contract_local=Sum("goods_services__contract_value_local"),
award_local=Sum("goods_services__award_value_local"),
award_usd=Sum("goods_services__award_value_usd"),
tender_local=Sum("goods_services__tender_value_local"),
tender_usd=Sum("goods_services__tender_value_usd"),
contract_usd=Sum("contract_value_usd"),
contract_local=Sum("contract_value_local"),
award_local=Sum("award_value_local"),
award_usd=Sum("award_value_usd"),
tender_local=Sum("tender_value_local"),
tender_usd=Sum("tender_value_usd"),
)
)
if reports:
Expand Down Expand Up @@ -814,7 +809,7 @@ def country_contract_excel(country):
print("............")

else:
country_name = Country.objects.filter(country_code_alpha_2=country).first().name
country_name = Country.objects.filter(country_code_alpha_2=country_alpha_2).first().name
file_path = f"media/export/{country_name}_summary.xlsx"
if not os.path.exists(file_path):
Path(file_path).touch()
Expand Down Expand Up @@ -858,7 +853,7 @@ def country_contract_excel(country):

data = {}
reports = (
Tender.objects.filter(country__country_code_alpha_2=country)
Tender.objects.filter(country__country_code_alpha_2=country_alpha_2)
.values(
"id",
"contract_id",
Expand All @@ -876,12 +871,12 @@ def country_contract_excel(country):
"goods_services__goods_services_category__category_name",
)
.annotate(
contract_usd=Sum("goods_services__contract_value_usd"),
contract_local=Sum("goods_services__contract_value_local"),
award_local=Sum("goods_services__award_value_local"),
award_usd=Sum("goods_services__award_value_usd"),
tender_local=Sum("goods_services__tender_value_local"),
tender_usd=Sum("goods_services__tender_value_usd"),
contract_usd=Sum("contract_value_usd"),
contract_local=Sum("contract_value_local"),
award_local=Sum("award_value_local"),
award_usd=Sum("award_value_usd"),
tender_local=Sum("tender_value_local"),
tender_usd=Sum("tender_value_usd"),
)
)

Expand Down

0 comments on commit 220c648

Please sign in to comment.