def setUp(self):
        super().setUp()
        # create another activitygroup
        ag = ActivityGroupFactory(keyflow=self.keyflow, name='A', code='A')
        af = ActivityFactory(activitygroup=ag, name='B', nace='123')

        ac_1 = ActorFactory(activity=af, BvDid='WK036306')
        ac_2 = ActorFactory(activity=af, BvDid='WK036307')
        ActorFactory(activity=af, BvDid='WK036308')
        ActorFactory(activity=af, BvDid='WK036309')
        ac_3 = ActorFactory(activity=af, BvDid='NL59307803')

        self.composition = CompositionFactory(name='RES @Urbanisation lvl 1')
        mat1 = MaterialFactory()
        mat2 = MaterialFactory()
        ProductFractionFactory(composition=self.composition,
                               material=mat1,
                               publication=None)
        ProductFractionFactory(composition=self.composition,
                               material=mat2,
                               publication=None)

        a = PublicationFactory(citekey='cbs2018', title='sth')
        PublicationInCasestudyFactory(casestudy=self.casestudy, publication=a)

        Actor2ActorFactory(origin=ac_1, destination=ac_2, keyflow=self.keyflow)
        Actor2ActorFactory(origin=ac_1, destination=ac_3, keyflow=self.keyflow)
 def setUp(self):
     super().setUp()
     kic_obj = KeyflowInCasestudyFactory(id=self.keyflowincasestudy,
                                         casestudy=self.uic.casestudy,
                                         keyflow__id=self.keyflow)
     self.mat_obj_1 = MaterialFactory(id=self.material_1, keyflow=kic_obj)
     self.mat_obj_2 = MaterialFactory(id=self.material_2, keyflow=kic_obj)
     self.obj = GroupStockFactory(
         id=self.groupstock,
         origin__id=self.origin,
         origin__keyflow=kic_obj,
         keyflow=kic_obj,
     )
    def setUp(self):
        super().setUp()
        # create another keyflow
        keyflow2 = KeyflowInCasestudyFactory(keyflow__name='concurring')
        # create mats with same names, should not be picked while bulk creating
        MaterialFactory(name='a', keyflow=keyflow2)
        MaterialFactory(name='b', keyflow=keyflow2)

        MaterialFactory(name='Mat 1', keyflow=self.keyflow)
        # this one is a 'default' material without keyflow and duplicate
        # to one in the file, the keyflow related one should be preferred
        MaterialFactory(name='a', keyflow=self.keyflow)
        MaterialFactory(name='b')

        a = PublicationFactory(citekey='crem2017', title='sth')
        PublicationInCasestudyFactory(casestudy=self.casestudy, publication=a)
 def setUp(self):
     super().setUp()
     self.kic_obj = KeyflowInCasestudyFactory(id=self.keyflowincasestudy,
                                              casestudy=self.uic.casestudy,
                                              keyflow__id=self.keyflow)
     self.mat_obj_1 = MaterialFactory(id=self.material_1,
                                      keyflow=self.kic_obj)
     self.mat_obj_2 = MaterialFactory(id=self.material_2,
                                      keyflow=self.kic_obj)
     self.comp1 = CompositionFactory(name='composition1', nace='nace1')
     self.comp2 = CompositionFactory(name='composition2', nace='nace2')
     self.activitygroup1 = ActivityGroupFactory(keyflow=self.kic_obj)
     self.activity1 = ActivityFactory(activitygroup=self.activitygroup1)
     self.actor1 = ActorFactory(id=self.actor1id, activity=self.activity1)
     self.activitygroup2 = ActivityGroupFactory(keyflow=self.kic_obj)
     self.activity2 = ActivityFactory(activitygroup=self.activitygroup2)
     self.actor2 = ActorFactory(id=self.actor2id, activity=self.activity2)
     self.actor3 = ActorFactory(activity=self.activity2)
     self.act2act1 = Actor2ActorFactory(
         id=self.actor2actor1,
         origin=self.actor1,
         destination=self.actor2,
         keyflow=self.kic_obj,
         composition=self.comp1,
     )
     self.act2act2 = Actor2ActorFactory(
         id=self.actor2actor2,
         origin=self.actor2,
         destination=self.actor3,
         keyflow=self.kic_obj,
         composition=self.comp2,
     )
     self.actorstock1 = ActorStockFactory(id=self.actorstock,
                                          keyflow=self.kic_obj,
                                          origin=self.actor1)
     self.actorstock2 = ActorStockFactory(id=self.actorstock2,
                                          keyflow=self.kic_obj,
                                          origin=self.actor2)
     self.obj = self.actorstock1
Example #5
0
    def create_materials(self):
        """Create the materials, compositions and fractions"""
        Mat = namedtuple('Mat', ['name', 'is_waste'])
        Mat.__new__.__defaults__ = (None, False)
        self.materials = {}
        self.compositions = {}
        self.fractions = {}
        material_names = [
            Mat('Plastic', is_waste=True),
            Mat('Crude Oil'),
            Mat('Petrol'),
            Mat('Milk'),
            Mat('Packaged Milk'),
            Mat('Packaged Cucumber'),
            Mat('Cucumber'),
            Mat('Human Waste', is_waste=True),
            Mat('Other Waste', is_waste=True)
        ]

        Frac = namedtuple('Fraction', ['composition', 'material', 'fraction'])
        Frac.__new__.__defaults__ = (None, None, 0.0)
        fractions = [
            Frac('Packaged Milk', 'Milk', 0.25),
            Frac('Packaged Milk', 'Plastic', 0.75),
            Frac('Packaged Cucumber', 'Plastic', 0.15),
            Frac('Packaged Cucumber', 'Cucumber', 0.85)
        ]

        for mat in material_names:
            material = MaterialFactory(name=mat.name, keyflow=self.kic)
            self.materials[mat.name] = material
            Factory = WasteFactory if mat.is_waste else ProductFactory
            composition = Factory(name=mat.name)
            self.compositions[mat.name] = composition

        for frac in fractions:
            fraction = ProductFractionFactory(
                fraction=frac.fraction,
                material=self.materials[frac.material],
                composition=self.compositions[frac.composition],
                publication=self.pub,
            )
            self.fractions[frac.material] = fraction
Example #6
0
    def setUpClass(cls):
        super().setUpClass()
        cls.keyflow = KeyflowInCasestudyFactory(id=2)
        cls.pub = PublicationInCasestudyFactory(
            casestudy=cls.keyflow.casestudy)

        ## Materials ##

        bread = MaterialFactory(name='bread', keyflow=cls.keyflow)
        beer = MaterialFactory(name='beer', keyflow=cls.keyflow)
        barley = MaterialFactory(name='barley', keyflow=cls.keyflow)
        sludge = MaterialFactory(name='sludge', keyflow=cls.keyflow)
        other_waste = MaterialFactory(name='other waste', keyflow=cls.keyflow)

        ## Processes ##
        dummy_process = ProcessFactory(name='process')

        ## Activities and Activity groups ##

        group_A = ActivityGroupFactory(name='A', code='A', keyflow=cls.keyflow)
        group_C = ActivityGroupFactory(name='C', code='C', keyflow=cls.keyflow)

        brewing_activity = ActivityFactory(name='Brewery',
                                           nace='A-0000',
                                           activitygroup=group_A)
        household_activity = ActivityFactory(name='Household',
                                             nace='A-0001',
                                             activitygroup=group_A)
        digester_activity = ActivityFactory(name='Digester',
                                            nace='A-0002',
                                            activitygroup=group_A)
        supermarket_activity = ActivityFactory(name='Supermarket',
                                               nace='A-0003',
                                               activitygroup=group_A)
        farming_activity = ActivityFactory(name='Farming',
                                           nace='C-0000',
                                           activitygroup=group_C)
        inciterator_activity = ActivityFactory(name='Incineration',
                                               nace='C-0001',
                                               activitygroup=group_C)

        ## Actors ##

        # random households
        for i in range(100):
            ActorFactory(name='household{}'.format(i),
                         activity=household_activity)
        # random supermarkets
        for i in range(10):
            ActorFactory(name='supermarket{}'.format(i),
                         activity=supermarket_activity)
        # random farms
        for i in range(2):
            ActorFactory(name='farm{}'.format(i), activity=farming_activity)

        cls.brewery_1 = ActorFactory(name='brewery_1',
                                     activity=brewing_activity)
        cls.brewery_2 = ActorFactory(name='brewery_2',
                                     activity=brewing_activity)
        digester = ActorFactory(name='digester Amsterdam',
                                activity=digester_activity)
        incinerator = ActorFactory(name='incinerator Amsterdam',
                                   activity=inciterator_activity)

        ## status quo flows ##
        households = Actor.objects.filter(activity=household_activity)
        farms = Actor.objects.filter(activity=farming_activity)
        breweries = Actor.objects.filter(activity=brewing_activity)
        supermarkets = Actor.objects.filter(activity=supermarket_activity)

        input_digester = 1000 / len(households)
        input_incinerator_bread = 500 / len(households)
        input_incinerator_other = 1500 / len(households)
        input_brewery_barley = 900 / len(farms)
        input_supermarket_beer = 4000 / (len(supermarkets) * len(breweries))

        # B: or whats with the FractionFlows?
        for i, household in enumerate(households):
            FractionFlowFactory(origin=household,
                                destination=digester,
                                material=bread,
                                amount=input_digester,
                                keyflow=cls.keyflow)
        for i, household in enumerate(households):
            FractionFlowFactory(origin=household,
                                destination=incinerator,
                                material=bread,
                                amount=input_incinerator_bread,
                                keyflow=cls.keyflow)
            FractionFlowFactory(origin=household,
                                destination=incinerator,
                                material=other_waste,
                                amount=input_incinerator_other,
                                keyflow=cls.keyflow)
        for i, farm in enumerate(farms):
            brewery = breweries[i]
            FractionFlowFactory(origin=farm,
                                destination=brewery,
                                material=barley,
                                amount=input_brewery_barley,
                                keyflow=cls.keyflow)
        for supermarket in supermarkets:
            for brewery in breweries:
                FractionFlowFactory(origin=brewery,
                                    destination=supermarket,
                                    material=beer,
                                    amount=input_supermarket_beer,
                                    keyflow=cls.keyflow)
        for brewery in breweries:
            FractionFlowFactory(origin=brewery,
                                destination=digester,
                                material=sludge,
                                amount=1000,
                                keyflow=cls.keyflow)
    def setUp(self):
        super().setUp()
        self.casestudy = CaseStudyFactory(name=self.csname)
        self.kic_obj = KeyflowInCasestudyFactory(id=self.keyflowincasestudy,
                                                 casestudy=self.casestudy,
                                                 keyflow__id=self.keyflow_id)
        self.activitygroup1 = ActivityGroupFactory(keyflow=self.kic_obj)
        self.activity1 = ActivityFactory(activitygroup=self.activitygroup1)
        self.actor1 = ActorFactory(id=self.actor1id, activity=self.activity1)
        self.activitygroup2 = ActivityGroupFactory(keyflow=self.kic_obj)
        self.activity2 = ActivityFactory(activitygroup=self.activitygroup2)
        self.actor2 = ActorFactory(id=self.actor2id, activity=self.activity2)
        self.activitygroup3 = ActivityGroupFactory(keyflow=self.kic_obj)
        self.activity3 = ActivityFactory(activitygroup=self.activitygroup3)
        self.actor3 = ActorFactory(id=self.actor3id, activity=self.activity3)

        self.comp1 = CompositionFactory(name='composition1', nace='nace1')
        self.comp2 = CompositionFactory(name='composition2', nace='nace2')
        self.mat_obj_1 = MaterialFactory(id=self.material_1,
                                         keyflow=self.kic_obj,
                                         parent=None)
        self.mat_obj_2 = MaterialFactory(id=self.material_2,
                                         keyflow=self.kic_obj,
                                         parent=self.mat_obj_1)
        self.publicationic = PublicationInCasestudyFactory()

        # flow attributes
        #self.process = ProcessFactory(name='test-process')

        self.fractionflow1 = FractionFlowFactory(
            flow_id=self.flowid1,
            #process=self.process,
            stock=None,
            to_stock=False,
            origin=self.actor1,
            destination=self.actor2,
            material=self.mat_obj_1,
            nace=self.comp1.nace,
            composition_name=self.comp1.name,
            publication=self.publicationic,
            keyflow=self.kic_obj,
            amount=1.0)
        self.fractionflow2 = FractionFlowFactory(
            flow_id=self.flowid2,
            stock=None,
            to_stock=False,
            origin=self.actor2,
            destination=self.actor3,
            material=self.mat_obj_2,
            nace=self.comp1.nace,
            composition_name=self.comp1.name,
            publication=self.publicationic,
            keyflow=self.kic_obj,
            amount=1.0)
        self.fractionflow3 = FractionFlowFactory(
            flow_id=self.flowid3,
            stock=None,
            to_stock=False,
            origin=self.actor2,
            destination=self.actor3,
            material=self.mat_obj_1,
            nace=self.comp2.nace,
            composition_name=self.comp2.name,
            publication=self.publicationic,
            keyflow=self.kic_obj,
            amount=1.0)
 def setUp(self):
     super().setUp()
     self.area1 = AreaFactory(id=self.area_id1, )
     self.area2 = AreaFactory(id=self.area_id2, )
     self.actor1 = ActorFactory(id=self.actor_id1)
     self.actor2 = ActorFactory(id=self.actor_id2)
     self.actor3 = ActorFactory(id=self.actor_id3)
     self.actor4 = ActorFactory(id=self.actor_id4)
     self.actor5 = ActorFactory(id=self.actor_id5)
     self.composition1 = CompositionFactory()
     self.flow1 = Actor2ActorFactory(id=self.flow_id1,
                                     keyflow=self.kic,
                                     composition=self.composition1,
                                     origin=self.actor1,
                                     destination=self.actor2)
     self.flow2 = Actor2ActorFactory(id=self.flow_id2,
                                     keyflow=self.kic,
                                     composition=self.composition1,
                                     origin=self.actor2,
                                     destination=self.actor3)
     self.flow3 = Actor2ActorFactory(id=self.flow_id3,
                                     keyflow=self.kic,
                                     composition=self.composition1,
                                     origin=self.actor3,
                                     destination=self.actor5)
     self.flow4 = Actor2ActorFactory(id=self.flow_id4,
                                     keyflow=self.kic,
                                     composition=self.composition1,
                                     origin=self.actor5,
                                     destination=self.actor4)
     self.flow5 = Actor2ActorFactory(id=self.flow_id5,
                                     keyflow=self.kic,
                                     composition=self.composition1,
                                     origin=self.actor5,
                                     destination=self.actor3)
     self.flow6 = Actor2ActorFactory(id=self.flow_id6,
                                     keyflow=self.kic,
                                     composition=self.composition1,
                                     origin=self.actor1,
                                     destination=self.actor3)
     self.material1 = MaterialFactory(keyflow=self.kic)
     self.flow_a = IndicatorFlowFactory(origin_node_ids='1, 2, 3',
                                        destination_node_ids='4, 5',
                                        materials=[self.material1])
     self.flow_b = IndicatorFlowFactory(origin_node_ids='1, 2',
                                        destination_node_ids='3, 4, 5',
                                        materials=[self.material1])
     self.obj = FlowIndicatorFactory(flow_a=self.flow_a,
                                     flow_b=self.flow_b,
                                     keyflow=self.kic)
     self.post_data = dict(
         name='FlowIndicator',
         unit='Elmshorn',
         description='supernormal',
         indicator_type='A',
         flow_a=[self.flow_a],
         flow_b=[self.flow_b],
         keyflow=self.keyflow_id1,
     )
     self.put_data = self.post_data
     self.patch_data = self.post_data
Example #9
0
    def setUpClass(cls):
        super().setUpClass()

        ### Modeling the FUNGUS solution and the status quo it is based on ###

        cls.keyflow = KeyflowInCasestudyFactory()

        ##  Materials ##

        dummy_mat_1 = MaterialFactory(keyflow=cls.keyflow)
        dummy_mat_2 = MaterialFactory(keyflow=cls.keyflow)
        wool = MaterialFactory(name='wool insulation', keyflow=cls.keyflow)
        fungus = MaterialFactory(name='fungus insulation', keyflow=cls.keyflow)
        # no idea about the processes, but the process of wool-insulation flow
        # to E-3821 is supposed to be different to the fungus-insulation one
        dummy_process = ProcessFactory(name='process')
        compost = ProcessFactory(name='compost')

        ## Activities and Activity groups ##

        group_A = ActivityGroupFactory(name='A', code='A', keyflow=cls.keyflow)
        group_C = ActivityGroupFactory(name='C', code='C', keyflow=cls.keyflow)
        group_E = ActivityGroupFactory(name='E', code='E', keyflow=cls.keyflow)
        group_F = ActivityGroupFactory(name='F', code='F', keyflow=cls.keyflow)
        group_V = ActivityGroupFactory(name='V', code='V', keyflow=cls.keyflow)
        dummy_group = ActivityGroupFactory(keyflow=cls.keyflow)

        growing_activity = ActivityFactory(
            name='A-0116 Growing of fibre crops',
            nace='A-0116',
            activitygroup=group_A)
        manufacture_activity = ActivityFactory(
            name='C-2399 Manufacture of non-metallic mineral products',
            nace='C-2399',
            activitygroup=group_C)
        collection_activity = ActivityFactory(
            name='E-3819 Collection of non-hazardous waste',
            nace='E-3819',
            activitygroup=group_E)
        treatment_activity = ActivityFactory(
            name='E-3821 Treatment and disposal of non-hazardous waste',
            nace='E-3821',
            activitygroup=group_E)
        building_activity = ActivityFactory(
            name='F-4110 Development of building projects',
            nace='F-4110',
            activitygroup=group_E)
        consumption_activity = ActivityFactory(
            name='V-0000 Consumption in households',
            nace='V-0000',
            activitygroup=group_V)
        dummy_activity_1 = ActivityFactory(activitygroup=dummy_group)
        dummy_activity_2 = ActivityFactory(activitygroup=dummy_group)

        ## Actors ##

        # random households
        for i in range(100):
            ActorFactory(name='household{}'.format(i),
                         activity=consumption_activity)

        for i in range(2):
            building_dev = ActorFactory(name='buildingdev{}'.format(i),
                                        activity=building_activity)
            # this activity is set as spatial choice in the following solution
            # parts -> they have to be geolocated (just putting it somewhere)
            # Note CF: geolocate the other models as well?
            location = AdministrativeLocationFactory(actor=building_dev,
                                                     geom=Point(x=5, y=52))

        collection_insulation = ActorFactory(name='collection',
                                             activity=collection_activity)

        manufacturer = ActorFactory(name='manufacturer'.format(i),
                                    activity=manufacture_activity)

        # put some dummy actors into the dummy activities
        for i in range(10):
            ActorFactory(activity=dummy_activity_1)
            ActorFactory(activity=dummy_activity_2)

        treatment_insulation = ActorFactory(name='disposal',
                                            activity=treatment_activity)
        cls.treatment_compost = ActorFactory(name='compost',
                                             activity=treatment_activity)

        # putting the fungus farms into "growing fibre crops" lacking better
        # knowledge
        fungus_input = ActorFactory(name='chungus', activity=growing_activity)
        cls.fungus_farm_1 = ActorFactory(name='fungus1',
                                         activity=growing_activity)
        cls.fungus_farm_2 = ActorFactory(name='fungus2',
                                         activity=growing_activity)

        ## status quo flows and stocks ##

        # making stuff up going into the fungus farm
        FractionFlowFactory(origin=fungus_input,
                            destination=cls.fungus_farm_1,
                            material=dummy_mat_1,
                            amount=20)
        FractionFlowFactory(origin=fungus_input,
                            destination=cls.fungus_farm_2,
                            material=dummy_mat_2,
                            amount=10)

        # fungus stock to possibly derive from
        # (Note CF: is there a stock? better: put the output to the treatment)
        FractionFlowFactory(origin=cls.fungus_farm_1,
                            material=fungus,
                            amount=10)
        FractionFlowFactory(origin=cls.fungus_farm_2,
                            material=fungus,
                            amount=10)
        # (Note CF: set stocks as affected flows?)

        households = Actor.objects.filter(activity=consumption_activity)
        # every household gets same share of 200,000 t/y activity stock
        stock_share = 200000 / len(households)
        # Note CF: no idea how much should go in per year
        input_share = 10 / len(households)
        builders = Actor.objects.filter(activity=building_activity)
        step = len(households) / len(builders)

        # household stock and input
        for i, household in enumerate(households):
            # stock
            FractionFlowFactory(origin=household,
                                material=wool,
                                amount=stock_share)
            # equally distribute the inputs from the building developers
            builder = builders[int(i / step)]
            FractionFlowFactory(origin=builder,
                                destination=household,
                                material=wool,
                                amount=input_share)

        input_share = 5 / len(builders)  # Note CF: how much goes in?
        # inputs and outputs of builders
        for builder in builders:
            # from manufacturer
            FractionFlowFactory(origin=manufacturer,
                                destination=builder,
                                material=wool,
                                amount=input_share)
            # to collection
            FractionFlowFactory(origin=builder,
                                destination=collection_insulation,
                                material=wool,
                                amount=1)
            # to treatment
            FractionFlowFactory(origin=builder,
                                destination=treatment_insulation,
                                material=wool,
                                amount=3)

        # collection to treatment
        FractionFlowFactory(origin=collection_insulation,
                            destination=treatment_insulation,
                            material=wool,
                            amount=2)

        # manufacturer to treatment
        FractionFlowFactory(origin=manufacturer,
                            destination=treatment_insulation,
                            material=wool,
                            amount=2)

        ## solution definition ##

        cls.solution = SolutionFactory(name='Fungus Isolation')

        cls.fungus_question = ImplementationQuestionFactory(
            question=("How many tonnes per year of fungus should be used as "
                      "insulation material when developing new "
                      "living quarters?"),
            solution=cls.solution,
            min_value=0,
            is_absolute=True  # Note CF: is it?
        )

        cls.possible_implementation_area = PossibleImplementationAreaFactory(
            solution=cls.solution,
            geom=MultiPolygon(
                Polygon(((0.0, 0.0), (0.0, 20.0), (56.0, 20.0), (56.0, 0.0),
                         (0.0, 0.0)))),
            question=("Where are the facilities for composting "
                      "the fungus located?"))

        ## solution parts ##

        # the new flow based on flows from c-2399 to f-4110
        # Note CF: optional it could also be derived from flows out of the farms

        implementation = FlowReferenceFactory(
            origin_activity=manufacture_activity,
            destination_activity=building_activity,
            material=wool)

        shift = FlowReferenceFactory(origin_activity=growing_activity,
                                     material=fungus)

        cls.new_fungus_insulation = SolutionPartFactory(
            solution=cls.solution,
            question=cls.fungus_question,
            flow_reference=implementation,
            flow_changes=shift,
            scheme=Scheme.SHIFTORIGIN,
            a=1,
            b=0,
            priority=1)

        # the new flow based on flows from c-2399 to f-4110
        # Note CF: optional it could also be derived from flows out of the farms

        implementation = FlowReferenceFactory(
            origin_activity=consumption_activity,
            destination_activity=None,
            process=dummy_process,
            material=wool)

        # origin actually stays the same but there is no way to shift without
        # referring to either new destination or origin
        shift = FlowReferenceFactory(origin_activity=consumption_activity,
                                     material=fungus)

        new_fungus_stock = SolutionPartFactory(solution=cls.solution,
                                               question=cls.fungus_question,
                                               flow_reference=implementation,
                                               flow_changes=shift,
                                               scheme=Scheme.SHIFTORIGIN,
                                               a=1,
                                               b=0,
                                               priority=2)

        # new flow from F-4110 development to E-3821 treatment
        # Note CF: deriving it from existing F4110 to E3821, just guessing

        implementation = FlowReferenceFactory(
            origin_activity=building_activity,
            destination_activity=treatment_activity,
            material=wool,
            process=dummy_process)

        # actually both activities stay the same
        shift = FlowReferenceFactory(
            origin_activity=building_activity,
            destination_activity=treatment_activity,
            material=fungus,
            process=compost,
            destination_area=cls.possible_implementation_area)

        cls.new_building_disposal = SolutionPartFactory(
            solution=cls.solution,
            # Note CF: i guess we need different numbers than asked for in this
            # question, or do we even need a question??
            question=cls.fungus_question,
            flow_reference=implementation,
            flow_changes=shift,
            scheme=Scheme.SHIFTDESTINATION,
            a=1,
            b=0,
            priority=3)

        # new flow from fungus farms to E-3821 treatment
        # Note CF: most likely this should already be modelled in the status quo
        # deriving it from fungus stock

        implementation = FlowReferenceFactory(origin_activity=growing_activity,
                                              destination_activity=None,
                                              process=compost,
                                              material=fungus)

        # origin actually stays the same but there is no way to shift without
        # referring to either new destination or origin
        shift = FlowReferenceFactory(
            destination_activity=treatment_activity,
            destination_area=cls.possible_implementation_area,
            material=fungus)

        # Note CF: reduce existing implementation flow?

        new_fungus_disposal = SolutionPartFactory(
            solution=cls.solution,
            # Note CF: is there a question???
            question=None,
            flow_reference=implementation,
            flow_changes=shift,
            scheme=Scheme.SHIFTDESTINATION,
            a=1,
            b=0,
            priority=4)

        ## affected flows ##

        # Note CF: poor pull leader has to define the affected flows for
        # every part, just taking the same ones for all parts
        # (marking the implementation flows as well, i guess that doesn't matter)
        # B: who cares about the pull leader?!

        parts = [
            cls.new_fungus_insulation, new_fungus_stock,
            cls.new_building_disposal, new_fungus_disposal
        ]

        for part in parts:
            # F-4110 to V-0000
            AffectedFlow(origin_activity=building_activity,
                         destination_activity=consumption_activity,
                         material=wool,
                         solution_part=part)

            # Note CF: insulation stock of V-0000 affected as well?

            # inputs of fungus farm, origin and destination are in same activity
            # Note CF: might not be this way in reality, maybe inputs come from
            # different activity? stock missing
            AffectedFlow(origin_activity=growing_activity,
                         destination_activity=growing_activity,
                         material=dummy_mat_1,
                         solution_part=part)
            AffectedFlow(origin_activity=growing_activity,
                         destination_activity=growing_activity,
                         material=dummy_mat_2,
                         solution_part=part)

            # F-4110 to E-3821
            AffectedFlow(origin_activity=building_activity,
                         destination_activity=treatment_activity,
                         material=wool,
                         solution_part=part)
            # F-4110 to E-3819
            AffectedFlow(origin_activity=building_activity,
                         destination_activity=collection_activity,
                         material=wool,
                         solution_part=part)

            # C-2399 to F-4110
            AffectedFlow(origin_activity=manufacture_activity,
                         destination_activity=building_activity,
                         material=wool,
                         solution_part=part)

            # E-3819 to E-3821
            AffectedFlow(origin_activity=collection_activity,
                         destination_activity=treatment_activity,
                         material=wool,
                         solution_part=part)