def handle(self, *args, **options):
     total = options['total']
     username = options['agent']
     farmer = options['farmer']
     if farmer:
         msisdns = [int(farmer)]
     else:
         msisdns = [2776123456 + i for i in range(total)]
     if username:
         actor = Actor.objects.get(user__username=username)
         agent = actor.as_agent()
         self.generate_farmers(msisdns, agent)
     else:
         # create the agent with msisdn offset of the total generated to
         # avoid collissions on usernames
         agent_msisdn = 2776123456 + total + 1
         agent = utils.create_agent(msisdn=str(agent_msisdn),
                     name=utils.random_name(),
                     surname=utils.random_surname())
         self.generate_farmers(msisdns, agent)
    def generate_farmers(self, msisdns, agent):
        for msisdn in msisdns:
            # create a district
            district = utils.random_district()
            farmergroup_name = "%s Farmer Group" % (district.name,)

            # create the farmer
            farmer = utils.create_farmer(msisdn=str(msisdn),
                                         name=utils.random_name(),
                                         surname=utils.random_surname(),
                                         )

            # cultivates two types of crops
            farmer.grows_crop(utils.random_crop())
            farmer.grows_crop(utils.random_crop())

            # create a market in the district
            market_name = '%s Market' % district.name
            market = utils.create_market(market_name, district)

            # have the farmer sells crops at that market through the agent
            farmer.operates_at(market, agent)