Beispiel #1
0
 def getAllStocks(self):
     dao = StocksDAO()
     stocks_list = dao.getAllStocks()
     result_list = []
     for row in stocks_list:
         result = Stock().build_dict_from_row(row)
         result_list.append(result)
     return jsonify(result_list)
Beispiel #2
0
 def getSumOfResources(self):
     dao = StocksDAO()
     sum_list = dao.getSumOfResources()
     result_list = []
     for row in sum_list:
         result = Stock().build_dict_from_row_sum(row)
         result_list.append(result)
     return jsonify(result_list)
Beispiel #3
0
 def getStockById(self, rid, sid):
     dao = StocksDAO()
     row = dao.getStockById(rid, sid)
     if not row:
         return jsonify(Error="Stock Not Found"), 404
     else:
         stock = Stock().build_dict_from_row(row)
         return jsonify(stock)
Beispiel #4
0
 def getStocksBySupplierId(self, sid):
     # Check if supplier exists
     supplierDAO = SuppliersDAO()
     row = supplierDAO.getSupplierById(sid)
     if not row:
         return jsonify(Error="Supplier Not Found"), 404
     #If supplier found, get all the stocks from that supplier
     else:
         dao = StocksDAO()
         stocks_list = dao.getStocksBySid(sid)
         result_list = []
         for row in stocks_list:
             stock = Stock().build_dict_from_row_resource(row)
             result_list.append(stock)
         return jsonify(result_list)
Beispiel #5
0
    def searchStocks(self, args):
        # Query parameters allowed when searching
        # These parameters are from Resource, Category and Stock
        allowed_keys = {
            "rid", "rname", "catid", "qtysum", "currentpriceperitem",
            "zipcode", "region", "city"
        }

        # Allow every query parameter stated in allowed_keys to have a min or max value
        max_and_min_keys = set()
        for key in allowed_keys:
            max_and_min_keys.add("max-" + key)
            max_and_min_keys.add("min-" + key)
        allowed_keys = allowed_keys.union(max_and_min_keys)

        # Divide the args given by user into min, max and equal parameters for use in DAO
        max_args = {}
        min_args = {}
        equal_args = {}
        for key in args.keys():
            if key in allowed_keys and key[0:4] == "max-":
                max_args[key[4:]] = args[key]
            elif key in allowed_keys and key[0:4] == "min-":
                min_args[key[4:]] = args[key]
            elif key not in allowed_keys:
                return jsonify(Error="Malfromed query string"), 400
            else:
                equal_args[key] = args[key]

        # Get all the results for the search
        dao = StocksDAO()
        resources_list = dao.getStocksByParams(equal_args, max_args, min_args)
        result_list = []
        for row in resources_list:
            resource = Stock().build_dict_from_row(row)
            result_list.append(resource)
        return jsonify(result_list)
Beispiel #6
0
    def searchStocks(self, sid, args):
        dao = SuppliersDAO()
        row = dao.getSupplierById(sid)
        if not row:
            return jsonify(Error="Supplier Not Found"), 404

        allowed_keys = {"rid", "rname", "catid", "catname"}
        allowed_range_keys = {"qtysum", "currentpriceperitem"}

        # Allow every query parameter stated in allowed_keys to have a min or max value
        max_and_min_keys = set()
        for key in allowed_range_keys:
            max_and_min_keys.add("max-" + key)
            max_and_min_keys.add("min-" + key)
        allowed_keys = allowed_keys.union(max_and_min_keys)
        allowed_keys = allowed_keys.union(allowed_range_keys)

        # Divide the args given by user into min, max and equal parameters for use in DAO
        max_args = {}
        min_args = {}
        equal_args = {}
        for key in args.keys():
            if key in allowed_keys and key[0:4] == "max-":
                max_args[key[4:]] = args[key]
            elif key in allowed_keys and key[0:4] == "min-":
                min_args[key[4:]] = args[key]
            elif key not in allowed_keys:
                return jsonify(Error="Malfromed query string"), 400
            else:
                equal_args[key] = args[key]

        # Added sid for searching specific uid
        equal_args['sid'] = sid

        # Get all the results for the search
        dao = StocksDAO()
        stocks_list = dao.getStocksByParamsNoSupplier(equal_args, max_args,
                                                      min_args)
        result_list = []
        for row in stocks_list:
            stock = Stock().build_dict_from_row_no_supplier(row)
            result_list.append(stock)
        return jsonify(result_list)
Beispiel #7
0
    def insertAvailabilityAnnouncementbySID(
            self, form,
            sid):  #added by herbert for post announcements by supplier
        print(len(form))
        if len(form) == 3:
            rid = form['rid']
            qty = form['qty']
            priceattime = form['priceattime']
            #rm['date'] #DATE has yet to be added to documentation

            if rid and qty and priceattime:

                dao = ResourcesDAO()
                if not dao.getResourceById(rid):
                    return jsonify(Error="Resource not found"), 404

                dao = AvailabilityAnnouncementsDAO()
                ann_id = dao.insertAvailabilityAnnouncement(sid)

                dao = StocksDAO()
                if not dao.getStockById(rid, sid):
                    #add t
                    # o stock if doesnt exist
                    dao.insertStock(rid, sid, qty, priceattime)
                else:
                    astock = dao.getStockById(rid, sid)
                    newqty = astock[11] + qty
                    dao.updateStock(rid, sid, newqty, priceattime)
                    #increase number of items in stock by qty. of each damn item. shit.
                #dao = SuppliersDAO() # do I even need this one?
                #dao2 = AvailabilityAnnouncementsDAO()
                dao = AvailabilityAnnoucementDetailsDAO()
                dao.insertAvailabilityAnnouncementDetails(
                    ann_id, rid, qty,
                    priceattime)  #do a loop to add all the fields
                dao = AvailabilityAnnouncementsDAO()
                table = dao.getAnnouncementByIdWithDetails(ann_id)
                if not table:
                    return jsonify(
                        Error="Availability Announcement Not Found"), 404
                else:
                    result = AvailabilityAnnouncement(
                    ).build_dict_from_table_details(table)
                    return jsonify(result)
            else:
                return jsonify(
                    Error="Unexpected attributes in post request"), 400
        elif len(form) != 4:
            return jsonify(Error="Malformed post request"), 400
        else:
            rname = form['rname']
            catid = form['catid']
            qty = form['qty']
            priceattime = form['priceattime']
            rid = None
            if rname and catid and qty and priceattime:
                dao2 = CategoriesDAO()
                dao = ResourcesDAO()
                resource = dao.getResourcesByRname(rname)
                if not resource:
                    if not dao2.getCategoryById(catid):
                        return jsonify(Error="Category not found")
                    rid = dao.insert(rname, catid)
                else:
                    rid = (resource[0])[0]
                    print(rid)
                dao = AvailabilityAnnouncementsDAO()
                ann_id = dao.insertAvailabilityAnnouncement(sid)

                dao = StocksDAO()
                if not dao.getStockById(rid, sid):
                    # add t
                    # o stock if doesnt exist
                    dao.insertStock(rid, sid, qty, priceattime)
                else:
                    astock = dao.getStockById(rid, sid)
                    newqty = astock[11] + qty
                    dao.updateStock(rid, sid, newqty, priceattime)
                    # increase number of items in stock by qty. of each damn item. shit.
                # dao = SuppliersDAO() # do I even need this one?
                # dao2 = AvailabilityAnnouncementsDAO()
                dao = AvailabilityAnnoucementDetailsDAO()
                dao.insertAvailabilityAnnouncementDetails(
                    ann_id, rid, qty,
                    priceattime)  # do a loop to add all the fields
                dao = AvailabilityAnnouncementsDAO()
                table = dao.getAnnouncementByIdWithDetails(ann_id)
                if not table:
                    return jsonify(
                        Error="Availability Announcement Not Found"), 404
                else:
                    result = AvailabilityAnnouncement(
                    ).build_dict_from_table_details(table)
                    return jsonify(result)

            else:
                return jsonify(
                    Error="Unexpected attributes in post request"), 400
Beispiel #8
0
    def insert(self, form):
        if len(form) != 2:
            return jsonify(Error="Malformed post request"), 400
        else:
            # VALIDATION
            # TODO: Check if supplier piid is the same
            # TODO: Check if valid objects in details array

            # Check if payment is valid
            buyer_pi_id = PaymentInfoDAO().getPaymentInfoById(form['piId'])[0]
            if not buyer_pi_id:
                return jsonify(Error="Purchase Info not found"), 400

            supplier_resource_array = []
            try:
                transaction_details = sorted(form['transactions'],
                                             key=lambda k: k['sid'])
            except:
                return jsonify(Error="Malformed post request"), 400

            for detail in transaction_details:
                sid = detail['sid']
                rid = detail['rid']
                qty = detail['qty']
                # Create function
                # Check if supplier and resource key is repeated
                if not self.checkIfExists(supplier_resource_array, sid, rid):

                    # Check if supplier exists
                    if not SuppliersDAO().getSupplierById(sid):
                        return jsonify(Error="Supplier not found"), 400

                    # Check if resource exists
                    if not ResourcesDAO().getResourceById(rid):
                        return jsonify(Error="Resource not found"), 400

                    # Check if qty is valid
                    # Check if stock exists
                    available_stock = StocksDAO().getStockQtyById(rid, sid)
                    if not available_stock:
                        return jsonify(Error="Resource not in stock"), 400

                    # Check if qty is sufficient
                    if available_stock[0] < qty:
                        return jsonify(
                            Error="Resource not enough quantity"), 400

                    supplier_resource_array.append({
                        'sid': detail['sid'],
                        'rid': detail['rid']
                    })

                else:
                    return jsonify(Error="Repeated"), 400

            user_id = UsersDAO().getUserIdByPIID(buyer_pi_id)

            # Create Purchase
            purchase_id = PurchaseDAO().insert(user_id, buyer_pi_id, 0,
                                               time.strftime("%Y/%m/%d"))
            current_sid = None
            current_transaction = None
            purchase_total = 0
            transaction_total = 0

            for detail in transaction_details:
                sid = detail['sid']
                rid = detail['rid']
                qty = detail['qty']
                if not current_sid or current_sid != sid:
                    # TODO: SUPPLIER PI ID
                    pi_id = PaymentInfoDAO().getPaymentInfoBySid(sid)
                    print(current_transaction)
                    if current_transaction:
                        # Update transaction
                        print('hello')
                        ResourceTransactionsDAO().updateTransactionAmmount(
                            current_transaction[0], transaction_total)

                    # Create Transaction
                    current_transaction = ResourceTransactionsDAO().insert(
                        sid, 0, purchase_id, pi_id)
                    print(current_transaction)
                    transaction_total = 0

                # GET the current stock
                current_stock = StocksDAO().getStockQtyById(rid, sid)[0]
                # GET the current price
                current_price = StocksDAO().getStockPriceById(rid, sid)[0]

                # Create Transaction Detail
                ResourceTransactionDetailsDAO().insert(current_transaction,
                                                       rid, current_price, qty)

                # Subtract Stock
                new_qty = current_stock - qty

                StocksDAO().updateQty(sid, rid, new_qty)
                purchase_total = purchase_total + current_price * qty
                transaction_total = transaction_total + current_price * qty

            # Modify Purchase Total
            PurchaseDAO().updatePurchasePrice(purchase_id, purchase_total)

            ResourceTransactionsDAO().updateTransactionAmmount(
                current_transaction[0], transaction_total)

            return jsonify({"purchase_id": purchase_id})