def shares_delete(request): """ Staff may delete a package of shares. """ _id = request.matchdict["id"] from c3smembership.models import Shares # load info from DB -- if possible _s = Shares.get_by_id(_id) if isinstance(_s, NoneType): # entry was not found in database request.session.flash("This shares package {} was not found in the DB.".format(_id), "message_to_staff") return HTTPFound(request.route_url("toolbox")) # print("any members? {}".format(_s.members)) if len(_s.members) > 0: # shares package is still owned request.session.flash( "DID NOT DELETE! " "This shares package {} still has a member owning it.".format(_id), "message_to_staff" ) return HTTPFound(request.route_url("toolbox")) else: Shares.delete_by_id(_id) request.session.flash("the shares package {} was deleted.".format(_id), "message_to_staff") return HTTPFound(request.route_url("toolbox"))
def make_member_with_shares(self): with transaction.manager: member1 = C3sMember( # german firstname=u'SomeFirstnäme', lastname=u'SomeLastnäme', email=u'*****@*****.**', address1=u"addr one", address2=u"addr two", postcode=u"12345", city=u"Footown Mäh", country=u"Foocountry", locale=u"DE", date_of_birth=date.today(), email_is_confirmed=False, email_confirm_code=u'ABCDEFGFOO', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=True, name_of_colsoc=u"GEMA", num_shares=u'23', ) shares1 = Shares( number=2, date_of_acquisition=date.today(), reference_code=u'ABCDEFGH', signature_received=True, signature_received_date=date(2014, 6, 7), payment_received=True, payment_received_date=date(2014, 6, 8), signature_confirmed=True, signature_confirmed_date=date(2014, 6, 8), payment_confirmed=True, payment_confirmed_date=date(2014, 6, 9), accountant_comment=u'no comment', ) member1.shares = [shares1] shares2 = Shares( number=23, date_of_acquisition=date.today(), reference_code=u'IJKLMNO', signature_received=True, signature_received_date=date(2014, 1, 7), payment_received=True, payment_received_date=date(2014, 1, 8), signature_confirmed=True, signature_confirmed_date=date(2014, 1, 8), payment_confirmed=True, payment_confirmed_date=date(2014, 1, 9), accountant_comment=u'not connected', ) DBSession.add(member1) DBSession.add(shares1) DBSession.add(shares2)
def shares_detail(request): """ Show details about a package of shares. """ _s = Shares.get_by_id(request.matchdict["id"]) if isinstance(_s, NoneType): # entry was not found in database request.session.flash("This shares id was not found in the database!", "message_to_staff") return HTTPFound(request.route_url("toolbox")) # get shares owner if possible try: _m_id = _s.members[0].id _m_first = _s.members[0].firstname _m_last = _s.members[0].lastname # print('got it!') except: # print('failed!') _m_id = 0 _m_first = "Not" _m_last = "Found" return { "s": _s, # the share "m_id": _m_id, # the owner "m_first": _m_first, # the owner "m_last": _m_last, # the owner }
def create(cls, membership_number, shares_quantity, board_confirmation=None): """ Create a shares package. Args: membership_number: The membership number of the member for which the shares package is created. shares_quantity: The number of shares of the package to be created. board_confirmation: Optional. The date on which the board of directors confirmed the acquisition of the shares package. Returns: The technical primary key of the created shares package. """ shares = Shares( number=shares_quantity, date_of_acquisition=board_confirmation, ) # pylint: disable=no-member member = DBSession.query(C3sMember).filter( C3sMember.membership_number == membership_number).first() # pylint: disable=no-member DBSession.add(shares) member.shares.append(shares) member.num_shares += shares_quantity DBSession.flush() return shares.id
def stats_view(request): """ This view lets accountants view statistics: how many membership applications, real members, shares, etc. """ # countries_dict = C3sMember.get_countries_list() _cl = C3sMember.get_countries_list() _cl_sorted = _cl.items() # print "die liste: {}".format(_cl_sorted) import operator _cl_sorted.sort(key=operator.itemgetter(1), reverse=True) # print "sortiert: {}".format(_cl_sorted) return { # form submissions '_number_of_datasets': C3sMember.get_number(), 'afm_shares_unpaid': C3sMember.afm_num_shares_unpaid(), 'afm_shares_paid': C3sMember.afm_num_shares_paid(), # shares # 'num_shares': C3sMember.get_total_shares(), 'num_shares_members': Shares.get_total_shares(), # 'num_shares_mem_norm': Shares.get_sum_norm(), # 'num_shares_mem_inv': Shares.get_sum_inv(), # memberships 'num_members_accepted': C3sMember.get_num_members_accepted(), 'num_non_accepted': C3sMember.get_num_non_accepted(), 'num_nonmember_listing': C3sMember.nonmember_listing_count(), 'num_duplicates': len(C3sMember.get_duplicates()), # 'num_empty_slots': C3sMember.get_num_empty_slots(), # normal persons vs. legal entities 'num_ms_nat_acc': C3sMember.get_num_mem_nat_acc(), 'num_ms_jur_acc': C3sMember.get_num_mem_jur_acc(), # normal vs. investing memberships 'num_ms_norm': C3sMember.get_num_mem_norm(), 'num_ms_inves': C3sMember.get_num_mem_invest(), 'num_ms_features': C3sMember.get_num_mem_other_features(), # membership_numbers 'num_memnums': C3sMember.get_num_membership_numbers(), 'max_memnum': C3sMember.get_highest_membership_number(), 'next_memnum': C3sMember.get_next_free_membership_number(), # countries 'num_countries': C3sMember.get_num_countries(), 'countries_list': _cl_sorted, # key=lambda x: x[1] # ), # XXX TODO: sorte # dues stats 'dues15_stats': Dues15Invoice.get_monthly_stats(), 'dues16_stats': Dues16Invoice.get_monthly_stats(), # staff figures 'num_staff': len(C3sStaff.get_all()) }
def make_unconnected_shares(self): with transaction.manager: shares2 = Shares( number=23, date_of_acquisition=date.today(), reference_code=u'IJKLMNO', signature_received=True, signature_received_date=date(2014, 1, 7), payment_received=True, payment_received_date=date(2014, 1, 8), signature_confirmed=True, signature_confirmed_date=date(2014, 1, 8), payment_confirmed=True, payment_confirmed_date=date(2014, 1, 9), accountant_comment=u'not connected', ) DBSession.add(shares2)
def shares_edit(request): """ Edit details of a package of shares. """ # print(request.matchdict['id']) from c3smembership.models import Shares # load info from DB -- if possible _s = Shares.get_by_id(request.matchdict["id"]) if isinstance(_s, NoneType): # entry was not found in database return get_memberhip_listing_redirect(request) else: appstruct = {} appstruct = {"number": _s.number, "date_of_acquisition": _s.date_of_acquisition} # construct a form class Shares(colander.Schema): number = colander.SchemaNode(colander.Integer(), title=_("Number of Shares")) date_of_acquisition = colander.SchemaNode(colander.Date(), title=_("Date of Acquisition")) schema = Shares() form = deform.Form(schema, buttons=[deform.Button("submit", _(u"Submit"))]) # form generation complete # if the form has been used and SUBMITTED, check contents if "submit" in request.POST: controls = request.POST.items() try: appstruct = form.validate(controls) # print("the appstruct from the form: %s \n") % appstruct # for thing in appstruct: # print("the thing: %s") % thing # print("type: %s") % type(thing) except ValidationFailure, e: # pragma: no cover print(e) request.session.flash( _(u"Please note: There were errors, " "please check the form below."), "message_above_form", allow_duplicate=False, ) return {"form": e.render()} # if no error occurred, persist the changed values info in database test1 = appstruct["number"] == _s.number # changed value through form (different from db)? if not test1: log.info( "info about number of shares of %s changed by %s to %s" % (_s.id, request.user.login, appstruct["number"]) ) _s.number = appstruct["number"] test2 = ( # changed value through form (different from db)? appstruct["date_of_acquisition"] == _s.date_of_acquisition ) if not test2: log.info( "info about date_of_acquisition of %s changed by %s to %s" % (_s.id, request.user.login, appstruct["date_of_acquisition"]) ) _s.date_of_acquisition = appstruct["date_of_acquisition"]
def setUp(self): my_settings = { 'sqlalchemy.url': 'sqlite:///:memory:', } engine = engine_from_config(my_settings) DBSession.configure(bind=engine) Base.metadata.create_all(engine) with transaction.manager: member1 = C3sMember( # german firstname=u'SomeFirstnäme', lastname=u'SomeLastnäme', email=u'*****@*****.**', address1=u"addr one", address2=u"addr two", postcode=u"12345", city=u"Footown Mäh", country=u"Foocountry", locale=u"DE", date_of_birth=date.today(), email_is_confirmed=False, email_confirm_code=u'ABCDEFGFOO', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=True, name_of_colsoc=u"GEMA", num_shares=35, ) member2 = C3sMember( # german firstname=u'AAASomeFirstnäme', lastname=u'XXXSomeLastnäme', email=u'*****@*****.**', address1=u"addr one", address2=u"addr two", postcode=u"12345", city=u"Footown Mäh", country=u"Foocountry", locale=u"DE", date_of_birth=date.today(), email_is_confirmed=False, email_confirm_code=u'ABCDEFGBAR', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=True, name_of_colsoc=u"GEMA", num_shares=45, ) member3 = C3sMember( firstname=u'Not Approved', lastname=u'Member', email=u'*****@*****.**', address1=u'Some Street 123', address2=u'', postcode=u"12345", city=u"Some City", country=u"Some Country", locale=u"DE", date_of_birth=date(1980, 1, 2), email_is_confirmed=False, email_confirm_code=u'NOT_APPROVED_MEMBER', password=u'not_approved_member', date_of_submission=date(1970, 1, 1), membership_type=u'normal', member_of_colsoc=True, name_of_colsoc=u'', num_shares=7, ) # pylint: disable=no-member DBSession.add(member1) # pylint: disable=no-member DBSession.add(member2) # pylint: disable=no-member DBSession.add(member3) member1.membership_number = u'member1' member1.membership_date = date(2013, 1, 1) member1.membership_accepted = True member2.membership_number = u'member2' member2.membership_date = date(2013, 1, 1) member2.membership_accepted = True member3.payment_received_date = date(2016, 10, 11) share = Shares() share.reference_code = u'share1' share.date_of_acquisition = date(2013, 1, 2) share.payment_received_date = date(2012, 11, 10) share.number = 12 member1.shares.append(share) share = Shares() share.reference_code = u'share2' share.date_of_acquisition = date(2014, 2, 3) share.payment_received_date = date(2012, 12, 31) share.number = 23 member1.shares.append(share) share = Shares() share.reference_code = u'share3' share.date_of_acquisition = date(2014, 3, 4) share.payment_received_date = date(2014, 3, 3) share.number = 34 member2.shares.append(share) share = Shares() share.reference_code = u'share4' share.date_of_acquisition = date(2015, 4, 5) share.payment_received_date = date(2014, 11, 15) share.number = 45 member2.shares.append(share)
def setUp(self): """ Setup test cases """ self.config = testing.setUp() self.config.include('pyramid_mailer.testing') DBSession.close() DBSession.remove() my_settings = { 'sqlalchemy.url': 'sqlite:///:memory:', 'available_languages': 'da de en es fr', 'c3smembership.dashboard_number': '30' } engine = engine_from_config(my_settings) DBSession.configure(bind=engine) Base.metadata.create_all(engine) # self._insert_members() with transaction.manager: # a group for accountants/staff accountants_group = Group(name=u"staff") DBSession.add(accountants_group) DBSession.flush() # staff personnel staffer1 = C3sStaff( login=u"rut", password=u"berries", email=u"*****@*****.**", ) staffer1.groups = [accountants_group] DBSession.add(accountants_group) DBSession.add(staffer1) DBSession.flush() with transaction.manager: member1 = C3sMember( # german firstname=u'SomeFirstnäme', lastname=u'SomeLastnäme', email=u'*****@*****.**', address1=u"addr one", address2=u"addr two", postcode=u"12345", city=u"Footown Mäh", country=u"Foocountry", locale=u"de", date_of_birth=date.today(), email_is_confirmed=False, email_confirm_code=u'ABCDEFGFOO', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=True, name_of_colsoc=u"GEMA", num_shares=u'23', ) shares1_m1 = Shares( number=2, date_of_acquisition=date.today(), reference_code=u'ABCDEFGH', signature_received=True, signature_received_date=date(2014, 6, 7), payment_received=True, payment_received_date=date(2014, 6, 8), signature_confirmed=True, signature_confirmed_date=date(2014, 6, 8), payment_confirmed=True, payment_confirmed_date=date(2014, 6, 9), accountant_comment=u'no comment', ) member1.shares = [shares1_m1] shares2_m1 = Shares( number=23, date_of_acquisition=date.today(), reference_code=u'IJKLMNO', signature_received=True, signature_received_date=date(2014, 1, 7), payment_received=True, payment_received_date=date(2014, 1, 8), signature_confirmed=True, signature_confirmed_date=date(2014, 1, 8), payment_confirmed=True, payment_confirmed_date=date(2014, 1, 9), accountant_comment=u'not connected', ) member1.shares.append(shares2_m1) member1.membership_accepted = True member2 = C3sMember( # english firstname=u'AAASomeFirstnäme', lastname=u'XXXSomeLastnäme', email=u'*****@*****.**', address1=u"addr one", address2=u"addr two", postcode=u"12345", city=u"Footown Mäh", country=u"Foocountry", locale=u"en", date_of_birth=date.today(), email_is_confirmed=False, email_confirm_code=u'ABCDEFGBAR', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=True, name_of_colsoc=u"GEMA", num_shares=u'2', ) founding_member3 = C3sMember( # english firstname=u'BBBSomeFirstnäme', lastname=u'YYYSomeLastnäme', email=u'*****@*****.**', address1=u"addr one", address2=u"addr two", postcode=u"12345", city=u"Footown Mäh", country=u"Foocountry", locale=u"en", date_of_birth=date.today(), email_is_confirmed=False, email_confirm_code=u'ABCBARdungHH_', password=u'anotherrandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=True, name_of_colsoc=u"GEMA", num_shares=u'2', ) member4_lost = C3sMember( firstname=u'Resigned', lastname=u'Smith', email=u'*****@*****.**', address1=u"addr one", address2=u"addr two", postcode=u"12345", city=u"Footown Mäh", country=u"Foocountry", locale=u"en", date_of_birth=date(1980, 1, 2), email_is_confirmed=False, email_confirm_code=u'RESIGNEDSMITH', password=u'arandompassword', date_of_submission=date.today() - timedelta(days=370), membership_type=u'normal', member_of_colsoc=True, name_of_colsoc=u"GEMA", num_shares=u'2', ) DBSession.add(shares1_m1) DBSession.add(shares2_m1) DBSession.add(member1) DBSession.add(member2) DBSession.add(founding_member3) DBSession.add(member4_lost) app = main({}, **my_settings) self.testapp = TestApp(app)
) >= start_date) and (datetime( member.payment_received_date.year, member.payment_received_date.month, member.payment_received_date.day, ) <= end_date)): afm_shares_paid_unapproved_cnt += member.num_shares afm_shares_paid_unapproved.append(member) # shares shares_count = 0 new_shares = [] shares_paid_unapproved_count = 0 shares_paid_unapproved = [] all_shares = Shares.get_all() for share in all_shares: if share is not None: if ( # shares approved during span (datetime( share.date_of_acquisition.year, share.date_of_acquisition.month, share.date_of_acquisition.day, ) >= start_date) and (datetime( share.date_of_acquisition.year, share.date_of_acquisition.month, share.date_of_acquisition.day, ) <= end_date) ):