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

Commit

Permalink
197-change-in-tender-table
Browse files Browse the repository at this point in the history
[x] Added temp_table_id in tender table
[x] Added quantity and unit_price in goodsservices
[x] Added psycopg2==2.8.6 in requirement.txt file
[x] formatting applied
[x] Formatted in black
  • Loading branch information
Suyoj Man Tamrakar authored and KushalRaj committed Mar 31, 2021
1 parent 30fa20e commit 3cd94ec
Show file tree
Hide file tree
Showing 11 changed files with 186 additions and 122 deletions.
11 changes: 5 additions & 6 deletions content/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@
from content.models import DataImport
from country.tasks import store_in_temp_table


@receiver(post_save, sender=DataImport)
def validation_and_temp_table_store(sender, created, instance, *args, **kwargs):
if created:
print("Data validation and temp table storage task started!")
store_in_temp_table.apply_async(args=(instance.id,), queue="covid19")
# @receiver(post_save, sender=DataImport)
# def validation_and_temp_table_store(sender,created ,instance, *args, **kwargs):
# if created:
# print("Data validation and temp table storage task started!")
# store_in_temp_table.apply_async(args=(a.id,), queue='covid19')
20 changes: 14 additions & 6 deletions country/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,19 @@ def import_status(self):
f"""<a class="button" href="/data_import?country={country}&data_import_id={data_import_id}"""
f"""&validated={validated}">Import</a>&nbsp;"""
)

import_status.short_description = "Import Status"
import_status.short_description = 'Import Status'

def validate(self):
data_import_id = str(self.page_ptr_id)
if self.validated:
return format_html(
f'''<a class="button" disabled="True" href="/data_validate?data_import_id={data_import_id}">Validate</a>&nbsp;'''
)
else:
return format_html(
f'''<a class="button" onClick="this.disabled = true;" href="/data_validate?data_import_id={data_import_id}">Validate</a>&nbsp;'''
)
validate.short_description = 'Validate'

def import_actions(self):
data_import_id = str(self.page_ptr_id)
Expand All @@ -99,10 +110,7 @@ def import_actions(self):
<a class="button" href={file_source} download>Download Source File</a>&nbsp;"""
)

import_actions.short_description = "Import Actions"

list_display = ("title", "description", "country", custom_title, import_status, import_actions)

list_display = ('title','description','country',custom_title,import_status, import_actions,validate)

@admin.register(DataProvider)
class DataProviderAdmin(admin.ModelAdmin):
Expand Down
2 changes: 1 addition & 1 deletion country/management/commands/generate_excel_summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ def handle(self, *args, **kwargs):
)
for key, value in data.items():
worksheet.write(row, columns, value)
columns += 1
columns += 1filters

try:
obj, created = OverallSummary.objects.get_or_create(country=country)
Expand Down
19 changes: 19 additions & 0 deletions country/migrations/0028_tender_temp_table_id.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 3.1.2 on 2021-03-25 10:31

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('country', '0027_redflag_implemented'),
]

operations = [
migrations.AddField(
model_name='tender',
name='temp_table_id',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tenders', to='country.tempdataimporttable'),
),
]
23 changes: 23 additions & 0 deletions country/migrations/0029_auto_20210325_1106.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 3.1.2 on 2021-03-25 11:06

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('country', '0028_tender_temp_table_id'),
]

operations = [
migrations.AddField(
model_name='goodsservices',
name='ppu_including_vat',
field=models.CharField(max_length=1500, null=True, verbose_name='Price per units including VAT'),
),
migrations.AddField(
model_name='goodsservices',
name='quantity_units',
field=models.CharField(max_length=1500, null=True, verbose_name='Quantity,units'),
),
]
150 changes: 65 additions & 85 deletions country/models.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from django.contrib.postgres.fields import ArrayField
from django.core.validators import MaxValueValidator, MinValueValidator, RegexValidator
from django.db import models
from django.db.models import Count, F, Q, Sum
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext_lazy as _

from django.db.models import Avg, Count, Min, Sum, Window, Q, F

class Country(models.Model):
CONTINENT_CHOICES = [
Expand Down Expand Up @@ -151,8 +150,8 @@ def get_queryset(self):
super()
.get_queryset()
.annotate(
amount_local=Sum("tenders__goods_services__contract_value_local", distinct=True),
amount_usd=Sum("tenders__goods_services__contract_value_usd", distinct=True),
amount_local=Sum("tenders__goods_services__contract_value_local"),
amount_usd=Sum("tenders__goods_services__contract_value_usd"),
country_name=F("tenders__country__name"),
red_flag_count=Count("tenders__red_flag", distinct=True),
product_category_count=Count("tenders__goods_services__goods_services_category", distinct=True),
Expand All @@ -167,9 +166,9 @@ def get_queryset(self):
return (
super()
.get_queryset()
.annotate(
amount_local=Sum("tenders__goods_services__contract_value_local", distinct=True),
amount_usd=Sum("tenders__goods_services__contract_value_usd", distinct=True),
.annotate(
amount_usd=Sum("tenders__goods_services__contract_value_usd"),
amount_local=Sum("tenders__goods_services__contract_value_local"),
country_name=F("tenders__country__name"),
red_flag_count=Count("tenders__red_flag", distinct=True),
product_category_count=Count("tenders__goods_services__goods_services_category", distinct=True),
Expand All @@ -181,19 +180,6 @@ def get_queryset(self):
)


class TenderManager(models.Manager):
def get_queryset(self):
return (
super()
.get_queryset()
.annotate(
amount_local=Sum("goods_services__contract_value_local"),
amount_usd=Sum("goods_services__contract_value_usd"),
red_flag_count=Count("red_flag"),
tender_count=Count("id", distinct=True),
)
)


class Supplier(models.Model):
supplier_id = models.CharField(verbose_name=_("Supplier ID"), max_length=50, null=True)
Expand Down Expand Up @@ -239,6 +225,45 @@ def __str__(self):
return self.title


class ImportBatch(models.Model):
country = models.ForeignKey(Country, on_delete=models.CASCADE, related_name='import_batch_country',null=True)
import_type=models.CharField(verbose_name= ('Import Type'), max_length=150, null=False)
description=models.CharField(verbose_name= ('Description'), max_length=500, null=False)
data_import_id = models.IntegerField(null=True)
def __str__(self):
return f'Import batch id: {str(self.id)}'

class TempDataImportTable(models.Model):
import_batch = models.ForeignKey(ImportBatch, on_delete=models.CASCADE, related_name='import_batch',null=True)
contract_id = models.CharField(verbose_name= ('Contract Id'), max_length=1500, null=True)
contract_date = models.CharField(verbose_name= ('Contract date'), max_length=1500, null=True)
procurement_procedure = models.CharField(verbose_name= ('Procurement procedure'), max_length=1500, null=True)
procurement_process = models.CharField(verbose_name= ('Procurement process'), max_length=1500, null=True)
goods_services = models.CharField(verbose_name= ('Goods/Services'), max_length=1500, null=True)
cpv_code_clear = models.CharField(verbose_name= ('CPV code clear'), max_length=1500, null=True)
quantity_units = models.CharField(verbose_name= ('Quantity,units'), max_length=1500, null=True)
ppu_including_vat = models.CharField(verbose_name= ('Price per units including VAT'), max_length=1500, null=True)
tender_value = models.CharField(verbose_name= ('Tender value'), max_length=1500, null=True)
award_value = models.CharField(verbose_name= ('Award value'), max_length=1500, null=True)
contract_value = models.CharField(verbose_name= ('Contract value'), max_length=1500, null=True)
contract_title = models.CharField(verbose_name= ('Contract title'), max_length=1500, null=True)
contract_description = models.CharField(verbose_name= ('Award value'), max_length=1500, null=True)
no_of_bidders = models.CharField(verbose_name= ('No of bidders'), max_length=1500, null=True)
buyer = models.CharField(verbose_name= ('Buyer'), max_length=1500, null=True)
buyer_id = models.CharField(verbose_name= ('Buyer ID'), max_length=150, null=True)
buyer_address_as_an_object = models.CharField(verbose_name= ('Buyer Address(as an object)'), max_length=1500, null=True)
supplier = models.CharField(verbose_name= ('Supplier'), max_length=1500, null=True)
supplier_id = models.CharField(verbose_name= ('Supplier ID'), max_length=1500, null=True)
supplier_address = models.CharField(verbose_name= ('Supplier Address'), max_length=1500, null=True)
contract_status = models.CharField(verbose_name= ('Contract Status'), max_length=1500, null=True)
contract_status_code = models.CharField(verbose_name= ('Contract Status Code'), max_length=1500, null=True)
link_to_contract = models.CharField(verbose_name= ('Link to Contract'), max_length=1500, null=True)
link_to_tender = models.CharField(verbose_name= ('Link to Tender'), max_length=1500, null=True)
data_source = models.CharField(verbose_name= ('Data Source'), max_length=1500, null=True)

def __str__(self):
return self.contract_id

class Tender(models.Model):
PROCUREMENT_METHOD_CHOICES = [
("open", "open"),
Expand Down Expand Up @@ -278,6 +303,7 @@ class Tender(models.Model):
equity_categories = ArrayField(models.CharField(max_length=100, null=True, blank=True), default=list, null=True)
equity_category = models.ManyToManyField(EquityCategory)
red_flag = models.ManyToManyField(RedFlag)
temp_table_id = models.ForeignKey(TempDataImportTable, on_delete=models.CASCADE, related_name='tenders', null=True, blank=True)

def __str__(self):
return self.contract_id
Expand All @@ -294,34 +320,29 @@ def __str__(self):


class GoodsServices(models.Model):
country = models.ForeignKey(Country, on_delete=models.CASCADE, related_name="goods_services", null=True)
goods_services_category = models.ForeignKey(
GoodsServicesCategory, on_delete=models.CASCADE, related_name="goods_services", null=True
)
contract = models.ForeignKey(Tender, on_delete=models.CASCADE, related_name="goods_services", null=True)
country = models.ForeignKey(Country, on_delete=models.CASCADE, related_name='goods_services', null=True)
goods_services_category = models.ForeignKey(GoodsServicesCategory, on_delete=models.CASCADE, related_name='goods_services', null=True)
contract = models.ForeignKey(Tender, on_delete=models.CASCADE, related_name='goods_services', null=True)

classification_code = models.CharField(
verbose_name=_("Classification code"), max_length=100, null=True, blank=True
)
no_of_bidders = models.BigIntegerField(verbose_name=_("Number of bidders"), null=True, blank=True)
classification_code = models.CharField(verbose_name=_('Classification code'), max_length=100, null=True, blank=True)
no_of_bidders = models.BigIntegerField(verbose_name=_('Number of bidders'), null=True, blank=True)

contract_title = models.TextField(verbose_name=_("Contract title"), null=True, blank=True)
contract_desc = models.TextField(verbose_name=_("Contract description"), null=True, blank=True)
contract_title = models.TextField(verbose_name=_('Contract title'), null=True, blank=True)
contract_desc = models.TextField(verbose_name=_('Contract description'), null=True, blank=True)

supplier = models.ForeignKey(
Supplier, on_delete=models.CASCADE, related_name="goods_services", null=True, blank=True
)
buyer = models.ForeignKey(Buyer, on_delete=models.CASCADE, related_name="goods_services", null=True, blank=True)

tender_value_local = models.FloatField(verbose_name=_("Tender value local"), null=True, blank=True)
tender_value_usd = models.FloatField(verbose_name=_("Tender value USD"), null=True, blank=True)
award_value_local = models.FloatField(verbose_name=_("Award value local"), null=True, blank=True)
award_value_usd = models.FloatField(verbose_name=_("Award value USD"), null=True, blank=True)
contract_value_local = models.FloatField(
verbose_name=_("Contract value local"), null=True, blank=True, db_index=True
)
contract_value_usd = models.FloatField(verbose_name=_("Contract value USD"), null=True, blank=True, db_index=True)
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE, related_name='goods_services', null=True, blank=True)
buyer = models.ForeignKey(Buyer, on_delete=models.CASCADE, related_name='goods_services', null=True, blank=True)

quantity_units = models.CharField(verbose_name= ('Quantity,units'), max_length=1500, null=True)
ppu_including_vat = models.CharField(verbose_name= ('Price per units including VAT'), max_length=1500, null=True)

tender_value_local = models.FloatField(verbose_name=_('Tender value local'), null=True, blank=True)
tender_value_usd = models.FloatField(verbose_name=_('Tender value USD'),null=True, blank=True)
award_value_local = models.FloatField(verbose_name=_('Award value local'), null=True, blank=True)
award_value_usd = models.FloatField(verbose_name=_('Award value USD'),null=True, blank=True)
contract_value_local = models.FloatField(verbose_name=_('Contract value local'), null=True, blank=True,db_index=True)
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}"

Expand All @@ -341,49 +362,8 @@ class EquityKeywords(models.Model):
keyword = models.CharField(verbose_name=_("Keyword"), max_length=100, null=False)


class ImportBatch(models.Model):
country = models.ForeignKey(Country, on_delete=models.CASCADE, related_name="import_batch_country", null=True)
import_type = models.CharField(verbose_name=("Import Type"), max_length=150, null=False)
description = models.CharField(verbose_name=("Description"), max_length=500, null=False)
data_import_id = models.IntegerField(null=True)

def __str__(self):
return f"Import batch id: {str(self.id)}"


class TempDataImportTable(models.Model):
import_batch = models.ForeignKey(ImportBatch, on_delete=models.CASCADE, related_name="import_batch", null=True)
contract_id = models.CharField(verbose_name=("Contract Id"), max_length=1500, null=True)
contract_date = models.CharField(verbose_name=("Contract date"), max_length=1500, null=True)
procurement_procedure = models.CharField(verbose_name=("Procurement procedure"), max_length=1500, null=True)
procurement_process = models.CharField(verbose_name=("Procurement process"), max_length=1500, null=True)
goods_services = models.CharField(verbose_name=("Goods/Services"), max_length=1500, null=True)
cpv_code_clear = models.CharField(verbose_name=("CPV code clear"), max_length=1500, null=True)
quantity_units = models.CharField(verbose_name=("Quantity,units"), max_length=1500, null=True)
ppu_including_vat = models.CharField(verbose_name=("Price per units including VAT"), max_length=1500, null=True)
tender_value = models.CharField(verbose_name=("Tender value"), max_length=1500, null=True)
award_value = models.CharField(verbose_name=("Award value"), max_length=1500, null=True)
contract_value = models.CharField(verbose_name=("Contract value"), max_length=1500, null=True)
contract_title = models.CharField(verbose_name=("Contract title"), max_length=1500, null=True)
contract_description = models.CharField(verbose_name=("Award value"), max_length=1500, null=True)
no_of_bidders = models.CharField(verbose_name=("No of bidders"), max_length=1500, null=True)
buyer = models.CharField(verbose_name=("Buyer"), max_length=1500, null=True)
buyer_id = models.CharField(verbose_name=("Buyer ID"), max_length=150, null=True)
buyer_address_as_an_object = models.CharField(
verbose_name=("Buyer Address(as an object)"), max_length=1500, null=True
)
supplier = models.CharField(verbose_name=("Supplier"), max_length=1500, null=True)
supplier_id = models.CharField(verbose_name=("Supplier ID"), max_length=1500, null=True)
supplier_address = models.CharField(verbose_name=("Supplier Address"), max_length=1500, null=True)
contract_status = models.CharField(verbose_name=("Contract Status"), max_length=1500, null=True)
contract_status_code = models.CharField(verbose_name=("Contract Status Code"), max_length=1500, null=True)
link_to_contract = models.CharField(verbose_name=("Link to Contract"), max_length=1500, null=True)
link_to_tender = models.CharField(verbose_name=("Link to Tender"), max_length=1500, null=True)
data_source = models.CharField(verbose_name=("Data Source"), max_length=1500, null=True)

def __str__(self):
return self.contract_id


class DataProvider(models.Model):
alphaSpaces = RegexValidator(r"^[a-zA-Z ]+$", "Only letters and spaces are allowed in the Country Name")
Expand Down
8 changes: 7 additions & 1 deletion country/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ class TenderSerializer(serializers.ModelSerializer):
equity_category = serializers.SerializerMethodField()
# red_flag_count = serializers.SerializerMethodField()
red_flag = RedFlagSerializer(many=True, read_only=True)
goods_services = serializers.SerializerMethodField()

class Meta:
model = Tender
Expand Down Expand Up @@ -347,7 +348,8 @@ class Meta:
"award_usd",
"equity_category",
# 'red_flag_count',
"red_flag",
'red_flag',
'goods_services'
)
read_only_fields = (
"contract_value_usd",
Expand Down Expand Up @@ -442,6 +444,10 @@ def get_supplier_code(self, obj):
def get_buyer_code(self, obj):
return obj.buyer.buyer_id

def get_goods_services(self,obj):
a = obj.goods_services.all().values('goods_services_category__category_name','contract_value_usd','quantity_units','ppu_including_vat','contract_value_local','classification_code')
return list(a)


class OverallStatSummarySerializer(serializers.ModelSerializer):
country = CountrySerializer(many=False, read_only=True)
Expand Down
Loading

0 comments on commit 3cd94ec

Please sign in to comment.