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)
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)
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)
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)
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)
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)
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
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})