Exemplo n.º 1
0
 def index(self,id=None,page=1):       
     identity = request.environ.get('repoze.who.identity')
     c.menu_items = h.top_menu(self.menu_items,_('Shop online'))
     if is_met(in_group('customer')):
         if session.has_key('invoice_querystr'):
             invoices2 = eval(session['invoice_querystr']+".order_by(desc(Invoice.date_time))")
             #invoices = Session.query(Invoice).filter_by(customer=identity['user']).filter_by(deleted=False).order_by(Invoice.date_time)                
             c.paginator = paginate.Page(invoices2,
                                         page=int(request.params.get('page',page)),
                                         items_per_page=10)
             html = render('/derived/invoice/customer/index.html')
             return htmlfill.render(html, defaults=session['invoice_search_values'], errors={})
         else:
             invoices = Session.query(Invoice).filter_by(customer=identity['user']).filter_by(deleted=False).order_by(desc(Invoice.date_time))
             c.paginator = paginate.Page(invoices,
                                         page=int(request.params.get('page',page)),
                                         items_per_page=10)                                                 
             return render('/derived/invoice/customer/index.html')
  
     else:
         h.flash(_('Please take a few moments to %s\n')%(h.link_to(_("register"),url(controller="user", action="new"))))
         return redirect(url(controller='home',action='index'))
Exemplo n.º 2
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'))