Exemple #1
0
def get_daypass():
    """Present a calendar to choose the daypass pariod (from/to) - default is today"""
    session = session_manager.get_session()
    if request.method == "POST":
        from_date = request.forms['from_date']
        until_date = request.forms.get(
            'until_date', from_date)  # one day pass only --> no until_date
        _from_date = datetime.strptime(from_date, "%Y-%m-%d")
        _until_date = datetime.strptime(until_date, "%Y-%m-%d")
        if (_until_date - _from_date).days <= 7:
            admin = Member(id=1)
            qr_code = admin.encode_qrcode(version=3,
                                          from_date=_from_date,
                                          until_date=_until_date)
            img_qrcode = make_qrcode(qr_code)
            qr_code_file = "images/XCJ_{}.png".format(from_date)
            img_qrcode.save(qr_code_file)
            # print("QR code:", qr_code_file)
            if request.forms.get('email'):
                admin.email_qrcode(
                    qr_code_file,
                    "from {} until {}".format(from_date, until_date),
                    request.forms['email'])
        else:
            qr_code_file = "images/emoji-not-happy.jpg"
    else:  # GET
        qr_code_file = None
        from_date, until_date = date.today(), date.today()
    # only admin can set 'until date'
    period = (from_date, until_date if session['user'].is_admin else "")
    return template("daypass",
                    qr_code=qr_code_file,
                    period=period,
                    session=session)
Exemple #2
0
def get_member(id):
    """Display the form in R/O mode for a member"""
    member = Member(id)
    qr_file = "images/XCJ_{}.png".format(id)
    if member['status'] == "OK":
        try:
            last_modif_time = stat(qr_file).st_mtime
            make_qr_code = datetime.fromtimestamp(
                last_modif_time) < datetime.now().replace(
                    minute=0, hour=0, second=0, microsecond=0)
        except (FileNotFoundError, AttributeError) as err:
            make_qr_code = True
        if make_qr_code:
            qrcode_text = member.encode_qrcode()
            img = make_qrcode(qrcode_text)
            img.save(qr_file)
        member.qrcode_is_valid = True
    else:
        member.qrcode_is_valid = False
        copy2("images/emoji-not-happy.jpg",
              qr_file)  # overwrite any previous QR code .png
    return template("member",
                    member=member,
                    read_only=True,
                    session=session_manager.get_session())
Exemple #3
0
def make_event_qrcode(id):
    """Generate the QR Code of an Event"""
    trans = Transaction(id)
    event_member = Member(id=trans["member_id"])
    if event_member["status"] == "OK" and event_member["gender"] == 5:
        # use the event_member to set all necessary information to generate a QR Code Version 3
        qrcode = event_member.encode_qrcode(version=3,
                                            from_date=trans["valid_from"],
                                            until_date=trans["valid_until"])
        img_qrcode = make_qrcode(qrcode)
        qr_file = "images/XCJevent_{}.png".format(id)
        img_qrcode.save(qr_file)
        return "<img src='/{}' />".format(qr_file)
    else:
        return "<h2>This event has not a valid status or gender.</h2>"
Exemple #4
0
from make_qrcode import make_qrcode

db = Member(debug=False)
images_path = os.path.dirname(os.path.realpath(__file__)) + "/images"
XCJ_LOGO = images_path + "/XCJ.png"
NOT_HAPPY = images_path + "/emoji-not-happy.jpg"
for m in db.select(columns="id", one_only=False, order_by="id"):
    member = Member(id=m['id'])
    print(member, member['status'])
    # if member's status is not OK then overwrite its QR code image else generate a new one
    qr_file = "{}/XCJ_{}.png".format(images_path, member.id)
    if member['status'] != "OK":
        copy2(NOT_HAPPY, qr_file)
        continue
    # else....
    qrcode_text = member.encode_qrcode()
    img = make_qrcode(qrcode_text)
    img.save(qr_file)
    if member["role"] == member.ROLE["GROUP"]: continue
    if (member['validity'] - date.today()).days == 7:
        print("7 days!")
        if member['email']:
            send_email(
                "Your membership to Xin Che Jian will expire in one week",
                db.mailbox["username"], (member['email'], ),
                """
Dear {},

This message to inform you that we noticed that your membership to Xin Che Jian hackerspace will expire on {}.

Please approach one of our staff during your next visit to renew it.
Exemple #5
0
    args, unk = parser.parse_known_args()
    # a member ID must be provided either after the -m option or as free argument
    if args.member_id is None:
        if unk:
            args.member_id = int(unk[0])
        else:
            raise argparse.ArgumentError(arg_id, message="Missing Member ID")
    # optional: if no member's name is given then fetch record from DB else create a QR Code without DB record
    if args.member_name is None:  # if only the member ID is given then fetch in the database
        current_member = Member(args.member_id)
        if current_member.id is None:
            raise argparse.ArgumentError(arg_id,
                                         message="Unknown Member ID {}".format(
                                             args.member_id))
    else:  # both given: make it directly without DB selection
        current_member = Member()
        current_member.id, current_member.name = args.member_id, args.member_name

    qrcode_text = current_member.encode_qrcode(version=args.qrcode_version)
    qr_file = args.output or os.path.join(
        args.directory, "XCJ_{}.png".format(current_member.id))
    img = make_qrcode(qrcode_text,
                      QR_CODE_QUALITY[args.quality],
                      logo=args.logo)
    img.save(qr_file)
    # test that the QR Code is valid
    qrc = find_qrcode(qr_file)
    print(
        "QR Code {} generated with {} quality and controlled:\n".format(
            qr_file, args.quality), qrc)