Exemplo n.º 1
0
 def create(self):
     values = dict(request.params)
     producttag = ProductTag(values['producttag'])
     Session.add(producttag)
     Session.commit()
     h.flash(_("Product tag %s created successfully")%values['producttag'])
     return redirect(url(controller='producttag',action='index'))
Exemplo n.º 2
0
 def create(self):
     values = dict(request.params)
     usertag = UserTag(values['usertag'])
     Session.add(usertag)
     Session.commit()
     h.flash(_("User tag %s created successfully")%values['usertag'])
     return redirect(url(controller='usertag',action='index'))
Exemplo n.º 3
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'))
Exemplo n.º 4
0
 def create(self):        
     #if Session.query(Group).filter_by(group=request.POST['group']).one() != None:
         #abort(404)
     newgroup = Group(request.POST['group'])
     newgroup.permissions = self.form_result['permissions']         
     Session.add(newgroup)
     Session.commit()
     h.flash(_('Group successfully Created.'))
     redirect(url(controller='addgroup', action='list'))
Exemplo n.º 5
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)
Exemplo n.º 6
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'))
Exemplo n.º 7
0
 def save(self,id):
     if id is None:
         abort(404)
     group = self.form_result['group']
     del self.form_result['group']
     for k,v in self.form_result.items():
         if getattr(group, k) != v:
             setattr(group, k, v)        
     Session.add(group)
     Session.commit()
     response.status_int = 302
     response.headers['location'] = url(controller='addgroup', action='list')
     return "Moved temporarily"
Exemplo n.º 8
0
    def upload(self):
        values = dict(request.params)
        overwrite = False
        if "files[]" in values:
            picfile = values["files[]"]
            fname = picfile.filename.replace(os.sep, "_")
            file_path = os.path.join(config["pylons.paths"]["static_files"], "pics", fname)
            if os.path.isfile(file_path):
                overwrite = True
            thumb_path = os.path.join(config["pylons.paths"]["static_files"], "pics", "thumbs", fname)
            watermark_path = os.path.join(config["pylons.paths"]["static_files"], "pics", "watermark2.PNG")
            permanent_file = open(file_path, "wb")
            shutil.copyfileobj(picfile.file, permanent_file)
            picfile.file.close()
            fsize = os.fstat(permanent_file.fileno())[6]
            if not overwrite:
                photo = Photo(fname)
                Session.add(photo)
                Session.commit()
            else:
                photo = Session.query(Photo).filter_by(file_path=fname).one()
            permanent_file.close()
            # use image magic to resize and water mark the photo
            call(["convert", file_path, "-strip", file_path])
            # convert "prepared/$i" -colorspace RGB "prepared/$i"
            call(["convert", file_path, "-colorspace", "RGB", file_path])
            # convert -resize 300x300 -quality 70% $img $img
            call(["convert", "-resize", "300x300", "-quality", "70%%", file_path, file_path])
            # convert -define jpeg:size=200x200 "$i" -thumbnail '69x69>' "thumbs/$i
            call(["convert", "-define", "jpeg:size=200x200", file_path, "-thumbnail", "69x69>", thumb_path])
            # composite -dissolve 6 -tile watermark2.PNG $img $img
            call(["composite", "-dissolve", "6", "-tile", watermark_path, file_path, file_path])

            session["photos"]["files"].append({"name": fname, "size": fsize, "id": photo.id})
            session.save()
        retval = []
        for item in session["photos"]["files"]:
            retdict = dict()
            retdict["name"] = item["name"]
            retdict["size"] = item["size"]
            retdict["id"] = item["id"]
            retdict["type"] = ("image\/jpeg",)
            retdict["url"] = "/pics/%s" % item["name"]
            retdict["thumbnail_url"] = "/pics/thumbs/%s" % item["name"]
            retdict["delete_url"] = "/photo/delete?id=%s" % item["id"]
            retdict["delete_type"] = "DELETE"
            if overwrite:
                retdict["info"] = "File over writen on photo with id %s" % item["id"]
            retval.append(retdict)

        return retval
Exemplo n.º 9
0
    def forgotaction(self):
        values = dict(request.params)
        del values["action"]
        msg = ""
        settingsf = file(config["settings_file"], "rb")
        session["site_settings"] = pickle.load(settingsf)
        settingsf.close()
        session.save()

        captchres = h.captcha.submit(
            values["recaptcha_challenge_field"],
            values["recaptcha_response_field"],
            "6LepGccSAAAAAMfzDtmvyRjJ7-A1FWuJa5qUTxX2",
            session["site_settings"]["ip_address"],
        )
        if not captchres.is_valid:
            c.menu_items = h.top_menu(self.menu_items, _("Customers"))
            html = render("/derived/user/forgot.html")
            return htmlfill.render(html, values, errors={"captcha": _("Invalid Captcha try again")})

        user = Session.query(User).join(User.emails).filter(Email.email_address == values["email"]).one()
        confcode = str(uuid.uuid1())
        uconf = UserConfirm(user, confcode)
        Session.add(uconf)
        Session.commit()

        message = Message(
            session["site_settings"]["forgotpass"],
            user.emails[0].email_address,
            _("Kazhal trading Reset password"),
            encoding="utf-8",
        )
        msg += _("If you requested a password reset click the below link\n")
        ##msg += "%s%s"%(request.application_url,h.url(controller='user',action='resetpassEmail',id=user.id,confcode=confcode))
        msg += "%s%s" % (
            request.application_url,
            url(controller="user", action="resetpassEmail", id=user.id, confcode=confcode),
        )
        c.contents = msg
        msgHtml = render(_("/derived/emails/forgotpass.html"))
        message.rich = msgHtml
        message.plain = msg
        message.send()
        h.flash(
            _(
                "An email has been sent to your address.To reset your password check your email and  click on the confirm link."
            )
        )
        return redirect(url(controller="user", action="forgot"))
Exemplo n.º 10
0
 def _save(self,result,invoice):
     invoice_totalprice = 0
     invoice.Description = result['status']
     for item in result['items']:
         id = item['id']
         invoice_item = Session.query(Invoice_item).filter_by(id=id).one()
         product = invoice_item.product                                  
         invoice_item.quantity = item['quantity']
         invoice_item.unitprice = item['unitprice']
         invoice_item.total_price =item['quantity']*item['unitprice']
         Session.add(invoice_item)                
         invoice_totalprice += invoice_item.total_price
     invoice.total_price = invoice_totalprice 
     Session.add(invoice)
     Session.commit()
Exemplo n.º 11
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)
Exemplo n.º 12
0
    def confirmuser(self):
        confirmcode = request.GET.get("confirmcode", "")
        try:
            conf = Session.query(UserConfirm).filter_by(confirm_code=confirmcode).one()
        except:
            h.flash(_("Wrong confirmation code"))
            redirect(url(controller="home", action="index"))
        if conf.confirm_code[:3] != u"cu-":
            h.flash(_("Not a user confirmation"))
            redirect(url(controller="product", action="list"))

        user = conf.user
        user.pending = False
        Session.add(user)
        Session.delete(conf)
        Session.commit()

        h.flash(_("Confirmation ok. you can now login with your user name and password"))
        redirect(url(controller="home", action="index"))
Exemplo n.º 13
0
 def _delete(self,invoice):
     if not invoice.pending:
         h.flash(_('You can not delete a confirmed invoice.'))
         return redirect(h.url(controller='invoice',action='index'))
     invoice.deleted = True
     customer = invoice.customer
     invoice_items=[]
     for invoice_item in invoice.invoice_items:            
         product = invoice_item.product
         product.quantity += invoice_item.quantity
         customer.balance += invoice_item.total_price
         Session.add(customer)
         Session.add(product)                
         Session.add(invoice_item) 
     Session.add(invoice)
     Session.commit()
     h.flash(_('Invoice %s was marked as deleted')%invoice.id)
     return redirect(url(controller='invoice',action='index'))
Exemplo n.º 14
0
 def _confirm(self,invoice):
     customer = invoice.customer
     if not is_met(has_permission('confirm_invoice')):
         h.flash(_("You don't have enough permision to confirm ivoice"))
         return redirect(url(controller='invoice', action='edit',id=invoice.id))
     if invoice.total_price > customer.balance + customer.cradit:
         h.flash(_("Customer balance is low. <a href='%s'>Give him enough cradit or contanct him about the funds</a>")%url(controller='user',action='edit',id=customer.id))
         invoice.Description = _("Low balance")
         Session.add(invoice)
         Session.commit()
         return redirect(url(controller='invoice',action='edit',id=invoice.id))
     invoice_id = invoice.id
     invoice_items=[]
     for invoice_item in invoice.invoice_items:            
         product = invoice_item.product
         product.quantity -= invoice_item.quantity                 
         customer.balance -= invoice_item.total_price
         Session.add(product)
         Session.add(customer)
     invoice.pending = False
     Session.add(invoice)
     Session.commit()        
Exemplo n.º 15
0
                    #composite -dissolve 6 -tile watermark2.PNG $img $img 
                    call(['composite','-dissolve','6','-tile',watermark_path,file_path,file_path])		    

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

    @ActionProtector(in_group('admin'))
    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()
Exemplo n.º 16
0
    def createcustomer(self):
        readsettings()
        values = dict(request.params)
        # create the pending user
        captchres = h.captcha.submit(
            values["recaptcha_challenge_field"],
            values["recaptcha_response_field"],
            "6LepGccSAAAAAMfzDtmvyRjJ7-A1FWuJa5qUTxX2",
            session["site_settings"]["ip_address"],
        )
        if not captchres.is_valid:
            c.menu_items = h.top_menu(self.menu_items, _("Customers"))
            c.came_from = values["came_from"]
            if request.GET.get("came_from", None):
                h.flash(_("After filling the from you will be sent back to your shopping cart"))
            html = render("/derived/user/new.html")
            return htmlfill.render(html, values, errors={"captcha": _("Invalid Captcha try again")})
        email = Email(email_address=self.form_result["email"], user=None)
        phone = Phone(None, str(self.form_result["phone"]), None)
        newcustormer = User(
            first_name=self.form_result["first_name"],
            last_name=self.form_result["last_name"],
            user_name=self.form_result["email"],
            password=self.form_result["password"],
            user_groups=[Session.query(Group).filter_by(group="customer").one()],
            SSN=None,
            birth_date=None,
            balance=0,
            photo=None,
            addresses=[],
            customer_invoices=[],
            staff_invoices=[],
            emails=[email],
            phones=[phone],
            deleted=False,
            pending=True,
        )
        # create the confirm link
        Session.add(newcustormer)

        # confurlcode = randint(10e40,10e49)
        confurlcode = str(uuid.uuid1())
        confurlcode = "cu-" + confurlcode

        conf = UserConfirm(newcustormer, confurlcode)
        Session.add(conf)

        newcustormer.confirmcode = [conf]
        Session.add(newcustormer)

        message = Message(
            session["site_settings"]["userconf"], self.form_result["email"], _("User registration"), encoding="utf-8"
        )
        plain = (
            "someone (hopefully you) registered an account with"
            + str(request.application_url)
            + "<br/>"
            + "for confirming your registration click the below link"
            + "<br/>"
            + unicode(request.application_url + url(controller="user", action="confirmuser", confirmcode=confurlcode))
            + "<br/>"
            + "After confirmation you can login with your Email address and password."
        )
        c.confurlcode = confurlcode
        registerHtml = render(_("/derived/emails/register.html"))
        message.plain = plain
        message.rich = registerHtml
        try:
            message.send()
        except:
            Session.delete(conf)
            Session.delete(phone)
            Session.delete(email)
            Session.delete(newcustormer)
            Session.rollback()
            h.flash(_("smtp error try again"))
            redirect(values["came_from"])

        Session.commit()
        h.flash(
            _(
                "Check your email and click the activation link after logging in you can continue with the purchuse in Shop online page"
            )
        )
        redirect(values["came_from"])
Exemplo n.º 17
0
    def _save(self, result, user=None):
        addresses = []
        emails = []
        phones = []
        if user:
            for address in result["address"]:
                if address["id"]:
                    add = Session.query(Address).filter_by(id=address["id"]).one()
                    add.city = address["city"]
                    add.add1 = address["add1"]
                    add.add2 = address["add2"]
                    add.state = address["state"]
                    add.po_code = address["po_code"]
                    addresses.append(add)
                else:
                    addresses.append(
                        Address(
                            address["city"],
                            address["add1"],
                            address["add2"],
                            address["state"],
                            address["po_code"],
                            user,
                            None,
                        )
                    )
        else:
            for address in result["address"]:
                addresses.append(
                    Address(
                        address["city"],
                        address["add1"],
                        address["add2"],
                        address["state"],
                        address["po_code"],
                        None,
                        None,
                    )
                )
        if result.has_key("email"):
            if user:
                for email in result["email"]:
                    if email["id"]:
                        em = Session.query(Email).filter_by(email_address=email["id"]).one()
                        em.email_address = email["email_address"]
                        emails.append(em)
                    else:
                        emails.append(Email(email["email_address"], user))
            else:
                for email in result["email"]:
                    emails.append(Email(email["email_address"], None))
        for phone in result["phone"]:
            if user:
                if phone["id"]:
                    ph = Session.query(Phone).filter_by(phone_number=str(phone["id"])).one()
                    ph.p_type = phone["p_type"]
                    ph.phone_number = str(phone["phone_number"])
                    phones.append(ph)
                else:
                    phones.append(Phone(phone["p_type"], str(phone["phone_number"]), user))
            else:
                phones.append(Phone(phone["p_type"], str(phone["phone_number"]), None))

        photo = None
        if result["photo"]:
            picfile = result["photo"]
            permanent_file = open(
                os.path.join(config["pylons.paths"]["static_files"], "pics", picfile.filename.replace(os.sep, "_")),
                "wb",
            )
            shutil.copyfileobj(picfile.file, permanent_file)
            picfile.file.close()
            photo = Photo(permanent_file.name.split("/")[-1])

        if user:
            # do something to compare this two lists of Objects instead of asigning the whole list every time
            if user.first_name != result["first_name"]:
                user.first_name = result["first_name"]
            if user.last_name != result["last_name"]:
                user.last_name = result["last_name"]
            if user.birth_date != result["birth_date"]:
                user.birth_date = result["birth_date"]
            if user.SSN != result["SSN"]:
                user.SSN = result["SSN"]
            if "password" in result and result["password"] != "":
                user._set_password(result["password"])

            if addresses != []:
                try:
                    user.addresses = addresses
                    Session.add_all(addresses)
                    Session.commit()
                except:
                    Session.rollback()
                    return False

            if emails != []:
                try:
                    user.emails = emails
                    Session.add_all(emails)
                    Session.commit()
                except:
                    Session.rollback()
                    return False

            if phones != []:
                try:
                    user.phones = phones
                    Session.add_all(phones)
                    Session.commit()
                except:
                    Session.rollback()
                    return False

            if photo:
                try:
                    user.photo = photo
                except:
                    Session.rollback()
                    return False

            if result.has_key("role") and result.has_key("tag"):
                # for i,group in enumerate(result['role']):
                # for group2 in user.groups:
                # if group2.group == group.group:
                # result['role'].pop(i)
                if result["role"] != []:
                    user.groups = result["role"]
                # for i,tag in enumerate(result['tag']):
                # for tag2 in user.tags:
                # if tag.tag == tag2.tag:
                # result['tag'].pop(i)
                if result["tag"] != []:
                    user.tags = result["tag"]
                if result["balance"] != user.balance:
                    user.balance = result["balance"]
                if user.cradit != result["cradit"]:
                    user.cradit = result["cradit"]
                if user.deleted != result["deleted"]:
                    user.deleted = result["deleted"]

        else:
            user = User(
                result["first_name"],
                result["last_name"],
                result["user_name"],
                result["password"],
                result["role"],
                result["SSN"],
                result["birth_date"],
                result["balance"],
                photo,
                False,
                addresses,
                [],
                [],
                emails,
                phones,
                result["tag"],
                result["cradit"],
                False,
            )
        Session.add(user)
        try:
            Session.commit()
        except:
            Session.rollback()
            return False
        return True
Exemplo n.º 18
0
            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")

    @ActionProtector(is_anonymous())
    def resetpassEmailaction(self):
        values = dict(request.params)
        user = Session.query(User).filter_by(id=values["userid"]).one()
        schema = ResetpassEmail()
        try:
            resutl = schema.to_python(values, c)
        except Invalid, e:
            c.user = user
            c.confcode = values["confcode"]
            c.menu_items = h.top_menu(self.menu_items, _("Customers"))
            html = render("/derived/user/resetpass.html")
            return htmlfill.render(
                html, values, errors=variabledecode.variable_encode(e.unpack_errors() or {}, add_repetitions=False)
            )

        userconf = Session.query(UserConfirm).filter_by(confirm_code=values["confcode"]).one()
        user._set_password(resutl["password"])
        Session.add(user)
        Session.delete(userconf)
        Session.commit()
        h.flash(_("password resert succeffuly."))
        return redirect(url(controller="account", action="login"))
Exemplo n.º 19
0
    def create(self):
        action = request.params.getone('action')
        values = dict(request.params)
        del values['action']
        if action == _('Add Photo'):
            return render_new_form(
                self.menu_items,
                values=values,
                number_of_photos = number_of_photos(values) + 1
            )
        if action.startswith(_('Remove')):
            new_values = remove_item(values,action,'photo')                
            return render_new_form(
                self.menu_items,
                values=new_values,                
                number_of_photos = number_of_photos(new_values)
            )
        if action == _('Save'):
            schema = NewProductForm()
            try:
                result = schema.to_python(dict(request.params), c)
            except Invalid, e:
                return render_new_form(
                    self.menu_items,
                    values=values,
                    errors=variabledecode.variable_encode(
                        e.unpack_errors() or {},
                        add_repetitions=False
                        ),
                    number_of_photos=number_of_photos(values)
                )
            else:
                #save the f*****g photo
                photos =[]
                for picfile in result['photo']:                    
                    permanent_file = open(
                        os.path.join(
                            config['pylons.paths']['static_files'],
                            'pics',
                            picfile.filename.replace(os.sep, '_')
                            ),
                        'wb'
                    )
                    shutil.copyfileobj(picfile.file, permanent_file)
                    picfile.file.close()
                    photos.append(Photo(permanent_file.name.split('/')[-1]))
                    permanent_file.close()
                product = Product(
                    result['name'],
                    result['description'],
                    result['quantity'],
                    result['buy_price'],
                    result['sell_price'],
                    result['buy_date'],
                    result['brand'],
                    photos,
                    result['tag']
                )
                product.code = result['code']
                product.wholesale_price = result['wholesale_price']
                product.deleted = False
                Session.add(product)
                Session.commit()

                h.flash(_('Product added successfully.'))
                redirect(url(controller='product', action='index'))    
Exemplo n.º 20
0
    def save(self):
        values = dict(request.params)
        photos_inform=[]
        for item in values:
            if item.startswith('product_id'):
                product_id = item.split('.')[-1]
            if item.startswith('oldphoto'):
                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.startswith('Delete Photo'):                        
            photos = []
            photo_id = int(action.split(' ')[-1])
            for photo in product.photos:
                if photo.id != photo_id and photo.id in photos_inform:
                    photos.append(photo)
            #delte photo_id from disk and data base too
            for photo in product.photos:
                if photo.id == photo_id:
                    path = os.path.join(config['here'],'kazhal','public','pics',photo.file_path)
                    os.remove(path)
                    Session.delete(photo)
                    Session.commit()
            #end of delete procedure

            product.photos = photos
            Session.add(product)
            Session.commit()

            new_values = remove_item(values,action,'oldphoto')              
            return render_edit_form(self.menu_items,
                                    new_values,
                                    id=product_id,
                                    number_of_photos=number_of_photos(new_values),
                                    photos=photos)

        elif action.startswith(_('Remove photo')):
            new_values = remove_item(values,action,'photo')                
            return render_edit_form(
                self.menu_items,
                values=new_values,
                id=product_id,
                number_of_photos = number_of_photos(new_values),
                photos = product.photos
            )

        elif action == _('Add Photo'):
            return render_edit_form(
                self.menu_items,
                values=values,
                id=product_id,
                number_of_photos = number_of_photos(values)+1,
                photos = product.photos
            )
        else: #action is save
            schema = NewProductForm()
            try:
                result = schema.to_python(dict(request.params), c)
            except Invalid, e:
                return render_edit_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:  
Exemplo n.º 21
0
 def undelete(self,id):
     product = Session.query(Product).filter_by(id=id).one()
     product.deleted = False
     Session.add(product)
     Session.commit()
     return redirect(request.environ['HTTP_REFERER'])
Exemplo n.º 22
0
    def savebasket(self):
        wholesale = False
        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:
                wholesale = True
                c.wholesale=True

        values = dict(request.params)
        action = request.params.getone('action')
        del values['action']

        if action == _('Remove all items from basket'):
            session['basket'] = {}
            h.flash(_('All items removed from basket'))
            session.save()            
            redirect(url(controller='product', action='list'))

        if action.startswith(_('Remove item')):
            gid = int(action.split(' ')[-1])
            for item in values:
                if item.startswith('quantityid-%s'%gid):
                    id = int(values[item])
            del session['basket'][id]
            session.save()
            newvalues = remove_item(values,action,'quantity')
            newvalues = remove_item(newvalues,action,'quantityid')
            return render_editbasket(self.menu_items,values=newvalues)

        if action == _('Buy'):
            identity = request.environ.get('repoze.who.identity')            
            if identity is None:
                redirect(
                    url(controller='account',
                        action='login',
                        came_from=url(controller='product', action='editbasket')
                        )
                )
            schema = Editbasket()
            try:
                result = schema.to_python(dict(request.params), c)
            except Invalid, e:
                return render_editbasket(self.menu_items,values=values, errors=variabledecode.variable_encode(
                    e.unpack_errors() or {},
                    add_repetitions=False)
                                         )               
            else:
                for i in range(len(result['quantityid'])):
                    session['basket'][result['quantityid'][i]] = result['quantity'][i]
                session.save()
                # create pending invoices. email to customer and email to sales
                user = Session.query(User).filter_by(id=session['user']).one()
                items=[]
                dt = datetime.now()
                productsmsg= ""
                total = 0
                invoice = Invoice(dt,user,None,None,0,[],True)
                for id in session['basket']:
                    product = Session.query(Product).filter_by(id=id).one()                    
                    quantity = session['basket'][id]
                    if wholesale:
                        price = product.wholesale_price
                    else:
                        price = product.sell_price
                    totprice = quantity * price
                    productsmsg +='<p>'+_('Code')+' :'+str(product.code)+'<br/>'+_('Name')+' :' + product.name+'<br/>'+_('Unit price')+' :'+str(price)+'<br/>'+_('Quantity')+' :'+str(quantity)+'<br/>'+_('Total price')+' :'+str(totprice)+'<br/>'+'</p>'+'<hr>'
                    total += totprice
                    item = Invoice_item(product,
                                        invoice,                                 
                                        quantity,
                                        totprice,
                                        unitprice=price
                                        )
                    items.append(item)
                invoice.invoice_items = items
                invoice.total_price = total
                Session.add(invoice)
                #Session.commit()

                customer_message = Message(session['site_settings']['invoicealertfrom'],
                                           #user.emails[0].email_address, 
                                           "*****@*****.**",
                                           _("your order details from Kazhal"),
                                           encoding='utf-8')		    
                plain = _("You placed an order of the following items with Kazhal")+' :'+ productsmsg + "<br/>"+ _("Total price")+' :'+str(total) +"<br/>"+_("our staff will contact you to confirm the purchase.<br/>Thank you.<br/>Kazhal")		
                c.usermsg =  _("You placed an order of the following items with Kazhal")+_("our staff will contact you to confirm the purchase.<br/>Thank you.<br/>Kazhal")		
                c.user = user
                c.invoice = invoice
                c.total = total		
                customerHtml = render(_('/derived/emails/customer_invoice.html'))
                customer_message.rich = customerHtml
                customer_message.plain = plain

                splain = _("User")+u' :'+user.user_name +u'<br/>'+_("Phone")+u' :'+unicode([int(phone.phone_number) for phone in user.phones])[1:-1]+u'<br/>'+ _("Items")+u' :'+productsmsg+u'<br/>'+_("Total price")+u" :"+unicode(total)+u'<br/>'
                splain += unicode(h.link_to(_("Click here to confirm the order."),((request.application_url)+url(controller='invoice',action='confirm',id=invoice.id))))
                c.usermsg = unicode(h.link_to(_("Click here to confirm the order."),((request.application_url)+url(controller='invoice',action='confirm',id=invoice.id))))
                salesHtml = render(_('/derived/emails/customer_invoice.html'))
                sales_messages=[]
                for email in session['site_settings']['invoicealertmail'].split(','):
                    sales_message=Message(session['site_settings']['invoicealertfrom'],
                                          email,
                                          _("User ")+user.user_name+_(" placed an order"),
                                          encoding='utf-8')
                    sales_message.plain=splain		
                    sales_message.rich = salesHtml
                    sales_messages.append(sales_message)
                try:			    
                    customer_message.send()		
                    for message in sales_messages:
                        message.send()		    
                except: 
                    Session.rollback()		
                    h.flash(_('For some technical reasons we are unable to accept orders online for now please contact us by phone.(SMTP Error)'))
                    redirect(url(controller='product', action='editbasket'))
                Session.commit()
                session['basket']={}
                session.save()
                h.flash(_('An email has beed sent to you with the detail of your purchase our staff will call you for further details'))		    
                redirect(url(controller='product', action='list'))
Exemplo n.º 23
0
                return redirect(url(controller='invoice', action='edit',id=invoice_id))
            item_id =int(action.split('_')[-1])
            invoice_items=[]
            totalprice = 0
            for invoice_item in invoice.invoice_items:            
                if invoice_item.id != item_id:
                    invoice_items.append(invoice_item)
                    totalprice += invoice_item.total_price
                else:
                    delitem = invoice_item
                if invoice.pending is False:                            
                    product = invoice_item.product
                    product.quantity += invoice_item.quantity                
                    customer.balance += invoice_item.total_price
                    #send mail to customer about returning founds?
                    Session.add(customer)
                    Session.add(product)                

            invoice.invoice_items= invoice_items
            invoice.total_price = totalprice
            Session.add(invoice)
            Session.delete(delitem)                                
            Session.commit()
            return redirect(url(controller='invoice',action='edit',id=invoice.id))

        elif action.startswith('Delete invoice'):
            return self._delete(invoice)

        elif action == 'recalc price':
            totalprice=0
            for item in result['items']: