Пример #1
0
class WellDetailAdminSerializer(AuditModelSerializer):
    casing_set = CasingSerializer(many=True)
    screen_set = ScreenSerializer(many=True)
    linerperforation_set = LinerPerforationSerializer(many=True)
    decommission_description_set = DecommissionDescriptionSerializer(many=True)
    person_responsible = PersonNameSerializer()
    company_of_person_responsible = OrganizationNameListSerializer()
    lithologydescription_set = LithologyDescriptionSerializer(many=True)
    submission_reports = serializers.SerializerMethodField()

    # well vs. well_tag_number ; on submissions, we refer to well
    well = serializers.IntegerField(source='well_tag_number')

    legal_pid = serializers.SerializerMethodField()

    class Meta:
        model = Well
        fields = '__all__'
        extra_fields = ['latitude', 'longitude']

    def get_legal_pid(self, instance):
        if instance.legal_pid is None:
            return instance.legal_pid
        return "{0:0>9}".format(instance.legal_pid)

    # this allows us to call model methods on top of __all__
    def get_field_names(self, declared_fields, info):
        expanded_fields = super(WellDetailAdminSerializer,
                                self).get_field_names(declared_fields, info)

        if getattr(self.Meta, 'extra_fields', None):
            return expanded_fields + self.Meta.extra_fields
        else:
            return expanded_fields

    def get_submission_reports(self, instance):
        records = instance.activitysubmission_set \
            .exclude(well_activity_type='STAFF_EDIT') \
            .order_by('create_date')

        records = sorted(
            records,
            key=lambda record:
            (record.well_activity_type.code != WellActivityCode.types.legacy(
            ).code, record.well_activity_type.code != WellActivityCode.types.
             construction().code, record.create_date),
            reverse=True)

        return SubmissionReportsByWellSerializer(records, many=True).data
Пример #2
0
class WellDetailSerializer(AuditModelSerializer):
    casing_set = CasingSummarySerializer(many=True)
    screen_set = ScreenSerializer(many=True)
    linerperforation_set = LinerPerforationSerializer(many=True)
    decommission_description_set = DecommissionDescriptionSerializer(many=True)
    person_responsible = PersonNameSerializer()
    company_of_person_responsible = OrganizationNameListSerializer()
    lithologydescription_set = LithologyDescriptionSummarySerializer(many=True)
    drilling_methods = DrillingMethodSummarySerializer(many=True)

    # well vs. well_tag_number ; on submissions, we refer to well
    well = serializers.IntegerField(source='well_tag_number')

    # convert codes to their human-readable descriptions
    well_class = serializers.ReadOnlyField(source='well_class.description')
    well_subclass = serializers.ReadOnlyField(
        source='well_subclass.description')
    intended_water_use = serializers.ReadOnlyField(
        source='intended_water_use.description')
    well_status = serializers.ReadOnlyField(source='well_status.description')
    well_publication_status = serializers.ReadOnlyField(
        source='well_publication_status.description')
    licenced_status = serializers.ReadOnlyField(
        source='licenced_status.description')
    coordinate_acquisition_code = serializers.ReadOnlyField(
        source='coordinate_acquisition_code.description')
    intended_water_use = serializers.ReadOnlyField(
        source='intended_water_use.description')
    ground_elevation_method = serializers.ReadOnlyField(
        source='ground_elevation_method.description')
    surface_seal_material = serializers.ReadOnlyField(
        source='surface_seal_material.description')
    surface_seal_method = serializers.ReadOnlyField(
        source='surface_seal_method.description')
    liner_material = serializers.ReadOnlyField(
        source='liner_material.description')
    screen_intake_method = serializers.ReadOnlyField(
        source='screen_intake_method.description')
    screen_type = serializers.ReadOnlyField(source='screen_type.description')
    screen_material = serializers.ReadOnlyField(
        source='screen_material.description')
    screen_opening = serializers.ReadOnlyField(
        source='screen_opening.description')
    screen_bottom = serializers.ReadOnlyField(
        source='screen_bottom.description')
    well_orientation = serializers.ReadOnlyField(
        source='get_well_orientation_display')
    alternative_specs_submitted = serializers.ReadOnlyField(
        source='get_alternative_specs_submitted_display')

    submission_work_dates = serializers.SerializerMethodField()

    legal_pid = serializers.SerializerMethodField()

    def get_legal_pid(self, instance):
        if instance.legal_pid is None:
            return instance.legal_pid
        return "{0:0>9}".format(instance.legal_pid)

    def get_submission_work_dates(self, instance):
        records = instance.activitysubmission_set \
            .exclude(well_activity_type='STAFF_EDIT') \
            .order_by('create_date')

        records = sorted(
            records,
            key=lambda record:
            (record.well_activity_type.code != WellActivityCode.types.legacy(
            ).code, record.well_activity_type.code != WellActivityCode.types.
             construction().code, record.create_date),
            reverse=True)

        return SubmissionWorkDatesByWellSerializer(records, many=True).data

    class Meta:
        model = Well
        fields = (
            "well_guid",
            "well",
            "well_tag_number",
            "identification_plate_number",
            "owner_full_name",
            # "owner_mailing_address", # temporarily disabled - required for staff, hidden for public
            # "owner_city",
            # "owner_province_state",
            # "owner_postal_code",
            "well_class",
            "well_subclass",
            "intended_water_use",
            "well_status",
            "well_publication_status",
            "licenced_status",
            "street_address",
            "city",
            "legal_lot",
            "legal_plan",
            "legal_district_lot",
            "legal_block",
            "legal_section",
            "legal_township",
            "legal_range",
            "land_district",
            "legal_pid",
            "well_location_description",
            "construction_start_date",
            "construction_end_date",
            "alteration_start_date",
            "alteration_end_date",
            "decommission_start_date",
            "decommission_end_date",
            "person_responsible",
            "company_of_person_responsible",
            "driller_name",
            "drilling_company",
            "consultant_name",
            "consultant_company",
            "well_identification_plate_attached",
            "id_plate_attached_by",
            "water_supply_system_name",
            "water_supply_system_well_name",
            "latitude",
            "longitude",
            "coordinate_acquisition_code",
            "ground_elevation",
            "ground_elevation_method",
            "drilling_methods",
            "well_orientation",
            "surface_seal_material",
            "surface_seal_length",
            "surface_seal_thickness",
            "surface_seal_method",
            "surface_seal_depth",
            "backfill_type",
            "backfill_depth",
            "liner_material",
            "liner_diameter",
            "liner_thickness",
            "liner_from",
            "liner_to",
            "screen_intake_method",
            "screen_type",
            "screen_material",
            "other_screen_material",
            "screen_opening",
            "screen_bottom",
            "other_screen_bottom",
            "screen_information",
            "filter_pack_from",
            "filter_pack_to",
            "filter_pack_thickness",
            "filter_pack_material",
            "filter_pack_material_size",
            "development_methods",
            "development_hours",
            "development_notes",
            "water_quality_characteristics",
            "water_quality_colour",
            "water_quality_odour",
            "total_depth_drilled",
            "finished_well_depth",
            "final_casing_stick_up",
            "bedrock_depth",
            "water_supply_system_name",
            "water_supply_system_well_name",
            "static_water_level",
            "well_yield",
            "artesian_flow",
            "artesian_pressure",
            "well_cap_type",
            "well_disinfected_status",
            "comments",
            "alternative_specs_submitted",
            "well_yield_unit",
            "diameter",
            "observation_well_number",
            "observation_well_status",
            "ems",
            "aquifer",
            "utm_zone_code",
            "utm_northing",
            "utm_easting",
            "bcgs_id",
            "decommission_reason",
            "decommission_method",
            "decommission_sealant_material",
            "decommission_backfill_material",
            "decommission_details",
            "aquifer_vulnerability_index",
            "aquifer_lithology",
            "storativity",
            "transmissivity",
            "hydraulic_conductivity",
            "specific_storage",
            "specific_yield",
            "testing_method",
            "testing_duration",
            "analytic_solution_type",
            "boundary_effect",
            "yield_estimation_method",
            "yield_estimation_rate",
            "yield_estimation_duration",
            "well_yield_unit",
            "static_level_before_test",
            "drawdown",
            "hydro_fracturing_performed",
            "hydro_fracturing_yield_increase",
            "recommended_pump_depth",
            "recommended_pump_rate",
            "casing_set",
            "screen_set",
            "linerperforation_set",
            "decommission_description_set",
            "lithologydescription_set",
            "submission_work_dates",
        )