def _test_save_inventory(self): ent = Enterprise.find_by_name('Healthy U Store') cmpns = Campaign.find_all(ent.enterprise_id) R = self.get('/crm/product/inventory_list') assert R.status_int == 200 prods = json.loads(R.body) self.assertGreater(prods['records'], 100) self.assertEqual(prods['records'], len(prods['rows'])) # get the first product ID prod = prods['rows'][1]['cell'] # ['', '1451', '5-HTP 100 mg- Pharmax', 'SUP-1003', 'Seroyal', '123', '8.0', '15.0', '25.00', '', '25.00', '25.00'] pid = prod[1] name = prod[2] #sku = prod[3] #manu = prod[4] inventory = int(prod[5]) inventory_par = prod[6] unitcost = prod[7] R = self.post('/crm/product/save_inventory', {'id' : pid, 'inventory' : inventory + 10, 'inventory_par' : inventory_par, 'name' : name + ' xxx', 'unit_cost' : unitcost, 'cmp_%s' % cmpns[0].campaign_id : '999', 'cmp_%s' % cmpns[1].campaign_id : ''}) self.assertEquals(R.body, 'True') prod = Product.load(pid) tot = InventoryJournal.total(prod) self.assertEqual(tot, inventory + 10) self.assertEqual(999, prod.campaign_prices[cmpns[0].campaign_id].retail_price) self.assertEqual(True, cmpns[1].campaign_id not in prod.campaign_prices.keys()) R = self.get('/crm/product/edit/%s' % pid) assert R.status_int == 200 f = R.forms['frm_product'] R.mustcontain('Edit Product') self.assertEqual(f['product_id'].value, pid) self.assertEqual(f['name'].value, name + ' xxx')
def _test_save_existing(self): ent = Enterprise.find_by_name('Healthy U Store') cmpns = Campaign.find_all(ent.enterprise_id) product_id = self._create_new() R = self.get('/crm/product/list') assert R.status_int == 200 R.mustcontain('Test Product') R.mustcontain('Product Search') # make sure product search is in 2 places R = self.get('/crm/product/edit/%s' % product_id) R.mustcontain('Edit Product') f = R.forms['frm_product'] self.assertEqual(f['product_id'].value, product_id) self.assertEqual(f['name'].value, 'Test Product') self.assertEqual(f['seo_keywords'].value, 'SEO Test') f.set('name', 'Test Product New') f.set('seo_keywords', 'SEO Test New') for prod in Product.find_all_except(Product.load(product_id))[:3]: f.set('child_incl_%s' % prod.product_id, prod.product_id) f.set('child_quantity_%s' % prod.product_id, 2) f.set('campaign_price[%s]' % cmpns[0].campaign_id, "123") f.set('campaign_price[%s]' % cmpns[1].campaign_id, None) f.set('prod_inventory', 25) #cat = ProductCategory.find_all(ent.enterprise_id)[0] #f.set('category_id', cat.category_id) R = f.submit('submit') self.assertEqual(R.status_int, 302) R = R.follow() assert R.status_int == 200 f = R.forms['frm_product'] R.mustcontain('Edit Product') self.assertEqual(f['product_id'].value, product_id) self.assertEqual(f['name'].value, 'Test Product New') self.assertEqual(f['seo_keywords'].value, 'SEO Test New') self.assertEqual(f['campaign_price[%s]' % cmpns[0].campaign_id].value, "123.00") self.assertEqual(f['campaign_price[%s]' % cmpns[1].campaign_id].value, "") #self.assertEqual(f['category_id'].value, cat.category_id) prod = Product.load(product_id) self.assertEqual(25, InventoryJournal.total(prod)) for prod in Product.find_all_except(Product.load(product_id))[:3]: self.assertEqual(int(f['child_quantity_%s' % prod.product_id].value), 2) #put pricing back. R = self.get('/crm/product/edit/%s' % product_id) R.mustcontain('Edit Product') f = R.forms['frm_product'] self.assertEqual(f['product_id'].value, product_id) f.set('campaign_price[%s]' % cmpns[0].campaign_id, "123") f.set('campaign_price[%s]' % cmpns[1].campaign_id, "234") R = f.submit('submit') self.assertEqual(R.status_int, 302) R = R.follow() assert R.status_int == 200 f = R.forms['frm_product'] R.mustcontain('Edit Product') self.assertEqual(f['product_id'].value, product_id) self.assertEqual(f['campaign_price[%s]' % cmpns[1].campaign_id].value, "234.00") self._delete_new(product_id)
def save(self): #pylint: disable-msg=R0912,R0915 product_id = self.request.POST.get('product_id') if product_id: prod = Product.load(product_id) else: prod = Product() prod.bind(self.request.POST, True) prod.mod_dt = util.now() prod.save() self.db_flush() new_children = {} for k in self.request.POST.keys(): if k.startswith('campaign_price'): match = re.search(r'^.*\[(.*)\]', k) if match: campaign = Campaign.load(match.group(1)) price = self.request.POST.get(k) discount = self.request.POST.get('campaign_discount[%s]' % campaign.campaign_id) if price: price = util.float_(price) discount = util.float_(util.nvl(discount, 0.0)) prod.set_price(campaign, price, discount) else: prod.remove_price(campaign) if k.startswith('child_incl'): child_product_id = self.request.POST.get(k) child_product_quantity = self.request.POST.get('child_quantity_%s' % child_product_id) new_children[child_product_id] = child_product_quantity # KB: [2013-02-23]: Clear out old children that were just deselected and add the ones that are still selected. for current_child in prod.get_children(): if current_child.child_id not in new_children.keys(): prod.clear_child(current_child.child_id) for new_child_product_id in new_children.keys(): new_child_product_quantity = new_children[new_child_product_id] prod.add_child(new_child_product_id, new_child_product_quantity) prod.save() self.db_flush() redir_params = '' if 'parent_id' in self.request.POST and self.request.POST['parent_id']: parent = Product.load(self.request.POST['parent_id']) if not parent.has_child(prod.product_id): parent.add_child(prod.product_id) parent.save() redir_params = '?is_attribute=True&parent_id=%s' % parent.product_id inventory = str(self.request.POST.get('prod_inventory', '0')) if inventory and str(round(float(inventory), 2)) != str(round(util.nvl(InventoryJournal.total(prod), 0), 2)): InventoryJournal.create_new(prod, 'Inventory Adjust', inventory) self.db_flush() self.flash('Inventory Adjusted to %s' % inventory) prod.clear_attributes() for i in range(30): attr_name = self.request.POST.get('attr_name[%d]' % i) attr_value = self.request.POST.get('attr_value[%d]' % i) if attr_name and attr_value: prod.set_attr(attr_name, attr_value) category_id = self.request.POST.get('category_id') if category_id: category = ProductCategory.load(category_id) self.forbid_if(not category) category.add_product(prod.product_id) self.flash('Successfully saved %s.' % prod.name) return HTTPFound('/crm/product/edit/%s%s' % (prod.product_id, redir_params))