def createbasket(self): came_from = str(request.GET.get('came_from', '')) values = dict(request.params) for item in values: if item.startswith('product_id.'): id = int(item.split('.')[-1]) try: product = Session.query(Product).filter_by(id=id).one() except: h.flash(_('No product exist with ID: %s')%id) redirect(url(controller='product',action='list')) if values['quant']!='': quantity = int(values['quant']) else: quantity =1 if session.has_key('basket'): session['basket'][id]=quantity else: session['basket']={id:quantity} product = Session.query(Product).filter_by(id=id).one() h.flash(_('%s of product %s added to basket')%(quantity,product.name)) if came_from !='': return redirect(came_from) redirect(url(controller='product',action='list'))
def edit2(self,id): product = Session.query(Product).filter_by(id=int(id)).one() jd = jcal.gregorian_to_jd(product.buy_date.year, product.buy_date.month, product.buy_date.day) jalali = jcal.jd_to_jalali(jd) jalali = str(jalali[0])+'/'+str(jalali[1])+'/'+str(jalali[2]) values={ 'code':product.code, 'name':product.name, 'brand':product.brand, 'quantity':product.quantity, 'description':product.description, 'buy_price':product.buy_price, 'sell_price':product.sell_price, 'wholesale_price':product.wholesale_price, 'buy_date':jalali, } tags = Session.query(ProductTag).all() for i,tag in enumerate(tags): for ptag in product.tags: if ptag.tag == tag.tag: values['tag-%i.%i'%(i,tag.id)]=1 return render_edit2_form( self.menu_items, values, number_of_photos=number_of_photos(values), id=product.id, photos=product.photos)
def list(self,id=None,page=1): if "repoze.who.identity" in request.environ: user = request.environ.get('repoze.who.identity')['user'] wholesale_tag = Session.query(UserTag).filter_by(tag='wholesale').one() if wholesale_tag in user.tags: c.wholesale=True c.tags = Session.query(ProductTag).all() c.menu_items = h.top_menu(self.menu_items,_('Shop online')) if session.has_key('product_querystr'): if session.has_key('paliasedtags'): for item in session['paliasedtags']: exec(item) products = eval(session['product_querystr']+".filter(Product.deleted==False)") c.paginator = paginate.Page(products, page=int(request.params.get('page', page)), items_per_page = 10) html = render('/derived/product/list.html') return htmlfill.render(html,defaults=session['product_search_values']) else: products = Session.query(Product).filter_by(deleted=False) c.paginator = paginate.Page(products, page=int(request.params.get('page', page)), items_per_page = 10) return render('/derived/product/list.html')
def delcommons(user): phones = Session.query(Phone).filter_by(user_id=user.id).all() addresses = Session.query(Address).filter_by(user_id=user.id).all() emails = Session.query(Email).filter_by(user_id=user.id).all() for phone in phones: Session.delete(phone) for address in addresses: Session.delete(address) for email in emails: Session.delete(email)
def save2(self): values = dict(request.params) photos_inform=[] for item in values: if item.startswith('product_id'): product_id = item.split('.')[-1] if item.startswith('photo-'): photos_inform.append(int(item.split('-')[-1])) product = Session.query(Product).filter_by(id=product_id).one() action = request.params.getone('action') del values['action'] if action == 'Save': # we need a new schema to be on par with the new Ajax form schema = EditProductForm() try: result = schema.to_python(dict(request.params), c) except Invalid, e: return render_edit2_form( self.menu_items, values=values, id=product.id, errors=variabledecode.variable_encode( e.unpack_errors() or {}, add_repetitions=False ), number_of_photos=number_of_photos(values), photos = product.photos ) else: # Move the save photo to photo controller photos = Session.query(Photo).filter(Photo.id.in_(photos_inform)).all() product.code = result['code'] product.name = result['name'] product.description = result['description'] product.quantity= result['quantity'] product.buy_price = result['buy_price'] product.sell_price = result['sell_price'] product.wholesale_price = result['wholesale_price'] product.buy_date = result['buy_date'] product.brand = result['brand'] product.photos = photos product.tags = result['tag'] Session.add(product) Session.commit() h.flash(_('Product edited successfully.')) redirect(url(controller='product',action='admin'))
def edit(self,id): values={} group = Session.query(Group).filter_by(id=id).one() values['group']= group.group c.permissions = Session.query(Permission).all() for i,perm in enumerate(c.permissions): for permission in group.permissions: if permission.name == perm.name: values['permissions-%i.%i'%(i,perm.id)]= 1 c.menu_items = h.top_menu(self.menu_items,_('Customers')) html = render('/derived/group/edit.html') return htmlfill.render(html, defaults=values)
def delete(self, id): def delcommons(user): phones = Session.query(Phone).filter_by(user_id=user.id).all() addresses = Session.query(Address).filter_by(user_id=user.id).all() emails = Session.query(Email).filter_by(user_id=user.id).all() for phone in phones: Session.delete(phone) for address in addresses: Session.delete(address) for email in emails: Session.delete(email) came_from = str(request.GET.get("came_from", "")) or url(controller="user", action="admin") try: user = Session.query(User).filter_by(id=id).one() except: h.flash(_("No user with ID:%s to delete" % id)) return redirect(h.url(controller="user", action="index")) if user.user_name == "admin": h.flash("Did u lost your mind?! deleting admin user will destroy ur program!") return redirect(came_from) if user.pending: conf = Session.query(UserConfirm).filter_by(user_id=user.id).one() Session.delete(conf) delcommons(user) Session.delete(user) else: invoices = Session.query(Invoice).filter_by(customer_id=user.id).filter_by(pending=False).all() if invoices == []: invoices = Session.query(Invoice).filter_by(customer_id=user.id).all() for invoice in invoices: for invoice_item in invoice.invoice_items: Session.delete(invoice_item) Session.delete(invoice) delcommons(user) Session.delete(user) h.flash("user and all his/her pending orders were deleted") else: h.flash( "you can not delete users permanently with confirmed orders from this site.instead this user has been marked as deleted and is unable to use his/her account anymore" ) user.deleted = True Session.add(user) Session.commit() h.flash(_("User %s deleted!") % user.user_name) return redirect(came_from)
def render_new_form(menu_items,values=None, errors=None, number_of_photos=0): c.number_of_photos = number_of_photos c.menu_items = h.top_menu(menu_items,_('Products')) c.tags = Session.query(ProductTag).all() #c.roles = ['test1','test2'] html = render('/derived/product/new.html') return htmlfill.render(html, defaults=values, errors=errors)
def view(self,id): if "repoze.who.identity" in request.environ: user = request.environ.get('repoze.who.identity')['user'] wholesale_tag = Session.query(UserTag).filter_by(tag='wholesale').one() if wholesale_tag in user.tags: c.wholesale = True try: product = Session.query(Product).filter_by(id=id).one() except: h.flash(_('No product exist with ID: %s')%id) redirect(url(controller='product',action='list')) if request.environ.get("repoze.who.identity") is not None: c.permissions = request.environ["repoze.what.credentials"]["permissions"] c.product = product c.menu_items = h.top_menu(self.menu_items,_('Products')) return render('/derived/product/view.html')
def validate_python(self,value, state): try: phone = Session.query(Phone).filter_by(phone_number=str(int(value))).one() except: return else: raise Invalid(_('This phone number allready registered an acount'),value,state)
def validate_python(self,value, state): try: emailad = Session.query(Email).filter_by(email_address=value).one() except: return else: raise Invalid(_('This email allready registered an acount'),value,state)
def _to_python(self,value,state): #items = value.items() try: customer = Session.query(User).filter(User.user_name.like('%%'+str(value)+'%%')).all() return customer except: raise Invalid("No User with name like this exists!", value, state)
def index(self,page=1): c.menu_items = h.top_menu(self.menu_items,_('Products')) products = Session.query(Product) c.paginator = paginate.Page(products, page=int(request.params.get('page', page)), items_per_page = 10) return render('/derived/product/index.html')
def render_edit_form_admin(menu_items,values=None, errors=None, id=None): if "repoze.who.identity" in request.environ: user = request.environ.get('repoze.who.identity')['user'] wholesale_tag = Session.query(UserTag).filter_by(tag='wholesale').one() if wholesale_tag in user.tags: c.wholesale = True c.menu_items = h.top_menu(menu_items,_('Shop online')) invoice = Session.query(Invoice).filter_by(id=int(id)).one() invoice_items = Session.query(Invoice_item).filter_by(invoice_id=invoice.id).order_by(Invoice_item.product_id).all() c.invoice_items = invoice_items c.invoice = invoice if values is None: return render('/derived/invoice/staff/edit.html') else : html = render('/derived/invoice/staff/edit.html') return htmlfill.render(html, defaults=values, errors=errors)
def index(self,page=1): c.menu_items = h.top_menu(self.menu_items,_('Home')) tags = Session.query(ProductTag) c.paginator = paginate.Page(tags, page=int(request.params.get('page', page)), items_per_page = 10) return render('/derived/producttag/staff/index.html')
def create_dict(user): adict = {} if user.phones != []: for i, phone in enumerate(user.phones): adict["phone-%s.phone_number" % i] = phone.phone_number adict["phone-%s.p_type" % i] = phone.p_type adict["phone-%s.id" % i] = phone.phone_number if user.addresses != []: for i, address in enumerate(user.addresses): adict["address-%i.city" % i] = address.city adict["address-%i.state" % i] = address.state adict["address-%i.add1" % i] = address.add1 adict["address-%i.add2" % i] = address.add2 adict["address-%i.po_code" % i] = address.po_code adict["address-%s.id" % i] = address.id if user.photo: adict["phto"] = user.photo if user.emails != []: for i, email in enumerate(user.emails): adict["email-%s.email_address" % i] = email.email_address adict["email-%s.confirm_email_address" % i] = email.email_address adict["email-%s.id" % i] = email.email_address if user.tags != []: tags = Session.query(UserTag).all() for i, tagp in enumerate(tags): for tag in user.tags: if tagp.tag == tag.tag: adict["tag-%s.%s" % (i, tag.id)] = 1 # adict['tagid-%s.id'%i]=tag.id if user.groups != []: groups = Session.query(Group).all() for i, group in enumerate(groups): for groupu in user.groups: if groupu.group == group.group: adict["role-%s.%s" % (i, group.id)] = 1 # adict['roleid-%s.id'%i] = group.id adict["first_name"] = user.first_name adict["last_name"] = user.last_name adict["user_name"] = user.user_name adict["password"] = "" adict["confirm_password"] = "" adict["birth_date"] = h.gtoj(user.birth_date) adict["SSN"] = user.SSN adict["balance"] = user.balance adict["cradit"] = user.cradit return adict
def update(self,id): values = dict(request.params) producttag = Session.query(ProductTag).filter_by(id=id).one() producttag.tag = values['producttag'] Session.add(producttag) Session.commit() h.flash(_("Tag %s edited successfully")%producttag.tag) return redirect(url(controller='producttag',action='index'))
def editbasket(self): if "repoze.who.identity" in request.environ: user = request.environ.get('repoze.who.identity')['user'] wholesale_tag = Session.query(UserTag).filter_by(tag='wholesale').one() if wholesale_tag in user.tags: c.wholesale=True if session.has_key('basket') and session['basket']!={}: products=[] for item in session['basket']: products.append(Session.query(Product).filter_by(id=item).one()) c.products = products c.menu_items = h.top_menu(self.menu_items,_('Shop online')) return render('/derived/product/editbasket.html') else: h.flash(_('No Items in basket')) return redirect(url(controller='product', action='list'))
def render_editbasket(menu_items,values=None, errors=None): products=[] for item in session['basket']: products.append(Session.query(Product).filter_by(id=item).one()) c.products = products c.menu_items = h.top_menu(menu_items,_('Products')) html = render('/derived/product/editbasket.html') return htmlfill.render(html,defaults=values, errors=errors)
def render_edit2_form(menu_items,values=None, errors=None, number_of_photos=0, id=None, photos=None): c.number_of_photos = number_of_photos c.tags = Session.query(ProductTag).all() c.menu_items = h.top_menu(menu_items,_('Products')) c.old_photos = photos c.product_id = id html = render('/derived/product/edit2.html') return htmlfill.render(html, defaults=values, errors=errors)
def edit(self,id): c.menu_items = h.top_menu(self.menu_items,_('Home')) c.action = "update" producttag = Session.query(ProductTag).filter_by(id=id).one() c.id=producttag.id values={} values['producttag'] = producttag.tag html = render('/derived/producttag/staff/new.html') return htmlfill.render(html,defaults=values)
def resetpassEmail(self, id): confcode = request.params.getone("confcode") try: user = Session.query(User).filter_by(id=id).one() userconf = ( Session.query(UserConfirm) .join(UserConfirm.user) .filter(User.id == user.id) .filter(UserConfirm.confirm_code == confcode) .one() ) except: h.flash(_("wrong reset confirmation info.")) return redirect(url(controller="home", action="index")) c.user = user c.confcode = userconf.confirm_code c.menu_items = h.top_menu(self.menu_items, _("Customers")) return render("/derived/user/resetpass.html")
def delete(self,id): invoice = Session.query(Invoice).filter_by(id=id).one() if is_met(has_permission('delete_invoice')): return self._delete(invoice) else: if invoice.customer == request.environ.get('repoze.who.identity')['user']: return self._delete(invoice) else: h.flash(_('You don not have enough permission to delete invoice')) return redirect(url(controller='invoice',action='index'))
def _to_python(self,value,state): taglist = value.split(',') tags=[] for item in taglist: try: producttag = Session.query(ProductTag).filter_by(tag=item).one() tags.append(producttag) except: raise Invalid("Invalid Product Tag %s"%item,value,state) return tags
def getpage(self): page = int(request.params.get("page")) photos = Session.query(Photo) itemspp = 30 if "itemspp" in request.params: itemspp = int(request.params.get("itemspp")) c.paginator = paginate.Page(photos, page=int(page), items_per_page=itemspp) return render("/derived/photo/photopage.html")
def fill(sefl,id): invoice = Session.query(Invoice).filter_by(id=id).one() for item in invoice.invoice_items: if session.has_key('basket'): session['basket'][item.product.id]=item.quantity else: session['basket']={item.product.id:item.quantity} session.save() h.flash(_("Invoice content successfully added to basket")) return redirect(url(controller="product",action="editbasket"))
def _proccess_form(self, action, values, postto, id=-1, renderer=None): render_form = renderer if action.startswith(_("Add")): if action.endswith(_("Email")): return render_form(self.menu_items, action=postto, id=id, values=values, add_number_of_emails=1) elif action.endswith(_("Address")): return render_form(self.menu_items, action=postto, id=id, values=values, add_number_of_addresses=1) elif action.endswith(_("Phone")): return render_form(self.menu_items, action=postto, id=id, values=values, add_number_of_phones=1) elif action.startswith(_("Remove")): if action.count(_("Phone")) != 0: if id != -1 and values["phone-%i.id" % int(action.split(" ")[-1])] != "": ph_idf = int(action.split(" ")[-1]) ph = values["phone-%i.id" % ph_idf] phone = Session.query(Phone).filter_by(phone_number=ph).one() Session.delete(phone) Session.commit() new_values = remove_item(values, action, "phone") return render_form(self.menu_items, action=postto, id=id, values=new_values) elif action.count(_("Email")) != 0: if id != -1 and values["email-%i.email_address" % int(action.split(" ")[-1])] != "": em_idf = int(action.split(" ")[-1]) em = values["email-%i.email_address" % em_idf] email = Session.query(Email).filter_by(email_address=em).one() Session.delete(email) Session.commit() new_values = remove_item(values, action, "email") return render_form(self.menu_items, action="create", id=id, values=new_values) elif action.count(_("Address")) != 0: if id != -1 and values["address-%i.id" % int(action.split(" ")[-1])] != "": add_idf = int(action.split(" ")[-1]) add_id = int(values["address-%i.id" % add_idf]) address = Session.query(Address).filter_by(id=add_id).one() Session.delete(address) Session.commit() new_values = remove_item(values, action, "address") return render_form(self.menu_items, action=postto, id=id, values=new_values) return False
def view(self, id): if is_met(has_permission("view_user")): try: user = Session.query(User).filter_by(id=id).one() except: h.flash(_("No user with ID:%s to view") % id) return redirect(h.url(controller="user", action="index")) c.menu_items = h.top_menu(self.menu_items, _("Customers")) c.user = user return render("/derived/user/staff/view.html") else: return redirect(url(controller="user", action="index"))
def undelete(self, id): came_from = str(request.GET.get("came_from", "")) or url(controller="user", action="admin") try: user = Session.query(User).filter_by(id=id).one() except: h.flash(_("No user with ID:%s to delete" % id)) return redirect(h.url(controller="user", action="index")) user.deleted = False Session.add(user) Session.commit() h.flash(_("User %s undeleted!") % user.user_name) return redirect(came_from)
def render_form( menu_items, values=None, action="submit", id=-1, errors=None, add_number_of_addresses=0, add_number_of_emails=0, add_number_of_phones=0, ): c.number_of_addresses = number_of_addresses(values) + add_number_of_addresses c.number_of_emails = number_of_emails(values) + add_number_of_emails c.number_of_phones = number_of_phones(values) + add_number_of_phones c.menu_items = h.top_menu(menu_items, _("Customers")) # c.roles = ['test1','test2'] c.roles = Session.query(Group).all() c.tags = Session.query(UserTag).all() c.action = action c.id = id html = render(path.join(get_lang()[0], "derived/user/staff/new.mako")) return htmlfill.render(html, defaults=values, errors=errors)