[docs]classMemberView(CoreOpMasterView):""" Master view for :class:`~pycorepos:corepos.db.office_op.model.MemberInfo`; route prefix is ``corepos_members``. Notable URLs provided by this class: * ``/corepos/members/`` * ``/corepos/members/XXX`` """model_class=MemberInfomodel_title="CORE-POS Member"route_prefix='corepos_members'url_prefix='/corepos/members'# nb. this is just for readonly lookupcreatable=Falseeditable=Falsedeletable=Falsegrid_columns=['card_number','first_name','last_name','street','city','state','zip','phone','email',]filter_defaults={'card_number':{'active':True,'verb':'equal'},'first_name':{'active':True,'verb':'contains'},'last_name':{'active':True,'verb':'contains'},}sort_defaults='card_number'defget_query(self,session=None):""" """query=super().get_query(session=session)op_model=self.corepos_handler.get_model_office_op()query=query.outerjoin(op_model.CustomerClassic,sa.and_(op_model.CustomerClassic.card_number==op_model.MemberInfo.card_number,op_model.CustomerClassic.person_number==1,))\
.options(orm.joinedload(op_model.MemberInfo.customers))returnquerydefconfigure_grid(self,g):""" """super().configure_grid(g)op_model=self.corepos_handler.get_model_office_op()# first_nameg.set_renderer('first_name',self.render_customer_attr)g.set_sorter('first_name',op_model.CustomerClassic.first_name)# last_nameg.set_renderer('last_name',self.render_customer_attr)g.set_sorter('last_name',op_model.CustomerClassic.last_name)# linksifself.has_perm('view'):g.set_link('card_number')g.set_link('first_name')g.set_link('last_name')defrender_customer_attr(self,member,key,value):""" """customer=member.customers[0]returngetattr(customer,key)