Beispiel #1
0
    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'))
Beispiel #2
0
 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)
Beispiel #3
0
    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')
Beispiel #4
0
 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)
Beispiel #5
0
    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'))
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
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)
Beispiel #9
0
 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')
Beispiel #10
0
 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)
Beispiel #11
0
 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)
Beispiel #12
0
 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)
Beispiel #13
0
 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')                       
Beispiel #14
0
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)
Beispiel #15
0
 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')
Beispiel #16
0
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
Beispiel #17
0
 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'))
Beispiel #18
0
    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'))
Beispiel #19
0
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)
Beispiel #20
0
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)
Beispiel #21
0
 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)
Beispiel #22
0
 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")
Beispiel #23
0
 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'))
Beispiel #24
0
 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    
Beispiel #25
0
    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")
Beispiel #26
0
 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"))
     
Beispiel #27
0
    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
Beispiel #28
0
 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"))
Beispiel #29
0
 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)
Beispiel #30
0
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)