diff --git a/country/admin.py b/country/admin.py
index e8dff7a..0285373 100644
--- a/country/admin.py
+++ b/country/admin.py
@@ -93,8 +93,8 @@ def import_status(self):
return format_html("""Import """)
else:
return format_html(
- f"""Import """
)
diff --git a/country/management/commands/fill_contract_values.py b/country/management/commands/fill_contract_values.py
new file mode 100644
index 0000000..8855f4c
--- /dev/null
+++ b/country/management/commands/fill_contract_values.py
@@ -0,0 +1,12 @@
+from django.core.management.base import BaseCommand
+
+from country.models import Tender
+from country.tasks import fill_contract_values
+
+
+class Command(BaseCommand):
+ def handle(self, *args, **kwargs):
+ tenders = Tender.objects.all()
+ print("Created task: fill_contract_values")
+ for tender in tenders:
+ fill_contract_values.apply_async(args=(tender.id,), queue="covid19")
diff --git a/country/management/commands/fix_contract_fields.py b/country/management/commands/fix_contract_fields.py
deleted file mode 100644
index 3367b4b..0000000
--- a/country/management/commands/fix_contract_fields.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from django.core.management.base import BaseCommand
-
-from country.models import TempDataImportTable, Tender
-
-
-class Command(BaseCommand):
- help = "Fix contract_status and contract_procedure fields"
-
- def handle(self, *args, **kwargs):
- print("Converting")
- tenders = Tender.objects.filter(link_to_contract="not_identified")
-
- for tender in tenders:
- print(tender.contract_id)
- temp_datas = TempDataImportTable.objects.filter(contract_id=tender.contract_id)
- if temp_datas:
- temp_value = temp_datas[0].procurement_process
- contract_status = temp_datas[0].contract_status
- link_to_contract = temp_datas[0].link_to_contract
- if tender.link_to_contract == "not_identified":
- tender.link_to_contract = link_to_contract
- if contract_status == "not_identified":
- contract_status_code = temp_datas[0].contract_status_code
- if contract_status_code in ["Cancelled", "Terminated", "terminated"]:
- tender.status = "cancelled"
- elif contract_status_code in ["Active", "active"]:
- tender.status = "active"
- else:
- tender.status = "not_identified"
- if temp_value in ["Direct", "direct"]:
- temp_value = "direct"
- elif temp_value in ["Limited", "limited"]:
- temp_value = "limited"
- elif temp_value in ["Selective", "selective"]:
- temp_value = "selective"
- elif temp_value in ["Open", "open"]:
- temp_value = "open"
- else:
- temp_value = "not_identified"
- tender.procurement_procedure = temp_value
- tender.save()
- print("Tender value changed for id :" + str(tender.id))
- print("Done")
diff --git a/country/red_flag.py b/country/red_flag.py
index 62d119c..f636308 100644
--- a/country/red_flag.py
+++ b/country/red_flag.py
@@ -35,7 +35,10 @@ def flag8(self, contract_id):
)
contract_value = tender_instance["contract_value"]
tender_value = tender_instance["tender_value"]
- percentage_increase = ((contract_value - tender_value) / tender_value) * 100
+ try:
+ percentage_increase = ((contract_value - tender_value) / tender_value) * 100
+ except Exception:
+ percentage_increase = 0
if (
percentage_increase > 20
): # the difference between the expected purchase price and the final (contract) value exceeds 20 percent;
diff --git a/country/tasks.py b/country/tasks.py
index 263010f..1639558 100644
--- a/country/tasks.py
+++ b/country/tasks.py
@@ -128,6 +128,7 @@ def fix_contract_name_value(tender_id, country):
tender_list = tender_id
for tender in tender_list:
tender_instance = Tender.objects.get(id=tender)
+ tender_instance.red_flag.clear() # Clearing red-flag
goods_services = list(
tender_instance.goods_services.all().values(
"contract_title",
@@ -181,6 +182,10 @@ def fix_contract_name_value(tender_id, country):
print(category)
instance = EquityCategory.objects.get(category_name=category)
tender_instance.equity_category.add(instance)
+ print("Hereeeee")
+ process_redflag7.apply_async(args=(tender_instance.id,), queue="covid19")
+ process_redflag6.apply_async(args=(tender_instance.id,), queue="covid19")
+ process_redflag.apply_async(args=(tender_instance.id,), queue="covid19")
@app.task(name="import_tender_from_batch_id")
@@ -477,35 +482,44 @@ def clear_redflag(id):
@app.task(name="process_red_flag7")
-def process_redflag7(id, tender):
- flag7_obj = RedFlag.objects.get(function_name="flag7")
- concentration = Tender.objects.filter(
- buyer__buyer_name=tender["buyer__buyer_name"], supplier__supplier_name=tender["supplier__supplier_name"]
+def process_redflag7(id):
+ print("redflag77")
+ tenders = Tender.objects.filter(id=id).values(
+ "id", "buyer__buyer_name", "supplier__supplier_name", "supplier__supplier_address"
)
- # supplier who has signed X(10) percent or more of their contracts with the same buyer
- # (wins tenders from the same buyer)
- if len(concentration) > 10:
- for i in concentration:
- obj = Tender.objects.get(id=i.id)
- obj.red_flag.add(flag7_obj)
+ flag7_obj = RedFlag.objects.get(function_name="flag7")
+ for tender in tenders:
+ concentration = Tender.objects.filter(
+ buyer__buyer_name=tender["buyer__buyer_name"], supplier__supplier_name=tender["supplier__supplier_name"]
+ )
+ # supplier who has signed X(10) percent or more of their contracts with the same buyer
+ # (wins tenders from the same buyer)
+ if len(concentration) > 10:
+ for i in concentration:
+ obj = Tender.objects.get(id=i.id)
+ obj.red_flag.add(flag7_obj)
@app.task(name="process_red_flag6")
-def process_redflag6(id, tender):
+def process_redflag6(id):
flag6_obj = RedFlag.objects.get(function_name="flag6")
- a = (
- Tender.objects.values("buyer__buyer_name")
- .filter(
- supplier__supplier_name=tender["supplier__supplier_name"],
- supplier__supplier_address=tender["supplier__supplier_address"],
- )
- .distinct("buyer__buyer_name")
+ tenders = Tender.objects.filter(id=id).values(
+ "id", "buyer__buyer_name", "supplier__supplier_name", "supplier__supplier_address"
)
- if len(a) > 2:
- if a[0]["buyer__buyer_name"] == a[1]["buyer__buyer_name"]:
- for obj in a:
- objs = Tender.objects.get(id=obj.id)
- objs.red_flag.add(flag6_obj)
+ for tender in tenders:
+ a = (
+ Tender.objects.values("buyer__buyer_name")
+ .filter(
+ supplier__supplier_name=tender["supplier__supplier_name"],
+ supplier__supplier_address=tender["supplier__supplier_address"],
+ )
+ .distinct("buyer__buyer_name")
+ )
+ if len(a) > 2:
+ if a[0]["buyer__buyer_name"] == a[1]["buyer__buyer_name"]:
+ for obj in a:
+ objs = Tender.objects.get(id=obj.id)
+ objs.red_flag.add(flag6_obj)
@app.task(name="store_in_temp_table")
@@ -959,3 +973,47 @@ def delete_dataset(data_import_id):
print("Done for temp data " + str(temp_data_id))
import_batch.delete()
return "Done"
+
+
+@app.task(name="fill_contract_values")
+def fill_contract_values(tender_id):
+ tender_instance = Tender.objects.get(id=tender_id)
+ goods_services = list(
+ tender_instance.goods_services.all().values(
+ "contract_title",
+ "contract_value_usd",
+ "award_value_usd",
+ "tender_value_usd",
+ "contract_value_local",
+ "award_value_local",
+ "tender_value_local",
+ )
+ )
+ contract_title = [i.get("contract_title") for i in goods_services if i.get("contract_title") is not None]
+ contract_title.append(tender_instance.contract_title)
+ contract_names = ", ".join(set(contract_title))
+ contract_value_usd = sum(
+ [i.get("contract_value_usd") for i in goods_services if i.get("contract_value_usd") is not None]
+ )
+ award_value_usd = sum([i.get("award_value_usd") for i in goods_services if i.get("award_value_usd") is not None])
+ tender_value_usd = sum(
+ [i.get("tender_value_usd") for i in goods_services if i.get("tender_value_usd") is not None]
+ )
+ contract_value_local = sum(
+ [i.get("contract_value_local") for i in goods_services if i.get("contract_value_local") is not None]
+ )
+ award_value_local = sum(
+ [i.get("award_value_local") for i in goods_services if i.get("award_value_local") is not None]
+ )
+ tender_value_local = sum(
+ [i.get("tender_value_local") for i in goods_services if i.get("tender_value_local") is not None]
+ )
+ tender_instance.contract_title = contract_names
+ tender_instance.contract_value_usd = contract_value_usd
+ tender_instance.contract_value_local = contract_value_local
+ tender_instance.tender_value_local = tender_value_local
+ tender_instance.tender_value_usd = tender_value_usd
+ tender_instance.award_value_local = award_value_local
+ tender_instance.award_value_usd = award_value_usd
+ tender_instance.save()
+ print("Done for tender id : " + str(tender_id))