diff --git a/backend/apps/pisadmin/miscprocurement/models.py b/backend/apps/pisadmin/miscprocurement/models.py index 8fd763c..9f90360 100644 --- a/backend/apps/pisadmin/miscprocurement/models.py +++ b/backend/apps/pisadmin/miscprocurement/models.py @@ -923,3 +923,57 @@ class RFQOperationLogs(CoreModel): def __str__(self) -> str: return f"{self.inquiry_no}-{self.quotation_no}" + + +class MiscProcMaterialMinPrices(CoreModel): + """杂采材料制程最低价信息表(""" + + ITEM_NUM_CHOICES = ( + ("1", "重量"), + ("2", "单价"), + ) + + part_id = models.CharField(max_length=50, db_column="partid", verbose_name="采购价料号") + material_spec = models.CharField(max_length=20, db_column="material_spec", verbose_name="材料规格") + currency_code = models.CharField(max_length=50, db_column="currency_code", verbose_name="货币代码") + item_num = models.CharField(max_length=20, db_column="item_num", verbose_name="项次名") + lowest_value = models.CharField(max_length=20, db_column="lowest_value", verbose_name="最低值") + source_number = models.CharField(max_length=50, db_column="source_number", verbose_name="报价来源单号") + quotation_time = models.DateTimeField(db_column="quotation_time", verbose_name="报价时间") + + class Meta: + db_table = table_prefix + "misc_proc_material_min_prices" + verbose_name = "杂采材料制程最低价信息表" + verbose_name_plural = verbose_name + ordering = ("-create_datetime", "id") + indexes = [ + models.Index(fields=["part_id", "material_spec", "currency_code", "item_num"]), + ] + + def __str__(self) -> str: + return f"{self.part_id}-{self.material_spec}-{self.currency_code}-{self.item_num}" + + +class MiscProcProcessingMinPrices(CoreModel): + """杂采加工费用最低价信息表 + + 按采购件料号、货币代码存储各报价单加工费合计的最低值。 + """ + + part_id = models.CharField(max_length=50, db_column="partid", verbose_name="采购件料号") + currency_code = models.CharField(max_length=50, db_column="currencycode", verbose_name="货币代码") + lowest_value = models.CharField(max_length=20, db_column="lowest_vaule", verbose_name="加工费用最低价") + source_number = models.CharField(max_length=50, null=True, blank=True, db_column="sourcenumber", verbose_name="报价来源单号") + quotation_time = models.DateTimeField(null=True, blank=True, db_column="quotationtime", verbose_name="报价时间") + + class Meta: + db_table = table_prefix + "misc_proc_processing_min_prices" + verbose_name = "杂采加工费用最低价信息表" + verbose_name_plural = verbose_name + ordering = ("-create_datetime", "id") + indexes = [ + models.Index(fields=["part_id", "currency_code"]), + ] + + def __str__(self) -> str: + return f"{self.part_id}-{self.currency_code}-{self.lowest_value}" \ No newline at end of file diff --git a/backend/apps/pisadmin/miscprocurement/serializers.py b/backend/apps/pisadmin/miscprocurement/serializers.py index 3cd62af..b055f1a 100644 --- a/backend/apps/pisadmin/miscprocurement/serializers.py +++ b/backend/apps/pisadmin/miscprocurement/serializers.py @@ -23,6 +23,8 @@ from .models import ( InquiryRfqItem, CostEstimateTemplateHead, CostEstimateTemplateBody, + MiscProcMaterialMinPrices, + MiscProcProcessingMinPrices, ) from apps.pisadmin.basicinfo.models import Company from apps.pisadmin.basicinfo.models import Unit @@ -1600,3 +1602,35 @@ class InquirySerializer(CustomModelSerializer): self._upsert_rfq_items(inquiry, rfq_items) return inquiry + + +class MiscProcMaterialMinPricesSerializer(CustomModelSerializer): + """杂采材料制程最低价信息表序列化器""" + + class Meta: + model = MiscProcMaterialMinPrices + fields = "__all__" + read_only_fields = [ + "id", + "create_datetime", + "update_datetime", + "creator", + "modifier", + "dept_belong_id", + ] + + +class MiscProcProcessingMinPricesSerializer(CustomModelSerializer): + """杂采加工费用最低价信息表序列化器""" + + class Meta: + model = MiscProcProcessingMinPrices + fields = "__all__" + read_only_fields = [ + "id", + "create_datetime", + "update_datetime", + "creator", + "modifier", + "dept_belong_id", + ] diff --git a/backend/apps/pisadmin/miscprocurement/views.py b/backend/apps/pisadmin/miscprocurement/views.py index 5ff8af7..8576234 100644 --- a/backend/apps/pisadmin/miscprocurement/views.py +++ b/backend/apps/pisadmin/miscprocurement/views.py @@ -114,6 +114,8 @@ from .models import ( InquiryRfqItem, CostEstimateTemplateHead, CostEstimateTemplateBody, + MiscProcMaterialMinPrices, + MiscProcProcessingMinPrices, ) from .serializers import ( MiscMaterialSerializer, @@ -138,6 +140,8 @@ from .serializers import ( CostEstimateTemplateHeadSerializer, CostEstimateTemplateNewVersionSerializer, create_cost_template_new_version, + MiscProcMaterialMinPricesSerializer, + MiscProcProcessingMinPricesSerializer, ) @@ -1666,4 +1670,57 @@ class RFQOperationLogsViewSet(CustomModelViewSet): if buyer: nos = Inquiry.objects.filter(buyer__icontains=buyer).values_list("inquiry_no", flat=True) queryset = queryset.filter(inquiry_no__in=list(nos)) - return queryset \ No newline at end of file + return queryset + + +class MiscProcMaterialMinPricesViewSet(CustomModelViewSet): + """杂采材料制程最低价信息表视图集 + + 按采购件料号、材料规格、货币代码、项次存储最低重量(1)和最低单价(2)信息。 + """ + + queryset = MiscProcMaterialMinPrices.objects.all() + serializer_class = MiscProcMaterialMinPricesSerializer + filter_fields = ( + "part_id", + "material_spec", + "currency_code", + "item_num", + ) + search_fields = ( + "part_id", + "material_spec", + "source_number", + ) + ordering = ("-create_datetime", "id") + + def perform_create(self, serializer): + serializer.save() + + def perform_update(self, serializer): + serializer.save() + + +class MiscProcProcessingMinPricesViewSet(CustomModelViewSet): + """杂采加工费用最低价信息表视图集 + + 按采购件料号、货币代码存储各报价单加工费合计的最低值。 + """ + + queryset = MiscProcProcessingMinPrices.objects.all() + serializer_class = MiscProcProcessingMinPricesSerializer + filter_fields = ( + "part_id", + "currency_code", + ) + search_fields = ( + "part_id", + "source_number", + ) + ordering = ("-create_datetime", "id") + + def perform_create(self, serializer): + serializer.save() + + def perform_update(self, serializer): + serializer.save() \ No newline at end of file