def get_for_product_and_cart(cls, cartKey, productName, quantity=999): try: pn = utils.clean_product_number(productName) return ndb.Key(Order, str(pn), parent=cartKey).get() except: logging.error("Error with query in function get_for_UserKey for Model class Order ") return None
def get_for_UserKey(cls, uk, pn=None, quantity=999): ## uk = User Key ## pn = Manufacturers Product Number try: if pn: n = utils.clean_product_number(pn) return ndb.Key(Alert, str(n), parent=uk).get() else: return cls.query(ancestor=uk).fetch(quantity) except: logging.error("Error with query in function get_for_UserKey for Model class OrderItem") return None
def get_for_UserKey(cls, uk, pn=None, sup=None, quantity=999): ##: uk = User Key try: if pn != None or sup != None: p = utils.clean_product_number(pn) logging.info('Going to run ndb.Key - get()') return ndb.Key(MarketMaker, str(p)+str(sup), parent=cls.uk).get() logging.info('Going to run Query on MarketMaker Model') return cls.query(ancestor=uk).order(-cls.cd).fetch(quantity) except: logging.error("Error with query in function get_for_UserKey for Model class OrderItem") return None
def create_order(cls, cartKey, productKey, qnt, put_model=True): try: product = productKey.get() if product: pn = utils.clean_product_number(product.pn) order = cls( key = ndb.Key(Order, str(pn), parent=cartKey), pk = productKey, ##: Product Model Key ck = cartKey, ##: Cart Model Key q = int(qnt), ##: Quantity for Order ) if put_model: orderKey = order.put() if orderKey: return order else: return order return None except Exception as e: logging.error("Error creating the order model in function create_order for Model class Order : -- %s " % str(e)) return None
def clean_pn(cls): return utils.clean_product_number(cls.pn)
def _pre_put_hook(cls): pn = utils.clean_product_number(cls.pn) key = ndb.Key(Alert, "A_"+str(mpn), parent=cls.uk) cls.key = key
def clean_pn(cls): return utils.clean_product_number(cls.key.id())
def get_for_product(cls, productPN, productKey): pn = utils.clean_product_number(productPN) return ndb.Key(ProductTierPrice, str(pn), parent=productKey).get()
def _pre_put_hook(cls): p = utils.clean_product_number(cls.pn) key = ndb.Key(MarketMaker, str(p)+str(cls.sup), parent=cls.uk) cls.key = key
def _pre_put_hook(cls): pn = utils.clean_product_number(cls.pn) key = ndb.Key(ProductTierPrice, str(pn), parent=cls.pk) cls.key = key
def get_by_seller_and_pn(sellerID, productNumber): pn = utils.clean_product_number(productNumber) sellerKey = ndb.Key(userModels.Seller, str(sellerID)).get(keys_only=True) if sellerKey: return ndb.Key(Product, str(pn), parent=sellerKey).get() return None
def get_by_pn(pn, quantity=999): ## pn = Manufacturer Product Number n = utils.clean_product_number(pn) qry = Product.query(Product.pn == n) return qry.fetch(quantity)
def _pre_put_hook(cls): n = utils.clean_product_number(cls.pn) key = ndb.Key(Product, str(n), parent=cls.sk) cls.key = key if not cls.cp: cls.cp = cls.bup if not cls.hup: cls.hup = cls.bup
def post(self): try: if not self.addProduct_form.validate(): raise Exception('addProduct_form did not Validate, in function POST of GetProductFormHandler') logging.info("addProduct_form Form Was valid") best_price = None productModel = None quantity = 1 ##: Try to fetch the data from the Form responce productNumber = str(self.addProduct_form.productNumber.data).strip() ##: Product Number urlsafeSellerKey = str(self.addProduct_form.urlsafeSellerKey.data).strip() ##: Urlsafe Seller Key urlsafeCartKey = str(self.request.POST.get('ck', None)).strip() ##: Urlsafe Cart Key Optional qnt = self.request.POST.get('qnt', None) ##: Urlsafe Seller Key logging.info('here') if qnt: try: quantity = int(qnt) except: logging.error('The quantity supplied in the form submission could not be converted into an integer') message = _('Sorry, the quantity supplied in the form submission was not valid. Please try again later.') self.add_message(message, 'error') try: self.redirect(self.request.referer) except: self.redirect_to('home') cleanProductNUmber = utils.clean_product_number(productNumber) logging.info('here') sellerKey = ndb.Key(urlsafe=urlsafeSellerKey) productKey = ndb.Key(shoppingModels.Product, cleanProductNUmber, parent=sellerKey) productModel = productKey.get() if not productModel: logging.info('here') ######################################################################## ################# ######## We don't have this product yet so we must Parse the website. ################# ######################################################################## try: sellerModel = ndb.Key(urlsafe=urlsafeSellerKey).get() logging.info('here') if not sellerModel: raise Exception('Seller of requested product was not found.') if sellerModel.parser == 'DIGIKEY': # Call to parser logging.info('Product Number to search: {}'.format(productNumber)) productModel, best_price_cents = parsers.DK_Search(sellerModel, str(productNumber), int(quantity)) else: raise Exception('At this time we cannot get product info from Seller') # Check over results of Parser if not productModel: raise Exception('Missing a productModel from the parser response') if not best_price_cents: raise Exception('Missing a best_price_cents from the parser response') best_price = float(best_price_cents)/100 # convert to dollars except Exception as e: logging.error('Error creating a productModel: -- {}'.format(e)) message = _('Sorry, we could not retrieve your product request. Please try again later.') self.add_message(message, 'error') try: return self.redirect(self.request.referer) except: return self.redirect_to('home') ##: A Product Model was found else: logging.info('here') ######################################################################## ################# ######## Send to bestPrice script ################# ######################################################################## try: best_price = bestPrice.getBestPrice(productModel.key.urlsafe(), int(quantity)) if not best_price: raise Exception('Best price returned None for product number: {}'.format(productModel.pn)) except Exception as e: logging.error('Error finding Product and/or Price in function getProduct of ProductRequestHandler : %s' % e) message = _('Sorry, we could not find a price result for your product request. Please try again later.') self.add_message(message, 'error') try: return self.redirect(self.request.referer) except: return self.redirect_to('home') if not productModel or not best_price: raise Exception('Either the productModel or the best_price is missing') if urlsafeCartKey: logging.info('here') old_order_subtotal = 0 cartModel = ndb.Key(urlsafe=urlsafeCartKey).get() if not cartModel: raise Exception('cartModel was not found using the urlsafeCartKey given in the form.') ##: Check to see if user already created this Order within this Cart currentOrder = shoppingModels.Order.get_for_product_and_cart(cartModel.key, str(productModel.pn)) newOrder = None ##: Create or Update the Order Model if currentOrder: logging.info('here') old_order_subtotal = currentOrder.st ##: must record the old subTotal before updating the QNT newOrder = currentOrder.update_order_add_qnt(currentOrder, int(quantity), put_model=False) else: logging.info('here') old_order_subtotal = 0 newOrder = shoppingModels.Order.create_order(cartModel.key, productModel.key, int(quantity), put_model=False) ##: Update the Cart for the Totals Costs if newOrder: ##: Updatte the Cart's subtotals orderSubTotal = (int(newOrder.st)-int(old_order_subtotal)) oldCartSubTotal = cartModel.st newCartSubTotal = int(oldCartSubTotal) + int(orderSubTotal) shoppingModels.Cart.update_subtotal_values(cartModel, newCartSubTotal, oldCartSubTotal, put_model=False) ndb.put_multi( [cartModel, newOrder] ) message = _('We have found the requested Product: {} and have added it to your cart {}.'.format(productModel.pn, cartModel.n)) self.add_message(message, 'success') else: message = _('We have saved the requested Product: {} to our database.'.format(productModel.pn)) self.add_message(message, 'success') except Exception as e: logging.error('Error finding or creating Product in function post of GetProductFormHandler : %s' % e) message = _('Sorry, there was an error getting the Product requested. Please try again later.') self.add_message(message, 'error') finally: logging.info('here') try: self.redirect(self.request.referer) except: self.redirect_to('home')