[docs]classMembershipHandler(GenericHandler):""" Base class and default implementation for membership handlers. """
[docs]defmax_one_per_person(self):""" Check whether a person is allowed to have just one member account, or if multiple are allowed. :returns: Boolean; if true then only one member account is allowed per person; if false then multiple are allowed. """returnself.config.getbool('rattail','members.max_one_per_person',default=False)
[docs]defensure_member(self,person,**kwargs):""" Returns the Member record associated with the given person, creating it first if necessary. """member=self.get_member(person)ifmember:returnmemberreturnself.make_member(person,**kwargs)
[docs]defmake_member(self,person,**kwargs):""" Make and return a new Member instance. """raiseNotImplementedError
[docs]defbegin_membership(self,member,**kwargs):""" Begin an active membership. """raiseNotImplementedError
[docs]defget_member(self,obj):""" Returns the member associated with the given person, if there is one. """model=self.modelifisinstance(obj,model.Member):returnobjelifisinstance(obj,model.Customer):ifobj.members:returnobj.members[0]else:person=self.app.get_person(obj)ifpersonandperson.members:returnperson.members[0]
[docs]defget_members_for_account_holder(self,person,**kwargs):""" Return all Member records for which the given Person is the account holder. """returnlist(person.members)
[docs]defget_customer(self,obj):""" Returns the customer associated with the given member, if there is one. """warnings.warn("MembershipHandler.get_customer() is deprecated; ""please use AppHandler.get_customer() instead")returnself.app.get_customer(obj)
[docs]defget_person(self,obj):""" Returns the person associated with the given member, if there is one. """warnings.warn("MembershipHandler.get_person() is deprecated; ""please use AppHandler.get_person() instead")returnself.app.get_person(obj)
[docs]defget_equity_full_investment_amount(self,**kwargs):""" Should return the amount required for an account to become fully invested. """raiseNotImplementedError
[docs]defget_equity_total(self,member,cached=True,**kwargs):""" Get the official equity total for the given member account. """ifcached:returnmember.equity_totalreturnsum([payment.amountforpaymentinmember.equity_payments])