コード例 #1
0
def handle_budget(params, json_data):
    if 'budget_id' not in params:
        return []

    budget_data = []
    try:
        q = Query(
            'SELECT bdgt_id, bdgt_naam, bdgt_minimum, bdgt_current, bdgt_ver_id FROM tblbudget WHERE bdgt_id = %s'
        )
    except DatabaseError:
        raise InternalServerError

    for budget_id in params['budget_id']:
        try:
            q.run((budget_id, ))
            cur_result = q.rows()
        except DatabaseError:
            raise InternalServerError

        for row in cur_result:
            if not hasPermission(params, 'budget', row[4]):
                continue

            budget_data.append({
                'id': row[0],
                'vereniging_id': row[4],
                'naam': row[1],
                'current': row[3],
                'minimum': row[2]
            })

    return budget_data
コード例 #2
0
def handle_login(params, json_data):
    if (not _check_flood_protect(params['ip'][0])):
        return (False, '')
    if 'username' not in params or 'password' not in params:
        return (False, '')

    try:
        q = Query(
            'SELECT gebr_id, gebr_wachtwoord FROM tblgebruiker WHERE gebr_naam = %s'
        )
        q.run((params['username'][0], ))
        results = q.rows()
    except DatabaseError:
        raise InternalServerError

    if (len(results) != 1):
        _add_flood_protect(params['ip'][0])
        return (False, '')
    if not sha512_crypt.verify(params['password'][0], results[0][1]):
        _add_flood_protect(params['ip'][0])
        return (False, '')

    #Generate session key
    session_key = _create_session(params['ip'][0], results[0][0])

    return (True, session_key)
コード例 #3
0
ファイル: madmin_factuur.py プロジェクト: davidv1992/madmin
def handle_factuur(params, json_data):
	if 'factuur_id' not in params:
		return None
	
	try:
		q = Query("""SELECT fac_id, fac_cor_op_id, fac_type, fac_ver_id,
		             fac_leverancier, fac_volgnummer, fac_factuurdatum, 
		             fac_leverdatum, fac_verantwoordelijke, fac_saldo_speciaal,
		             fac_saldo_basis, fac_saldo_speciaal_na, fac_saldo_basis_na,
		             frgl_type, prd_naam, frgl_omschrijving, frgl_aantal,
		             frgl_stukprijs, frgl_totprijs, frgl_btw, vrd_prd_id
		             FROM tblfactuur
		             LEFT JOIN tblfactuurregel ON fac_id = frgl_fac_id
		             LEFT JOIN tblvoorraad on frgl_vrd_id = vrd_id
		             LEFT JOIN tblproduct on vrd_prd_id = prd_id
		             WHERE fac_id = %s
		             ORDER BY fac_id""")
	except DatabaseError:
		raise InternalServerError
	
	result = []
	
	for fac_id in params['factuur_id']:
		try:
			q.run((fac_id,))
			regels = q.rows()
		except DatabaseError:
			raise InternalServerError
		
		result.extend(convert_factuur_rows(params, regels))
	
	return result
コード例 #4
0
ファイル: madmin_budget.py プロジェクト: davidv1992/madmin
def handle_budget(params, json_data):
	if 'budget_id' not in params:
		return []

	budget_data = []	
	try:
		q = Query('SELECT bdgt_id, bdgt_naam, bdgt_minimum, bdgt_current, bdgt_ver_id FROM tblbudget WHERE bdgt_id = %s')
	except DatabaseError:
		raise InternalServerError
			
	for budget_id in params['budget_id']:	
		try:
			q.run((budget_id,))
			cur_result = q.rows()
		except DatabaseError:
			raise InternalServerError

		for row in cur_result:
			if not hasPermission(params, 'budget', row[4]):
				continue
			
			budget_data.append({
				'id': row[0], 
				'vereniging_id': row[4], 
				'naam': row[1], 
				'current': row[3], 
				'minimum': row[2]})
	
	return budget_data
コード例 #5
0
def handle_product(params, json_data):
    if 'product_id' not in params:
        return []

    result = []

    try:
        q_prod = Query("""SELECT prd_id, prd_naam, prd_type, prd_btw,
                                         prd_kantineprijs_leden, prd_kantineprijs_extern,
                                         prd_borrelmarge, prd_leverancier_id,
                                         prd_emballageprijs
                                  FROM tblproduct WHERE prd_verwijderd = 0
                                  AND prd_id = %s
                                  ORDER BY prd_id""")
        q_rel = Query("""SELECT prdrel_orig_prd_id, prdrel_rel_prd_id,
                                    prdrel_aantal
                             FROM tblproductrelation
                             WHERE prdrel_orig_prd_id = %s
                             ORDER BY prdrel_orig_prd_id""")
    except DatabaseError:
        raise InternalServerError

    for prd_id in params['product_id']:
        try:
            q_prod.run((prd_id,))
            rows_prod = q_prod.rows()

            q_rel.run((prd_id,))
            rows_rel = q_rel.rows()
        except DatabaseError:
            raise InternalServerError

        result += _convert_product_rows(rows_prod, rows_rel)

    return result
コード例 #6
0
def handle_factuur(params, json_data):
    if 'factuur_id' not in params:
        return None

    try:
        q = Query("""SELECT fac_id, fac_cor_op_id, fac_type, fac_ver_id,
		             fac_leverancier, fac_volgnummer, fac_factuurdatum, 
		             fac_leverdatum, fac_verantwoordelijke, fac_saldo_speciaal,
		             fac_saldo_basis, fac_saldo_speciaal_na, fac_saldo_basis_na,
		             frgl_type, prd_naam, frgl_omschrijving, frgl_aantal,
		             frgl_stukprijs, frgl_totprijs, frgl_btw, vrd_prd_id
		             FROM tblfactuur
		             LEFT JOIN tblfactuurregel ON fac_id = frgl_fac_id
		             LEFT JOIN tblvoorraad on frgl_vrd_id = vrd_id
		             LEFT JOIN tblproduct on vrd_prd_id = prd_id
		             WHERE fac_id = %s
		             ORDER BY fac_id""")
    except DatabaseError:
        raise InternalServerError

    result = []

    for fac_id in params['factuur_id']:
        try:
            q.run((fac_id, ))
            regels = q.rows()
        except DatabaseError:
            raise InternalServerError

        result.extend(convert_factuur_rows(params, regels))

    return result
コード例 #7
0
ファイル: madmin_factuur.py プロジェクト: kashout/madmin
def edit_factuur(fac_id, factuur, regels_add):
    leverancier = None
    if 'leverancier' in factuur:
        leverancier = factuur['leverancier']
    vereniging = None
    saldo_basis = None
    if 'vereniging' in factuur:
        vereniging = factuur['vereniging']
        saldo_basis=query_vereniging(vereniging)[0]['basis_budget']
    saldo_speciaal = None
    if 'saldo_speciaal' in factuur:
        saldo_speciaal = factuur['saldo_speciaal']
    verantwoordelijke = None
    if 'verantwoordelijke' in factuur:
        verantwoordelijke = factuur['verantwoordelijke']

    # Process lines
    factuur_bedrag = 0
    regels_processed = []
    for regel in regels_add:
        factuur_bedrag += process_factuur_regel(regel, fac_id, regels_processed)

    # Finish up
    if saldo_basis is not None:
        budget_update(saldo_basis, factuur_bedrag)
        try:
            q = Query("""UPDATE tblfactuur SET fac_saldo_basis_na = fac_saldo_basis_na + %s WHERE fac_leverancier = %s and fac_vereniging = %s and fac_volgnummer >= %s""")
            q.run((factuur_bedrag, leverancier, vereniging, factuur['volgnummer']))
        except DatabaseError:
            raise InternalServerError
    return fac_id
コード例 #8
0
def add_voorraad(prd_id, stukprijs, btw, aantal):
    try:
        q = Query("""INSERT INTO tblvoorraad (vrd_prd_id, vrd_datum, vrd_aantal, vrd_resterend, vrd_stukprijs, vrd_btw)
                     VALUES (%s, CURDATE(), %s, %s, %s, %s)""")
        q.run((prd_id, aantal, aantal, stukprijs, btw))
        return q.lastrowid()
    except DatabaseError:
        raise InternalServerError
コード例 #9
0
def budget_update(budget_id, value_change):
    try:
        q = Query(
            'UPDATE tblbudget SET bdgt_current = bdgt_current + %s WHERE bdgt_id = %s'
        )
        q.run((value_change, budget_id))
    except DatabaseError:
        raise InternalServerError
コード例 #10
0
ファイル: madmin_barcodes.py プロジェクト: davidv1992/madmin
def handle_barcodes(params, json_data):
	try:
		log.debug("Fetching barcode table.")
		q = Query("SELECT bar_ean, bar_prd_id FROM tblbarcode")
		q.run()
		log.debug("Fetching rows.")
		rows = q.rows()
		log.debug("Rows: %s", rows)
		return rows
	except DatabaseError:
		raise InternalServerError
コード例 #11
0
def handle_barcodes(params, json_data):
    try:
        log.debug("Fetching barcode table.")
        q = Query("SELECT bar_ean, bar_prd_id FROM tblbarcode")
        q.run()
        log.debug("Fetching rows.")
        rows = q.rows()
        log.debug("Rows: %s", rows)
        return rows
    except DatabaseError:
        raise InternalServerError
コード例 #12
0
def budget_vereniging_query(vereniging_id):
    try:
        q = Query('SELECT bdgt_id FROM tblbudget WHERE bdgt_ver_id = %s')
        q.run((vereniging_id, ))
        result = q.rows()
    except DatabaseError:
        raise InternalServerError

    budget_ids = []

    for row in result:
        budget_ids.append(result[0][0])

    return budget_ids
コード例 #13
0
ファイル: madmin_user.py プロジェクト: davidv1992/madmin
def handle_adduser(params, json_data):
	if not hasPermission(params, "user_create", None):
		return False
	
	if 'username' not in params or 'password' not in params:
		return False
	
	try:
		q = Query('INSERT INTO tblgebruikers (gebr_naam, gebr_wachtwoord) VALUES (%s, %s)')
		q.run((params['username'][0], sha512_crypt.encrypt(params['password'][0])))
	except DatabaseError:
		raise InternalServerError
	
	return True
コード例 #14
0
ファイル: madmin_budget.py プロジェクト: davidv1992/madmin
def budget_vereniging_query(vereniging_id):
	try:
		q = Query('SELECT bdgt_id FROM tblbudget WHERE bdgt_ver_id = %s')
		q.run((vereniging_id,))
		result = q.rows()
	except DatabaseError:
		raise InternalServerError
	
	budget_ids = []
	
	for row in result:
		budget_ids.append(result[0][0])
	
	return budget_ids
コード例 #15
0
def handle_adduser(params, json_data):
    if not hasPermission(params, "user_create", None):
        return False

    if 'username' not in params or 'password' not in params:
        return False

    try:
        q = Query(
            'INSERT INTO tblgebruikers (gebr_naam, gebr_wachtwoord) VALUES (%s, %s)'
        )
        q.run((params['username'][0],
               sha512_crypt.encrypt(params['password'][0])))
    except DatabaseError:
        raise InternalServerError

    return True
コード例 #16
0
ファイル: madmin_user.py プロジェクト: davidv1992/madmin
def handle_users(params, json_data):
	if not hasPermission(params, "user_list", None):
		return []
	
	try:
		q = Query('SELECT gebr_id, gebr_naam FROM tblgebruiker')
		q.run()
		results = q.rows()
	except DatabaseError:
		raise InternalServerError
	
	resList = []
	
	for row in results:
		resList.append({'id': row[0], 'naam': row[1]})
	
	return resList
コード例 #17
0
def handle_kantine(params, json_data):
    try:
        q = Query("""SELECT prd_id, prd_naam, prd_kantineprijs_leden,
                                    prd_kantineprijs_extern
                     FROM tblproduct
                     WHERE prd_verwijderd = 0 AND prd_type = %s""")
        q.run((policy.product_type_kantine,))
        rows = q.rows()
    except DatabaseError:
        raise InternalServerError

    result = []

    for product in rows:
        result.append({'id':product[0], 'naam':product[1], 'prijs_leden':product[2], 'prijs_extern':product[3]})

    return result
コード例 #18
0
def handle_users(params, json_data):
    if not hasPermission(params, "user_list", None):
        return []

    try:
        q = Query('SELECT gebr_id, gebr_naam FROM tblgebruiker')
        q.run()
        results = q.rows()
    except DatabaseError:
        raise InternalServerError

    resList = []

    for row in results:
        resList.append({'id': row[0], 'naam': row[1]})

    return resList
コード例 #19
0
def use_voorraad(prd_id, aantal):
    cur_voorraad = query_voorraad(prd_id)

    i = 0
    result = []

    while aantal != 0:
        if (i > len(cur_voorraad)):
            raise VoorraadTekortError
        if (cur_voorraad[i]['resterend'] > aantal):
            deel_aantal = aantal
        else:
            deel_aantal = cur_voorraad[i]['resterend']

        cur_voorraad[i]['gebruikt'] = deel_aantal

        aantal -= deel_aantal
        result.append({
            'aantal': deel_aantal,
            'stukprijs': cur_voorraad[i]['stukprijs'],
            'btw': cur_voorraad[i]['btw'],
            'id': cur_voorraad[i]['id']
        })

        i += 1

    try:
        q = Query(
            """UPDATE tblvoorraad SET vrd_resterend = %s WHERE vrd_id = %s""")
    except DatabaseError:
        raise InternalServerError

    i = 0
    while i < len(cur_voorraad) and 'gebruikt' in cur_voorraad[i]:
        try:
            q.run((cur_voorraad[i]['resterend'] - cur_voorraad[i]['gebruikt'],
                   cur_voorraad[i]['id']))
        except DatabaseError:
            raise InternalServerError
            # Try to think up a way of making this more robust against partial execution of query

        i += 1

    return result
コード例 #20
0
ファイル: madmin_voorraad.py プロジェクト: kashout/madmin
def use_voorraad(prd_id, aantal):
    cur_voorraad = query_voorraad(prd_id)

    i=0
    result = []

    while aantal != 0:
        if (i > len(cur_voorraad)):
            raise VoorraadTekortError
        if (cur_voorraad[i]['resterend'] > aantal):
            deel_aantal = aantal
        else:
            deel_aantal = cur_voorraad[i]['resterend']

        cur_voorraad[i]['gebruikt'] = deel_aantal

        aantal -= deel_aantal
        result.append({
                'aantal': deel_aantal,
                'stukprijs': cur_voorraad[i]['stukprijs'],
                'btw': cur_voorraad[i]['btw'],
                'id': cur_voorraad[i]['id']
        })

        i += 1


    try:
        q = Query("""UPDATE tblvoorraad SET vrd_resterend = %s WHERE vrd_id = %s""")
    except DatabaseError:
        raise InternalServerError

    i=0
    while i < len(cur_voorraad) and 'gebruikt' in cur_voorraad[i]:
        try:
            q.run((cur_voorraad[i]['resterend'] - cur_voorraad[i]['gebruikt'], cur_voorraad[i]['id']))
        except DatabaseError:
            raise InternalServerError
            # Try to think up a way of making this more robust against partial execution of query

        i += 1

    return result
コード例 #21
0
def handle_product_all(params, json_data):
    try:
        q_prod = Query("""SELECT prd_id, prd_naam, prd_type, prd_btw,
                                 prd_kantineprijs_leden, prd_kantineprijs_extern,
                                 prd_borrelmarge, prd_leverancier_id,
                                 prd_emballageprijs
                          FROM tblproduct WHERE prd_verwijderd = 0
                          ORDER BY prd_id""")
        q_prod.run()
        rows_prod = q_prod.rows()

        q_rel = Query("""SELECT prdrel_orig_prd_id, prdrel_rel_prd_id,
                                prdrel_aantal
                         FROM tblproductrelation
                         ORDER BY prdrel_orig_prd_id""")
        q_rel.run()
        rows_rel = q_rel.rows()
    except DatabaseError:
        raise InternalServerError

    return _convert_product_rows(rows_prod, rows_rel)
コード例 #22
0
ファイル: madmin_user.py プロジェクト: davidv1992/madmin
def handle_setpassword(params, json_data):
	if 'id' in params:
		gebr_id = params['id'][0]
	else:
		gebr_id = getLoginId(params)
	
	if gebr_id is None:
		log.debug("No gebr_id available.")
		return False
	
	if 'password' not in params:
		log.debug("No password available.")
		return False
	
	try:
		q = Query('UPDATE tblgebruiker SET gebr_wachtwoord = %s WHERE gebr_id = %s')
		q.run((sha512_crypt.encrypt(params['password'][0]), gebr_id))
	except DatabaseError:
		raise InternalServerError
	
	return True
コード例 #23
0
ファイル: madmin_budget.py プロジェクト: davidv1992/madmin
def budget_query(budget_id):
	try:
		q = Query("""SELECT bdgt_id, bdgt_current, bdgt_minimum, bdgt_ver_id, bdgt_naam
		             FROM tblbudget
		             WHERE bdgt_id = %s""")
		q.run((budget_id,))
		rows = q.rows()
	except DatabaseError:
		raise InternalServerError
		
	result = []
	for row in rows:
		result.append({
			'budget_id': row[0],
			'vereniging_id': row[3],
			'minimum': row[2],
			'current': row[1],
			'naam': row[4]
		})
	
	return result
コード例 #24
0
def query_product(prd_id):
    log.debug("Query for product %s", prd_id)
    try:
        q_prod = Query("""SELECT prd_id, prd_naam, prd_type, prd_btw,
                                 prd_kantineprijs_leden, prd_kantineprijs_extern,
                                 prd_borrelmarge, prd_leverancier_id,
                                 prd_emballageprijs
                          FROM tblproduct WHERE prd_verwijderd = 0 AND prd_id = %s""")
        q_prod.run((prd_id,))
        rows_prod = q_prod.rows()

        q_rel = Query("""SELECT prdrel_orig_prd_id, prdrel_rel_prd_id
                                prdrel_aantal
                         FROM tblproductrelation
                         WHERE prdrel_orig_prd_id = %s""")
        q_rel.run((prd_id,))
        rows_rel = q_rel.rows()
    except DatabaseError:
        raise InternalServerError

    return _convert_product_rows(rows_prod, rows_rel)
コード例 #25
0
def _create_session(ip, user):
    session_key = b64encode(urandom(8))
    try:
        q = Query(
            'DELETE FROM tblsession WHERE ses_id = %s OR ses_timelim < NOW()')
        q.run((session_key, ))
        qu = Query(
            'INSERT INTO tblsession (ses_id, ses_timelim, ses_gebr_id, ses_ip) VALUES (%s, NOW() + INTERVAL %s MINUTE, %s, %s)'
        )
        qu.run((session_key, config.timeout, user, ip))
    except DatabaseError:
        raise InternalServerError

    return session_key
コード例 #26
0
def _check_flood_protect(ip):
    try:
        q = Query(
            'SELECT fc_ammount FROM tblfloodcontrol WHERE fc_ip = %s AND fc_timelim > NOW()'
        )
        q.run((ip, ))
        rows = q.rows()
        if len(rows) == 0:
            return True
        elif rows[0][0] < config.flood_maxAmmount:
            return True
        qu = Query(
            'UPDATE tblfloodcontrol set fc_timelim = NOW() + INTERVAL %s MINUTE'
        )
        qu.run((ip, config.flood_timeout))
        return False
    except DatabaseError:
        raise InternalServerError
コード例 #27
0
def handle_setpassword(params, json_data):
    if 'id' in params:
        gebr_id = params['id'][0]
    else:
        gebr_id = getLoginId(params)

    if gebr_id is None:
        log.debug("No gebr_id available.")
        return False

    if 'password' not in params:
        log.debug("No password available.")
        return False

    try:
        q = Query(
            'UPDATE tblgebruiker SET gebr_wachtwoord = %s WHERE gebr_id = %s')
        q.run((sha512_crypt.encrypt(params['password'][0]), gebr_id))
    except DatabaseError:
        raise InternalServerError

    return True
コード例 #28
0
def query_vereniging(ver_id):
    try:
        q = Query("""SELECT ver_id, ver_naam, ver_email, ver_basis_budget_id
		             FROM tblvereniging
		             WHERE ver_id=%s""")
        q.run((ver_id, ))
        result = q.rows()
    except DatabaseError:
        raise InternalServerError

    ver_overview = []

    for row in result:

        ver_overview.append({
            'id': row[0],
            'naam': row[1],
            'email': row[2],
            'basis_budget': row[3]
        })

    return ver_overview
コード例 #29
0
def query_vereniging(ver_id):
	try:
		q = Query("""SELECT ver_id, ver_naam, ver_email, ver_basis_budget_id
		             FROM tblvereniging
		             WHERE ver_id=%s""")
		q.run((ver_id,))
		result = q.rows()
	except DatabaseError:
		raise InternalServerError
	
	ver_overview = []
	
	for row in result:
		
		ver_overview.append({
			'id': row[0],
			'naam': row[1],
			'email': row[2],
			'basis_budget': row[3]
		})
	
	return ver_overview
コード例 #30
0
def budget_query(budget_id):
    try:
        q = Query(
            """SELECT bdgt_id, bdgt_current, bdgt_minimum, bdgt_ver_id, bdgt_naam
                     FROM tblbudget
                     WHERE bdgt_id = %s""")
        q.run((budget_id, ))
        rows = q.rows()
    except DatabaseError:
        raise InternalServerError

    result = []
    for row in rows:
        result.append({
            'budget_id': row[0],
            'vereniging_id': row[3],
            'minimum': row[2],
            'current': row[1],
            'naam': row[4]
        })

    return result
コード例 #31
0
def query_voorraad(prd_id):
    try:
        q = Query("""SELECT vrd_id, vrd_datum, vrd_resterend, vrd_stukprijs, vrd_btw
                     FROM tblvoorraad
                     WHERE vrd_resterend <> 0 AND vrd_prd_id = %s""")
        q.run((prd_id,))
        rows = q.rows()
    except DatabaseError:
        raise InternalServerError

    result = []

    for row in rows:
        result.append({
            'id': row[0],
            'datum': row[1],
            'resterend': row[2],
            'stukprijs': row[3],
            'btw': row[4]
        })

    return policy.voorraad_order(result)
コード例 #32
0
def handle_verenigingen(params, json_data):
	try:
		q = Query("""SELECT ver_id, ver_naam, ver_email, ver_basis_budget_id 
		             FROM tblvereniging""")
		q.run();
		rows = q.rows()
	except DatabaseError:
		raise InternalServerError
	
	ver_overview = []
	
	for row in rows:
		if not hasPermission(params, 'vereniging', row[0]):
			continue
		
		ver_overview.append({
			'id': row[0],
			'naam': row[1],
			'email': row[2],
			'basis_budget': row[3]
		})
	
	return ver_overview
コード例 #33
0
def handle_verenigingen(params, json_data):
    try:
        q = Query("""SELECT ver_id, ver_naam, ver_email, ver_basis_budget_id 
		             FROM tblvereniging""")
        q.run()
        rows = q.rows()
    except DatabaseError:
        raise InternalServerError

    ver_overview = []

    for row in rows:
        if not hasPermission(params, 'vereniging', row[0]):
            continue

        ver_overview.append({
            'id': row[0],
            'naam': row[1],
            'email': row[2],
            'basis_budget': row[3]
        })

    return ver_overview
コード例 #34
0
ファイル: madmin_user.py プロジェクト: davidv1992/madmin
def handle_login(params, json_data):
	if (not _check_flood_protect(params['ip'][0])):
		return (False, '')
	if 'username' not in params or 'password' not in params:
		return (False,'')
	
	try:
		q = Query('SELECT gebr_id, gebr_wachtwoord FROM tblgebruiker WHERE gebr_naam = %s')
		q.run((params['username'][0],))
		results = q.rows()
	except DatabaseError:
		raise InternalServerError
	
	if (len(results) != 1):
		_add_flood_protect(params['ip'][0])
		return (False,'')
	if not sha512_crypt.verify(params['password'][0], results[0][1]):
		_add_flood_protect(params['ip'][0])
		return (False,'')
	
	#Generate session key
	session_key = _create_session(params['ip'][0], results[0][0])
	
	return (True, session_key)
コード例 #35
0
ファイル: madmin_user.py プロジェクト: davidv1992/madmin
def _check_flood_protect(ip):
	try:
		q = Query('SELECT fc_ammount FROM tblfloodcontrol WHERE fc_ip = %s AND fc_timelim > NOW()')
		q.run((ip,))
		rows = q.rows()
		if len(rows) == 0:
			return True
		elif rows[0][0] < config.flood_maxAmmount:
			return True
		qu = Query('UPDATE tblfloodcontrol set fc_timelim = NOW() + INTERVAL %s MINUTE')
		qu.run((ip,config.flood_timeout))
		return False
	except DatabaseError:
		raise InternalServerError
コード例 #36
0
ファイル: madmin_user.py プロジェクト: davidv1992/madmin
def _create_session(ip, user):
	session_key = b64encode(urandom(8))
	try:
		q = Query('DELETE FROM tblsession WHERE ses_id = %s OR ses_timelim < NOW()')
		q.run((session_key,))
		qu = Query('INSERT INTO tblsession (ses_id, ses_timelim, ses_gebr_id, ses_ip) VALUES (%s, NOW() + INTERVAL %s MINUTE, %s, %s)')
		qu.run((session_key, config.timeout, user, ip))
	except DatabaseError:
		raise InternalServerError
	
	return session_key
コード例 #37
0
def _verify_session(ip, session_key):
    if (not _check_flood_protect(ip)):
        return False

    try:
        q = Query(
            'SELECT ses_gebr_id FROM tblsession WHERE ses_id = %s AND ses_ip = %s AND ses_timelim > NOW()'
        )
        q.run((session_key, ip))
        rows = q.rows()
        qu = Query(
            'UPDATE tblsession SET ses_timelim = NOW() + INTERVAL %s MINUTE WHERE ses_timelim > NOW() AND ses_id = %s AND ses_ip = %s'
        )
        qu.run((config.timeout, session_key, ip))
    except DatabaseError:
        raise InternalServerError

    if len(rows) == 0:
        _add_flood_protect(ip)
        return False

    return rows[0][0]
コード例 #38
0
ファイル: madmin_user.py プロジェクト: davidv1992/madmin
def _verify_session(ip, session_key):
	if (not _check_flood_protect(ip)):
		return False
	
	try:
		q = Query('SELECT ses_gebr_id FROM tblsession WHERE ses_id = %s AND ses_ip = %s AND ses_timelim > NOW()')
		q.run((session_key, ip))
		rows = q.rows()
		qu = Query('UPDATE tblsession SET ses_timelim = NOW() + INTERVAL %s MINUTE WHERE ses_timelim > NOW() AND ses_id = %s AND ses_ip = %s')
		qu.run((config.timeout, session_key, ip))
	except DatabaseError:
		raise InternalServerError
	
	if len(rows) == 0:
		_add_flood_protect(ip)
		return False
	
	return rows[0][0]
コード例 #39
0
def _add_flood_protect(ip):
    try:
        qr = Query('DELETE FROM tblfloodcontrol WHERE fc_timelim < NOW()')
        qr.run()
        q = Query('SELECT fc_ip FROM tblfloodcontrol WHERE fc_ip = %s')
        q.run((ip, ))
        rows = q.rows()
        if (len(rows) != 0):
            qu = Query(
                'UPDATE tblfloodcontrol SET fc_ammount = fc_ammount+1, fc_timelim = NOW() + INTERVAL %s MINUTE WHERE fc_ip = %s'
            )
            qu.run((config.flood_timeout, ip))
        else:
            qu = Query(
                'INSERT into tblfloodcontrol (fc_ip, fc_ammount, fc_timelim) VALUES (%s, 1, NOW() + INTERVAL %s MINUTE)'
            )
            qu.run((ip, config.flood_timeout))
    except DatabaseError:
        raise InternalServerError
コード例 #40
0
ファイル: madmin_factuur.py プロジェクト: davidv1992/madmin
def process_factuur(factuur):
	# Gen. nones for possible non-existent values
	leverancier = None
	if 'leverancier' in factuur:
		leverancier = factuur['leverancier']
	vereniging = None
	saldo_basis = None
	if 'vereniging' in factuur:
		vereniging = factuur['vereniging']
		saldo_basis=query_vereniging(vereniging)[0]['basis_budget']
	saldo_speciaal = None
	if 'saldo_speciaal' in factuur:
		saldo_speciaal = factuur['saldo_speciaal']
	verantwoordelijke = None
	if 'verantwoordelijke' in factuur:
		verantwoordelijke = factuur['verantwoordelijke']
	
	# Generate next number for factuur
	try:
		q = Query("""SELECT MAX(fac_volgnummer)
		             FROM tblfactuur, tblboekjaar
		             WHERE fac_ver_id <=> %s AND fac_leverancier <=> %s 
		             AND fac_bkjr_id=bkjr_id AND bkjr_is_huidig = -1""")
		q.run((vereniging, leverancier))
		rows = q.rows()
	except DatabaseError:
		raise InternalServerError
	if rows[0][0] is None:
		number = 1
	else:
		number = rows[0][0] + 1
	
	factuur['volgnummer'] = number
	
	# Create factuur entry
	try:
		q = Query("""INSERT INTO tblfactuur (fac_ver_id, 
		                                     fac_leverancier,
		                                     fac_type,
		                                     fac_volgnummer,
		                                     fac_factuurdatum,
		                                     fac_leverdatum,
		                                     fac_verantwoordelijke,
		                                     fac_saldo_speciaal,
		                                     fac_saldo_basis,
		                                     fac_bkjr_id) 
		             VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s,
		                    (SELECT bkjr_id FROM tblboekjaar
		                     WHERE bkjr_is_huidig = -1))""")
		q.run((vereniging,
		       leverancier,
		       factuur['type'],
		       number,
		       factuur['factuurdatum'],
		       factuur['leverdatum'],
		       verantwoordelijke,
		       saldo_speciaal,
		       saldo_basis));
		fac_id = q.lastrowid()
	except DatabaseError:
		raise InternalServerError
	
	log.debug('factuur created with id: %d', fac_id)
	
	# Pocess lines (first inkoop then verkoop)
	factuur_bedrag = 0
	regels_processed = []
	for regel in factuur['regels']:
		if regel['aantal'] < 0:
			factuur_bedrag += process_factuur_regel(regel, fac_id, regels_processed)
	for regel in factuur['regels']:
		if regel['aantal'] >= 0:
			factuur_bedrag += process_factuur_regel(regel, fac_id, regels_processed)
	
	factuur['regels'] = regels_processed
	
	# Finish up
	if saldo_speciaal is not None:
		budget_speciaal = budget_query(saldo_speciaal)[0]
		mutatie_speciaal = max(factuur_bedrag, 
		               budget_speciaal['minimum'] - budget_speciaal['current'])
		mutatie_basis = factuur_bedrag - mutatie_speciaal
		budget_update(saldo_speciaal, mutatie_speciaal)
		budget_update(saldo_basis, mutatie_basis)
		budget_speciaal = budget_query(saldo_speciaal)[0]
		budget_basis = budget_query(saldo_basis)[0]
		factuur['saldo_basis_na'] = budget_basis['current']
		factuur['saldo_speciaal_na'] = budget_speciaal['current']
		try:
			q = Query("""UPDATE tblfactuur SET saldo_speciaal_na = %s
			                                   saldo_basis_na = %s
			                               WHERE fac_id = %s""")
			q.run((budget_speciaal['current'], budget_basis['current'], fac_id))
		except DatabaseError:
			raise InternalServerError
	elif saldo_basis is not None:
		budget_update(saldo_basis, factuur_bedrag)
		budget_basis = budget_query(saldo_basis)[0]
		factuur['saldo_basis_na'] = budget_basis['current']
		try:
			q = Query("""UPDATE tblfactuur SET fac_saldo_basis_na = %s
			                               WHERE fac_id = %s""")
			q.run((budget_basis['current'], fac_id))
		except DatabaseError:
			raise InternalServerError
	
	return fac_id
コード例 #41
0
ファイル: madmin_budget.py プロジェクト: davidv1992/madmin
def budget_update(budget_id, value_change):
	try:
		q = Query('UPDATE tblbudget SET bdgt_current = bdgt_current + %s WHERE bdgt_id = %s')
		q.run((value_change, budget_id))
	except DatabaseError:
		raise InternalServerError
コード例 #42
0
ファイル: madmin_user.py プロジェクト: davidv1992/madmin
def _add_flood_protect(ip):
	try:
		qr = Query('DELETE FROM tblfloodcontrol WHERE fc_timelim < NOW()')
		qr.run()
		q = Query('SELECT fc_ip FROM tblfloodcontrol WHERE fc_ip = %s')
		q.run((ip,))
		rows = q.rows()
		if (len(rows) != 0):
			qu = Query('UPDATE tblfloodcontrol SET fc_ammount = fc_ammount+1, fc_timelim = NOW() + INTERVAL %s MINUTE WHERE fc_ip = %s')
			qu.run((config.flood_timeout, ip))
		else:
			qu = Query('INSERT into tblfloodcontrol (fc_ip, fc_ammount, fc_timelim) VALUES (%s, 1, NOW() + INTERVAL %s MINUTE)')
			qu.run((ip, config.flood_timeout))
	except DatabaseError:
		raise InternalServerError
コード例 #43
0
ファイル: madmin_factuur.py プロジェクト: davidv1992/madmin
def process_factuur_regel_inkoop(regel, factuur_id, regels_processed):
	if 'product_id' in regel:
		product = query_product(regel['product_id'])[0]
		
		if 'btw' not in regel:
			regel['btw'] = product['btw']
		
		if 'stukprijs' not in regel:
			regel['stukprijs'] = regel['totaalprijs'] / (-regel['aantal'])
			if regel['totaalprijs'] % (-regel['aantal']):
				regel['stukprijs'] += 1
		
		if 'totaalprijs' not in regel:
			regel['totaalprijs'] = regel['stukprijs'] * (-regel['aantal'])
		
		btw = regel['totaalprijs']*regel['btw']/(1000+regel['btw'])
		if regel['totaalprijs']*regel['btw'] % (1000+regel['btw']) > (999+regel['btw'])/2:
			btw += 1
		
		
		stukprijs_voorraad = regel['stukprijs']
		if 'borrelmarge' in product:
			stukprijs_voorraad = (stukprijs_voorraad * (1000+product['borrelmarge']))/1000
			if (stukprijs_voorraad * (1000+product['borrelmarge']))%1000 > 0:
				stukprijs_voorraad += 1
		vrd_id = add_voorraad(regel['product_id'], stukprijs_voorraad, regel['btw'], -regel['aantal'])
		
		try:
			q = Query("""INSERT INTO tblfactuurregel (
			                 frgl_fac_id, frgl_type,
			                 frgl_vrd_id, frgl_aantal, frgl_stukprijs,
			                 frgl_totprijs, frgl_btw)
			             VALUES (
			                 %s, 0,
			                 %s, %s, %s,
			                 %s, %s)""")
			q.run((factuur_id, vrd_id, regel['aantal'], regel['stukprijs'],
			       regel['totaalprijs'], btw))
		except DatabaseError:
			raise InternalServerError
		
		regels_processed.append(regel)
			
		return regel['totaalprijs']
	else:
		if 'stukprijs' not in regel:
			regel['stukprijs'] = regel['totaalprijs'] / (-regel['aantal'])
			if regel['totaalprijs'] % (-regel['aantal']):
				regel['stukprijs'] += 1
		
		if 'totaalprijs' not in regel:
			regel['totaalprijs'] = regel['stukprijs'] * (-regel['aantal'])
		
		btw = regel['totaalprijs']*regel['btw']/(1000+regel['btw'])
		if regel['totaalprijs']*regel['btw'] % (1000+regel['btw']) > (999+regel['btw'])/2:
			btw += 1
		
		try:
			q = Query("""INSERT INTO tblfactuurregel (
			                 frgl_fac_id, frgl_type,
			                 frgl_omschrijving, frgl_aantal,
			                 frgl_stukprijs, frgl_totprijs,
			                 frgl_btw)
			             VALUES (
			                 %s, 0,
			                 %s, %s,
			                 %s, %s,
			                 %s)""")
			q.run((factuur_id, regel['naam'], regel['aantal'],
			       regel['stukprijs'], regel['totaalprijs'],
			       btw))
		except DatabaseError:
			raise InternalServerError
		regels_processed.append(regel)
		return regel['totaalprijs']
コード例 #44
0
ファイル: madmin_factuur.py プロジェクト: davidv1992/madmin
def process_factuur_regel_verkoop(regel, factuur_id, regels_processed):
	if 'product_id' in regel:
		verbruik = use_voorraad(regel['product_id'], regel['aantal'])
		try:
			q = Query("""INSERT INTO tblfactuurregel (
			                 frgl_fac_id, frgl_type,
			                 frgl_vrd_id, frgl_aantal, frgl_stukprijs,
			                 frgl_totprijs, frgl_btw)
			             VALUES (
			                 %s, 0,
			                 %s, %s, %s,
			                 %s, %s)""")
		except DatabaseError:
			raise InternalServerError
		
		c_totaalprijs = 0
		for vc in verbruik:
			totaalprijs = vc['stukprijs'] * vc['aantal']
			btw = totaalprijs*vc['btw']/(1000+vc['btw'])
			if totaalprijs*vc['btw']%(1000+vc['btw']) > (999+vc['btw'])/2:
				btw += 1
			try:
				q.run((factuur_id, vc['id'], vc['aantal'],
				       vc['stukprijs'], totaalprijs, btw))
			except DatabaseError:
				raise InternalServerError
			regels_processed.append({'product_id': regel['product_id'],
									'aantal': vc['aantal'],
									'stukprijs': vc['stukprijs'],
									'totaalprijs': totaalprijs})
			c_totaalprijs += totaalprijs
			
		return c_totaalprijs
	else:
		if 'totaalprijs' not in regel:
			regel['totaalprijs'] = regel['stukprijs'] * regel['aantal']
		
		if 'stukprijs' not in regel:
			regel['stukprijs'] = regel['totaalprijs'] / regel['aantal']
			if regel['totaalprijs'] % regel['aantal'] > 0:
				regel['stukprijs']+=1
		
		btwperc = regel['btw']
		regel['btw'] = regel['totaalprijs']*btwperc/(1000+btwperc)
		if regel['totaalprijs']*btwperc % (1000+btwperc) > (999+btwperc)/2:
			regel['btw']+=1
		
		try:
			q = Query("""INSERT INTO tblfactuurregel (
			                 frgl_fac_id, frgl_type,
			                 frgl_omschrijving, frgl_aantal,
			                 frgl_stukprijs, frgl_totprijs,
			                 frgl_btw)
			             VALUES (
			                 %s, 0,
			                 %s, %s,
			                 %s, %s,
			                 %s)""")
			q.run((factuur_id, regel['naam'], regel['aantal'],
			       regel['stukprijs'], regel['totaalprijs'],
			       regel['btw']))
		except DatabaseError:
			raise InternalServerError
			
		regels_processed.append(regel)
		return regel['totaalprijs']
コード例 #45
0
def process_factuur(factuur):
    # Gen. nones for possible non-existent values
    leverancier = None
    if 'leverancier' in factuur:
        leverancier = factuur['leverancier']
    vereniging = None
    saldo_basis = None
    if 'vereniging' in factuur:
        vereniging = factuur['vereniging']
        saldo_basis = query_vereniging(vereniging)[0]['basis_budget']
    saldo_speciaal = None
    if 'saldo_speciaal' in factuur:
        saldo_speciaal = factuur['saldo_speciaal']
    verantwoordelijke = None
    if 'verantwoordelijke' in factuur:
        verantwoordelijke = factuur['verantwoordelijke']

    # Generate next number for factuur
    try:
        q = Query("""SELECT MAX(fac_volgnummer)
		             FROM tblfactuur, tblboekjaar
		             WHERE fac_ver_id <=> %s AND fac_leverancier <=> %s 
		             AND fac_bkjr_id=bkjr_id AND bkjr_is_huidig = -1""")
        q.run((vereniging, leverancier))
        rows = q.rows()
    except DatabaseError:
        raise InternalServerError
    if rows[0][0] is None:
        number = 1
    else:
        number = rows[0][0] + 1

    factuur['volgnummer'] = number

    # Create factuur entry
    try:
        q = Query("""INSERT INTO tblfactuur (fac_ver_id, 
		                                     fac_leverancier,
		                                     fac_type,
		                                     fac_volgnummer,
		                                     fac_factuurdatum,
		                                     fac_leverdatum,
		                                     fac_verantwoordelijke,
		                                     fac_saldo_speciaal,
		                                     fac_saldo_basis,
		                                     fac_bkjr_id) 
		             VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s,
		                    (SELECT bkjr_id FROM tblboekjaar
		                     WHERE bkjr_is_huidig = -1))""")
        q.run((vereniging, leverancier, factuur['type'], number,
               factuur['factuurdatum'], factuur['leverdatum'],
               verantwoordelijke, saldo_speciaal, saldo_basis))
        fac_id = q.lastrowid()
    except DatabaseError:
        raise InternalServerError

    log.debug('factuur created with id: %d', fac_id)

    # Pocess lines (first inkoop then verkoop)
    factuur_bedrag = 0
    regels_processed = []
    for regel in factuur['regels']:
        if regel['aantal'] < 0:
            factuur_bedrag += process_factuur_regel(regel, fac_id,
                                                    regels_processed)
    for regel in factuur['regels']:
        if regel['aantal'] >= 0:
            factuur_bedrag += process_factuur_regel(regel, fac_id,
                                                    regels_processed)

    factuur['regels'] = regels_processed

    # Finish up
    if saldo_speciaal is not None:
        budget_speciaal = budget_query(saldo_speciaal)[0]
        mutatie_speciaal = max(
            factuur_bedrag,
            budget_speciaal['minimum'] - budget_speciaal['current'])
        mutatie_basis = factuur_bedrag - mutatie_speciaal
        budget_update(saldo_speciaal, mutatie_speciaal)
        budget_update(saldo_basis, mutatie_basis)
        budget_speciaal = budget_query(saldo_speciaal)[0]
        budget_basis = budget_query(saldo_basis)[0]
        factuur['saldo_basis_na'] = budget_basis['current']
        factuur['saldo_speciaal_na'] = budget_speciaal['current']
        try:
            q = Query("""UPDATE tblfactuur SET saldo_speciaal_na = %s
			                                   saldo_basis_na = %s
			                               WHERE fac_id = %s""")
            q.run(
                (budget_speciaal['current'], budget_basis['current'], fac_id))
        except DatabaseError:
            raise InternalServerError
    elif saldo_basis is not None:
        budget_update(saldo_basis, factuur_bedrag)
        budget_basis = budget_query(saldo_basis)[0]
        factuur['saldo_basis_na'] = budget_basis['current']
        try:
            q = Query("""UPDATE tblfactuur SET fac_saldo_basis_na = %s
			                               WHERE fac_id = %s""")
            q.run((budget_basis['current'], fac_id))
        except DatabaseError:
            raise InternalServerError

    return fac_id
コード例 #46
0
def process_factuur_regel_inkoop(regel, factuur_id, regels_processed):
    if 'product_id' in regel:
        product = query_product(regel['product_id'])[0]

        if 'btw' not in regel:
            regel['btw'] = product['btw']

        if 'stukprijs' not in regel:
            regel['stukprijs'] = regel['totaalprijs'] / (-regel['aantal'])
            if regel['totaalprijs'] % (-regel['aantal']):
                regel['stukprijs'] += 1

        if 'totaalprijs' not in regel:
            regel['totaalprijs'] = regel['stukprijs'] * (-regel['aantal'])

        btw = regel['totaalprijs'] * regel['btw'] / (1000 + regel['btw'])
        if regel['totaalprijs'] * regel['btw'] % (1000 + regel['btw']) > (
                999 + regel['btw']) / 2:
            btw += 1

        stukprijs_voorraad = regel['stukprijs']
        if 'borrelmarge' in product:
            stukprijs_voorraad = (stukprijs_voorraad *
                                  (1000 + product['borrelmarge'])) / 1000
            if (stukprijs_voorraad *
                (1000 + product['borrelmarge'])) % 1000 > 0:
                stukprijs_voorraad += 1
        vrd_id = add_voorraad(regel['product_id'], stukprijs_voorraad,
                              regel['btw'], -regel['aantal'])

        try:
            q = Query("""INSERT INTO tblfactuurregel (
			                 frgl_fac_id, frgl_type,
			                 frgl_vrd_id, frgl_aantal, frgl_stukprijs,
			                 frgl_totprijs, frgl_btw)
			             VALUES (
			                 %s, 0,
			                 %s, %s, %s,
			                 %s, %s)""")
            q.run((factuur_id, vrd_id, regel['aantal'], regel['stukprijs'],
                   regel['totaalprijs'], btw))
        except DatabaseError:
            raise InternalServerError

        regels_processed.append(regel)

        return regel['totaalprijs']
    else:
        if 'stukprijs' not in regel:
            regel['stukprijs'] = regel['totaalprijs'] / (-regel['aantal'])
            if regel['totaalprijs'] % (-regel['aantal']):
                regel['stukprijs'] += 1

        if 'totaalprijs' not in regel:
            regel['totaalprijs'] = regel['stukprijs'] * (-regel['aantal'])

        btw = regel['totaalprijs'] * regel['btw'] / (1000 + regel['btw'])
        if regel['totaalprijs'] * regel['btw'] % (1000 + regel['btw']) > (
                999 + regel['btw']) / 2:
            btw += 1

        try:
            q = Query("""INSERT INTO tblfactuurregel (
			                 frgl_fac_id, frgl_type,
			                 frgl_omschrijving, frgl_aantal,
			                 frgl_stukprijs, frgl_totprijs,
			                 frgl_btw)
			             VALUES (
			                 %s, 0,
			                 %s, %s,
			                 %s, %s,
			                 %s)""")
            q.run((factuur_id, regel['naam'], regel['aantal'],
                   regel['stukprijs'], regel['totaalprijs'], btw))
        except DatabaseError:
            raise InternalServerError
        regels_processed.append(regel)
        return regel['totaalprijs']
コード例 #47
0
def process_factuur_regel_verkoop(regel, factuur_id, regels_processed):
    if 'product_id' in regel:
        verbruik = use_voorraad(regel['product_id'], regel['aantal'])
        try:
            q = Query("""INSERT INTO tblfactuurregel (
			                 frgl_fac_id, frgl_type,
			                 frgl_vrd_id, frgl_aantal, frgl_stukprijs,
			                 frgl_totprijs, frgl_btw)
			             VALUES (
			                 %s, 0,
			                 %s, %s, %s,
			                 %s, %s)""")
        except DatabaseError:
            raise InternalServerError

        c_totaalprijs = 0
        for vc in verbruik:
            totaalprijs = vc['stukprijs'] * vc['aantal']
            btw = totaalprijs * vc['btw'] / (1000 + vc['btw'])
            if totaalprijs * vc['btw'] % (1000 + vc['btw']) > (999 +
                                                               vc['btw']) / 2:
                btw += 1
            try:
                q.run((factuur_id, vc['id'], vc['aantal'], vc['stukprijs'],
                       totaalprijs, btw))
            except DatabaseError:
                raise InternalServerError
            regels_processed.append({
                'product_id': regel['product_id'],
                'aantal': vc['aantal'],
                'stukprijs': vc['stukprijs'],
                'totaalprijs': totaalprijs
            })
            c_totaalprijs += totaalprijs

        return c_totaalprijs
    else:
        if 'totaalprijs' not in regel:
            regel['totaalprijs'] = regel['stukprijs'] * regel['aantal']

        if 'stukprijs' not in regel:
            regel['stukprijs'] = regel['totaalprijs'] / regel['aantal']
            if regel['totaalprijs'] % regel['aantal'] > 0:
                regel['stukprijs'] += 1

        btwperc = regel['btw']
        regel['btw'] = regel['totaalprijs'] * btwperc / (1000 + btwperc)
        if regel['totaalprijs'] * btwperc % (1000 + btwperc) > (999 +
                                                                btwperc) / 2:
            regel['btw'] += 1

        try:
            q = Query("""INSERT INTO tblfactuurregel (
			                 frgl_fac_id, frgl_type,
			                 frgl_omschrijving, frgl_aantal,
			                 frgl_stukprijs, frgl_totprijs,
			                 frgl_btw)
			             VALUES (
			                 %s, 0,
			                 %s, %s,
			                 %s, %s,
			                 %s)""")
            q.run((factuur_id, regel['naam'], regel['aantal'],
                   regel['stukprijs'], regel['totaalprijs'], regel['btw']))
        except DatabaseError:
            raise InternalServerError

        regels_processed.append(regel)
        return regel['totaalprijs']