コード例 #1
0
def jf_update(*args, **kwargs):
    contracts(*args, **kwargs)
コード例 #2
0
def pilot():
    # Reservation System
    capacity = 300000
    optimize_route_list = []
    optimize_start_list = []
    optimize_end_list = []
    run_optimize = False
    if request.method == "POST" and (request.form.get("add") or request.form.get("remove")):
        bulk_op = g.mongo.db.contracts.initialize_unordered_bulk_op()
        bulk_run = False
        if request.form.get("add"):
            bulk_run = True
            add_ids = [int(x) for x in request.form.get("add").split(",")]
            for db_id in add_ids:
                bulk_op.find({"_id.id": db_id}).update({"$set": {"reserved_by": session["CharacterName"]}})
        elif request.form.get("remove"):
            bulk_run = True
            remove_ids = [int(x) for x in request.form.get("remove").split(",")]
            for db_id in remove_ids:
                bulk_op.find({"_id.id": db_id}).update({"$unset": {"reserved_by": session["CharacterName"]}})
        if bulk_run:
            bulk_op.execute()
    elif request.method == "POST":
        run_optimize = True
        optimize_start_list = request.form.getlist("start")
        optimize_end_list = request.form.getlist("end")
        for optimize_start in optimize_start_list:
            for optimize_end in optimize_end_list:
                optimize_route_list.append("{0}{1}".format(optimize_start, optimize_end))
        capacity = request.form.get("capacity", 300000)
    try:
        capacity = int(capacity)
    except ValueError:
        capacity = 300000

    # JF Corporation Contracts
    jf_contracts = g.mongo.db.contracts.find({
        "_id.service": "jf_service",
        "status": "Outstanding",
        "type": "Courier"
    })
    contract_list = sorted(jf_contracts, key=itemgetter("volume"), reverse=True)

    total_volume = 0
    optimized_run = [["Issuer", "Start Station", "End Station", "Date Issued", "Date Expired", "Days", "Reward",
                      "Collateral", "Volume"]]
    reserved_contracts = [["Issuer", "Start Station", "End Station", "Date Issued", "Date Expired", "Days", "Reward",
                           "Collateral", "Volume"]]
    all_history = [["Issuer", "Start Station", "End Station", "Date Issued", "Date Expired", "Days", "Reward",
                    "Collateral", "Volume", "Reserved By"]]

    users_set = set()
    for contract in contract_list:
        users_set.update([contract["issuer_id"]])
    caches.character(users_set)
    optimized_reward = 0
    optimized_collateral = 0
    optimized_volume = 0
    optimized_ids = []
    reserved_reward = 0
    reserved_collateral = 0
    reserved_volume = 0
    reserved_ids = []
    route_start_set = set()
    route_end_set = set()

    for contract in contract_list:
        # Check for non-static stations
        start_station = g.mongo.db.stations.find_one({"_id": contract["start_station_id"]})["name"]
        end_station = g.mongo.db.stations.find_one({"_id": contract["end_station_id"]})["name"]
        current_route = "{0}{1}".format(contract["start_station_id"], contract["end_station_id"])
        route_start_set.add((contract["start_station_id"], start_station))
        route_end_set.add((contract["end_station_id"], end_station))
        issuer = conversions.character(contract["issuer_id"])
        color = validator(contract)

        if (not contract.get("reserved_by") and total_volume + contract["volume"] <= capacity) and (
                    color not in ["active", "info"] and (run_optimize and current_route in optimize_route_list)):
            optimized_reward += contract["reward"]
            optimized_collateral += contract["collateral"]
            optimized_volume += contract["volume"]
            optimized_run.append([
                color,
                issuer,
                start_station,
                end_station,
                contract["date_issued"],
                contract["date_expired"],
                contract["num_days"],
                "{:0,.2f}".format(contract["reward"]),
                "{:0,.2f}".format(contract["collateral"]),
                "{:0,.2f}".format(contract["volume"])
            ])
            total_volume += contract["volume"]
            optimized_ids.append(str(contract["_id"]["id"]))
        if contract.get("reserved_by") == session["CharacterName"]:
            reserved_reward += contract["reward"]
            reserved_collateral += contract["collateral"]
            reserved_volume += contract["volume"]
            reserved_contracts.append([
                color,
                contract["_id"]["id"],
                issuer,
                start_station,
                end_station,
                contract["date_issued"],
                contract["date_expired"],
                contract["num_days"],
                "{:0,.2f}".format(contract["reward"]),
                "{:0,.2f}".format(contract["collateral"]),
                "{:0,.2f}".format(contract["volume"])
            ])
            reserved_ids.append(str(contract["_id"]["id"]))
        all_history.append([
            color,
            contract["_id"]["id"],
            issuer,
            start_station,
            end_station,
            contract["date_issued"],
            contract["date_expired"],
            contract["num_days"],
            "{:0,.2f}".format(contract["reward"]),
            "{:0,.2f}".format(contract["collateral"]),
            "{:0,.2f}".format(contract["volume"]),
            contract.get("reserved_by")
        ])

    # Formatting
    optimized_volume = "{:0,.2f}".format(optimized_volume)
    optimized_collateral = "{:0,.2f}".format(optimized_collateral)
    optimized_reward = "{:0,.2f}".format(optimized_reward)
    reserved_volume = "{:0,.2f}".format(reserved_volume)
    reserved_collateral = "{:0,.2f}".format(reserved_collateral)
    reserved_reward = "{:0,.2f}".format(reserved_reward)

    optimized_return = ",".join(optimized_ids)
    reserved_return = ",".join(reserved_ids)

    # Personal Contracts
    personal_history = [["Assignee", "Issuer", "Start Station", "End Station", "Date Issued", "Date Expired",
                         "Days", "Reward", "Collateral", "Volume"]]
    personal_api_keys = g.mongo.db.api_keys.find_one({"_id": session["CharacterOwnerHash"]})
    if personal_api_keys:
        invalid_apis = caches.contracts([("personal", api_key["key_id"], api_key["vcode"],
                                          api_key["character_id"]) for api_key in personal_api_keys["keys"]
                                         if api_key.get("valid", True)])
        if invalid_apis:
            return redirect(url_for("account.home", keys=",".join([str(x) for x in invalid_apis])))
        personal_character_ids = [x["character_id"] for x in personal_api_keys["keys"]]
        personal_contracts = g.mongo.db.contracts.find({
            "_id.service": "personal",
            "status": "Outstanding",
            "type": "Courier",
            "assignee_id": {"$in": personal_character_ids}
        })
        users_set = set()
        for contract in personal_contracts:
            users_set.update([contract["issuer_id"], contract["assignee_id"]])
        caches.character(users_set)

        # Call db again because query has ended when updating cache
        personal_contracts = g.mongo.db.contracts.find({
            "_id.service": "personal",
            "status": "Outstanding",
            "type": "Courier",
            "assignee_id": {"$in": personal_character_ids}
        })
        for contract in personal_contracts:
            start_station = g.mongo.db.stations.find_one({"_id": contract["start_station_id"]})["name"]
            end_station = g.mongo.db.stations.find_one({"_id": contract["end_station_id"]})["name"]
            issuer = conversions.character(contract["issuer_id"])
            assignee = conversions.character(contract["assignee_id"])
            color = validator(contract)

            personal_history.append([
                color,
                assignee,
                issuer,
                start_station,
                end_station,
                contract["date_issued"],
                contract["date_expired"],
                contract["num_days"],
                "{:0,.2f}".format(contract["reward"]),
                "{:0,.2f}".format(contract["collateral"]),
                "{:0,.2f}".format(contract["volume"])
            ])

    # Payment System
    jf_paid, jf_tax_total = jf_tax_calculator(session["CharacterOwnerHash"])
    db_jf_reimbursement = g.mongo.db.preferences.find_one({"_id": "jf_reimbursement"})

    if db_jf_reimbursement:
        jf_reimbursement = db_jf_reimbursement["amount"]
        jf_percent_paid = int(min(jf_paid / jf_reimbursement * 100, 100))
        jf_percent_owed = max(int(min(jf_tax_total / jf_reimbursement * 100, 100)) - jf_percent_paid, 0)
        jf_paid = "{:,.02f}".format(jf_paid)
        jf_tax_total = "{:,.02f}".format(jf_tax_total)
        jf_reimbursement = "{:,.02f}".format(jf_reimbursement)
    else:
        jf_reimbursement = "0.00"
        jf_percent_paid = 0
        jf_percent_owed = 0
        jf_paid = "0.00"
        jf_tax_total = "0.00"

    return render_template("jf_pilot.html", contract_list=contract_list, optimized_run=optimized_run,
                           reserved_contracts=reserved_contracts, all_history=all_history,
                           optimized_reward=optimized_reward, optimized_collateral=optimized_collateral,
                           optimized_volume=optimized_volume, optimized_return=optimized_return,
                           reserved_reward=reserved_reward, reserved_collateral=reserved_collateral,
                           reserved_volume=reserved_volume, reserved_return=reserved_return,
                           personal_history=personal_history, jf_percent=[jf_percent_paid, jf_percent_owed],
                           jf_reimbursement=jf_reimbursement, jf_taxes=[jf_paid, jf_tax_total],
                           route_start_set=list(route_start_set), capacity=capacity, route_end_set=list(route_end_set),
                           optimize_start_list=[int(x) for x in optimize_start_list],
                           optimize_end_list=[int(y) for y in optimize_end_list])
コード例 #3
0
def pilot():
    # Reservation System
    capacity = 300000
    optimize_route_list = []
    optimize_start_list = []
    optimize_end_list = []
    run_optimize = False
    if request.method == "POST" and (request.form.get("add")
                                     or request.form.get("remove")):
        bulk_op = g.mongo.db.contracts.initialize_unordered_bulk_op()
        bulk_run = False
        if request.form.get("add"):
            bulk_run = True
            add_ids = [int(x) for x in request.form.get("add").split(",")]
            for db_id in add_ids:
                bulk_op.find({
                    "_id.id": db_id
                }).update({"$set": {
                    "reserved_by": session["CharacterName"]
                }})
        elif request.form.get("remove"):
            bulk_run = True
            remove_ids = [
                int(x) for x in request.form.get("remove").split(",")
            ]
            for db_id in remove_ids:
                bulk_op.find({
                    "_id.id": db_id
                }).update(
                    {"$unset": {
                        "reserved_by": session["CharacterName"]
                    }})
        if bulk_run:
            bulk_op.execute()
    elif request.method == "POST":
        run_optimize = True
        optimize_start_list = request.form.getlist("start")
        optimize_end_list = request.form.getlist("end")
        for optimize_start in optimize_start_list:
            for optimize_end in optimize_end_list:
                optimize_route_list.append("{0}{1}".format(
                    optimize_start, optimize_end))
        capacity = request.form.get("capacity", 300000)
    try:
        capacity = int(capacity)
    except ValueError:
        capacity = 300000

    # JF Corporation Contracts
    jf_contracts = g.mongo.db.contracts.find({
        "_id.service": "jf_service",
        "status": "Outstanding",
        "type": "Courier"
    })
    contract_list = sorted(jf_contracts,
                           key=itemgetter("volume"),
                           reverse=True)

    total_volume = 0
    optimized_run = [[
        "Issuer", "Start Station", "End Station", "Date Issued",
        "Date Expired", "Days", "Reward", "Collateral", "Volume"
    ]]
    reserved_contracts = [[
        "Issuer", "Start Station", "End Station", "Date Issued",
        "Date Expired", "Days", "Reward", "Collateral", "Volume"
    ]]
    all_history = [[
        "Issuer", "Start Station", "End Station", "Date Issued",
        "Date Expired", "Days", "Reward", "Collateral", "Volume", "Reserved By"
    ]]

    users_set = set()
    for contract in contract_list:
        users_set.update([contract["issuer_id"]])
    caches.character(users_set)
    optimized_reward = 0
    optimized_collateral = 0
    optimized_volume = 0
    optimized_ids = []
    reserved_reward = 0
    reserved_collateral = 0
    reserved_volume = 0
    reserved_ids = []
    route_start_set = set()
    route_end_set = set()

    for contract in contract_list:
        # Check for non-static stations
        start_station = g.mongo.db.stations.find_one(
            {"_id": contract["start_station_id"]})["name"]
        end_station = g.mongo.db.stations.find_one(
            {"_id": contract["end_station_id"]})["name"]
        current_route = "{0}{1}".format(contract["start_station_id"],
                                        contract["end_station_id"])
        route_start_set.add((contract["start_station_id"], start_station))
        route_end_set.add((contract["end_station_id"], end_station))
        issuer = conversions.character(contract["issuer_id"])
        color = validator(contract)

        if (not contract.get("reserved_by")
                and total_volume + contract["volume"] <= capacity) and (
                    color not in ["active", "info"] and
                    (run_optimize and current_route in optimize_route_list)):
            optimized_reward += contract["reward"]
            optimized_collateral += contract["collateral"]
            optimized_volume += contract["volume"]
            optimized_run.append([
                color, issuer, start_station, end_station,
                contract["date_issued"], contract["date_expired"],
                contract["num_days"], "{:0,.2f}".format(contract["reward"]),
                "{:0,.2f}".format(contract["collateral"]),
                "{:0,.2f}".format(contract["volume"])
            ])
            total_volume += contract["volume"]
            optimized_ids.append(str(contract["_id"]["id"]))
        if contract.get("reserved_by") == session["CharacterName"]:
            reserved_reward += contract["reward"]
            reserved_collateral += contract["collateral"]
            reserved_volume += contract["volume"]
            reserved_contracts.append([
                color, contract["_id"]["id"], issuer, start_station,
                end_station, contract["date_issued"], contract["date_expired"],
                contract["num_days"], "{:0,.2f}".format(contract["reward"]),
                "{:0,.2f}".format(contract["collateral"]),
                "{:0,.2f}".format(contract["volume"])
            ])
            reserved_ids.append(str(contract["_id"]["id"]))
        all_history.append([
            color, contract["_id"]["id"], issuer, start_station, end_station,
            contract["date_issued"], contract["date_expired"],
            contract["num_days"], "{:0,.2f}".format(contract["reward"]),
            "{:0,.2f}".format(contract["collateral"]),
            "{:0,.2f}".format(contract["volume"]),
            contract.get("reserved_by")
        ])

    # Formatting
    optimized_volume = "{:0,.2f}".format(optimized_volume)
    optimized_collateral = "{:0,.2f}".format(optimized_collateral)
    optimized_reward = "{:0,.2f}".format(optimized_reward)
    reserved_volume = "{:0,.2f}".format(reserved_volume)
    reserved_collateral = "{:0,.2f}".format(reserved_collateral)
    reserved_reward = "{:0,.2f}".format(reserved_reward)

    optimized_return = ",".join(optimized_ids)
    reserved_return = ",".join(reserved_ids)

    # Personal Contracts
    personal_history = [[
        "Assignee", "Issuer", "Start Station", "End Station", "Date Issued",
        "Date Expired", "Days", "Reward", "Collateral", "Volume"
    ]]
    personal_api_keys = g.mongo.db.api_keys.find_one(
        {"_id": session["CharacterOwnerHash"]})
    if personal_api_keys:
        invalid_apis = caches.contracts([
            ("personal", api_key["key_id"], api_key["vcode"],
             api_key["character_id"]) for api_key in personal_api_keys["keys"]
            if api_key.get("valid", True)
        ])
        if invalid_apis:
            return redirect(
                url_for("account.home",
                        keys=",".join([str(x) for x in invalid_apis])))
        personal_character_ids = [
            x["character_id"] for x in personal_api_keys["keys"]
        ]
        personal_contracts = g.mongo.db.contracts.find({
            "_id.service": "personal",
            "status": "Outstanding",
            "type": "Courier",
            "assignee_id": {
                "$in": personal_character_ids
            }
        })
        users_set = set()
        for contract in personal_contracts:
            users_set.update([contract["issuer_id"], contract["assignee_id"]])
        caches.character(users_set)

        # Call db again because query has ended when updating cache
        personal_contracts = g.mongo.db.contracts.find({
            "_id.service": "personal",
            "status": "Outstanding",
            "type": "Courier",
            "assignee_id": {
                "$in": personal_character_ids
            }
        })
        for contract in personal_contracts:
            start_station = g.mongo.db.stations.find_one(
                {"_id": contract["start_station_id"]})["name"]
            end_station = g.mongo.db.stations.find_one(
                {"_id": contract["end_station_id"]})["name"]
            issuer = conversions.character(contract["issuer_id"])
            assignee = conversions.character(contract["assignee_id"])
            color = validator(contract)

            personal_history.append([
                color, assignee, issuer, start_station, end_station,
                contract["date_issued"], contract["date_expired"],
                contract["num_days"], "{:0,.2f}".format(contract["reward"]),
                "{:0,.2f}".format(contract["collateral"]),
                "{:0,.2f}".format(contract["volume"])
            ])

    # Payment System
    jf_paid, jf_tax_total = jf_tax_calculator(session["CharacterOwnerHash"])
    db_jf_reimbursement = g.mongo.db.preferences.find_one(
        {"_id": "jf_reimbursement"})

    if db_jf_reimbursement:
        jf_reimbursement = db_jf_reimbursement["amount"]
        jf_percent_paid = int(min(jf_paid / jf_reimbursement * 100, 100))
        jf_percent_owed = max(
            int(min(jf_tax_total / jf_reimbursement * 100, 100)) -
            jf_percent_paid, 0)
        jf_paid = "{:,.02f}".format(jf_paid)
        jf_tax_total = "{:,.02f}".format(jf_tax_total)
        jf_reimbursement = "{:,.02f}".format(jf_reimbursement)
    else:
        jf_reimbursement = "0.00"
        jf_percent_paid = 0
        jf_percent_owed = 0
        jf_paid = "0.00"
        jf_tax_total = "0.00"

    return render_template(
        "jf_pilot.html",
        contract_list=contract_list,
        optimized_run=optimized_run,
        reserved_contracts=reserved_contracts,
        all_history=all_history,
        optimized_reward=optimized_reward,
        optimized_collateral=optimized_collateral,
        optimized_volume=optimized_volume,
        optimized_return=optimized_return,
        reserved_reward=reserved_reward,
        reserved_collateral=reserved_collateral,
        reserved_volume=reserved_volume,
        reserved_return=reserved_return,
        personal_history=personal_history,
        jf_percent=[jf_percent_paid, jf_percent_owed],
        jf_reimbursement=jf_reimbursement,
        jf_taxes=[jf_paid, jf_tax_total],
        route_start_set=list(route_start_set),
        capacity=capacity,
        route_end_set=list(route_end_set),
        optimize_start_list=[int(x) for x in optimize_start_list],
        optimize_end_list=[int(y) for y in optimize_end_list])