Example #1
0
def pagar_carrito():
    if request.method == "POST":
        provincia = request.form["provincia"]
        distrito = request.form["distrito"]
        direccion = request.form["direccion"]
        dir_envio = provincia + " / " + distrito + " / " + direccion
        comprobante = request.form["comprobante"]
        paytoken = request.form["paytoken"]
        payamount = request.form["payamount"]

        status = "Pagado"

        ## Capturamos la fecha
        now1 = dt.now()
        fecha = now1.strftime('%Y-%m-%d %H:%M:%S')

        carritoNew = Pedido(codigo_usuario=int(session['user_id']),
                            estado=status,
                            tipo_comprobante=comprobante,
                            hashCulqi=paytoken,
                            direccion_envio=dir_envio,
                            pago=payamount,
                            fecha_emision=fecha)

        crearCarrito = carritoNew.agregarPedido()

        if crearCarrito:
            session.pop('product_list', None)
            session.pop('precio_total', None)
            msg = "Se ha registrado tu compra"
            return render_template('carts/view.html', msg=msg)
        else:
            error = 'Hubo un error al procesar la compra'
            return render_template('carts/view.html', error=error)
    return render_template('carts/list.html')
Example #2
0
def add_pedido():
    ubicacion = request.get_json()["ubicacion"]
    cliente_id = request.get_json()["cliente_id"]
    producto_id = request.get_json()["producto_id"]
    Pedido.create(ubicacion=ubicacion,
                  cliente_id=cliente_id,
                  producto_id=producto_id)
    return jsonify(request.get_json())
Example #3
0
 def clear_pedidos(self):
     self.lista.rm_all_widgets()
     self.pedido = Pedido()
     self.btnPedido.disabled = True
     self.btnAtras.disabled = False
     self.total = 0
     self.des = "Pedido {0: >10} articulos".format(0)
     self.dbCliente = None
Example #4
0
 def pedido_domicilio(self, db):
     self.dbCliente = db
     self.lista.rm_all_widgets()
     self.pedido = Pedido()
     self.btnPedido.disabled = True
     self.btnAtras.disabled = False
     self.total = 0
     self.des = "Pedido {0: >10} articulos".format(0)
     self.linea_nueva()
Example #5
0
def findPedidos(nroFrom):
    clientes = Cliente.all()
    app.logger.debug(jsonify(clientes))
    idCliente = 0
    for objCliente in clientes:
        app.logger.debug(objCliente.telefono)
        if (nroFrom[9:] == objCliente.telefono):
            idCliente = objCliente.id
            break
    app.logger.debug(idCliente)
    pedidos = Pedido.all()
    idsPedidos = ''
    for objPedidos in pedidos:
        if (objPedidos.cliente_id == idCliente):
            app.logger.debug(objPedidos.id)
            idsPedidos += str(objPedidos.id) + ' '
            break
    respuesta = ''
    if idsPedidos == '':
        respuesta = 'No hay pedidos para tu número de telefono'
    else:
        respuesta = 'Escribe el número de pedido para ver el detalle: ' + idsPedidos
        respuesta += ' en este formato *mipedido <id_pedido>*'
    #pedidos = .where('votes', '>', 100).update(status=2)
    resp = MessagingResponse()
    msg = resp.message()
    msg.body(respuesta)
    return str(resp)
Example #6
0
def makePedidoByRequest(request):
    listadoMacetas = []
    for i in range(int(request.form["cantModelos"])):
        codigo = request.form["codigoNew" + str(i)]
        cantSolicitada = int(request.form["cantSolicitada" + str(i)])
        maceta = Maceta(codigo, cantSolicitada)
        listadoMacetas.append(maceta)
    return Pedido(listadoMacetas, "")
Example #7
0
def show_estado(nroFrom):
    resp = MessagingResponse()
    msg = resp.message()
    app.logger.debug(nroFrom[9:100])
    clnt = Cliente.where('número_telefonico', nroFrom[9:100]).first()
    usr_nombre = clnt.nombre
    usr_id = clnt.id
    app.logger.debug(usr_id)
    ped = Pedido.where('cliente_id', usr_id).first()
    usr_fec_entrg = ped.fecha_entrega
    msg.body('Hola ' + usr_nombre +
             ', tienes un pedido con entrega para el día ' +
             str(usr_fec_entrg) +
             '\nEscriba menu para volver a ver las opciones.')
    return str(resp)
Example #8
0
def pedidos_create():
    if request.method == 'GET':
        clientes = cliente_repository.get()
        produtos = produto_repository.get()

        return render_template("pedido/create.html",
                               clientes=clientes,
                               produtos=produtos)
    else:
        req = request.get_json()
        item = req['item']
        pedido = Pedido(req['idCliente'], item)

        pedido_repository.save(pedido)

        return jsonify({'status': 'success'})
Example #9
0
def get_prodcutoid(pedido_id):
    ped = Pedido.find(int(pedido_id))
    id = ped.id
    clnt_id = ped.cliente_id
    fct_id = ped.factura_id
    fch_desp = ped.fecha_despacho
    fch_ent = ped.fecha_entrega
    est = ped.estado
    dict_pedido = {
        'id': id,
        'cliente_id': clnt_id,
        'factura_id': fct_id,
        'fecha_despacho': fch_desp,
        'fecha_entrega': fch_ent,
        'estado': est
    }
    return dict_pedido
Example #10
0
def pedido_all():
    pedidos = Pedido.all()
    for ped in pedidos:
        id_p = ped.id
        clnt_id = ped.cliente_id
        fct_id = ped.factura_id
        fch_desp = ped.fecha_despacho
        fch_ent = ped.fecha_entrega
        est = ped.estado
        dict_pedido = {
            'id': id_p,
            'cliente_id': clnt_id,
            'factura_id': fct_id,
            'fecha_despacho': fch_desp,
            'fecha_entrega': fch_ent,
            'estado': est
        }
        return dict_pedido
Example #11
0
def detallePedido(body):
    pedido = body.replace('mipedido', '')
    pedido = pedido.strip()
    app.logger.debug(pedido)
    mipedido = Pedido.find(int(pedido))
    app.logger.debug(jsonify(mipedido))
    resp = MessagingResponse()
    account_sid = 'AC363bb259d783c872befae66bf491241b'
    auth_token = '6c3079f9596e32a456df388e1c296ef8'
    client = Client(account_sid, auth_token)

    message = client.messages \
        .create(
            from_='whatsapp:+14155238886',
            body='Twilio HQ',
            persistent_action=[f'{mipedido.ubicacion}'],
            to='whatsapp:+51964291427'
    )
    msg = resp.message()
    msg.body("Procesando")
    return str(resp)
Example #12
0
def detallePedido(body):
    pedido = body.replace('mipedido', '')
    pedido = pedido.strip()
    app.logger.debug(pedido)
    mipedido = Pedido.find(int(pedido))
    app.logger.debug(jsonify(mipedido))
    resp = MessagingResponse()
    account_sid = 'AC271b9a9321567c3e87123e5aff9d9905'
    auth_token = '47b972c4d6af82abd72219e35ce1359d'
    client = Client(account_sid, auth_token)

    message = client.messages \
        .create(
            from_='whatsapp:+12018842920',
            body='Twilio HQ',
            persistent_action=[f'{mipedido.ubicacion}'],
            to='whatsapp:+51947532419'
    )
    msg = resp.message()
    msg.body("Procesando")
    return str(resp)
Example #13
0
class PedidoController(BoxLayout):
    tpv = ObjectProperty(None, allownone=True)
    pedido = ObjectProperty(None, allownone=True)
    total = NumericProperty(0.0)
    des = StringProperty("Pedido {0: >10} articulos".format(0))

    def __init__(self, **kargs):
        super(PedidoController, self).__init__(**kargs)
        self.clase = None
        self.puntero = 0
        self.pilaDeStados = []
        self.linea_editable = None
        self.tipo_cobro = "Efectivo"
        self.dbCliente = None
        self.promocion = None
        self.modal = Sugerencias(onExit=self.exit_sug)
        self.efectivo = Efectivo(onExit=self.salir_efectivo)

    def on_pedido(self, key, value):
        self.pedido.bind(total=self.show_total)

    def show_total(self, key, value):
        self.total = self.pedido.total
        self.des = "Pedido {0: >10} articulos".format(self.pedido.getNumArt())

    def pedido_domicilio(self, db):
        self.dbCliente = db
        self.lista.rm_all_widgets()
        self.pedido = Pedido()
        self.btnPedido.disabled = True
        self.btnAtras.disabled = False
        self.total = 0
        self.des = "Pedido {0: >10} articulos".format(0)
        self.linea_nueva()

    def onPress(self, botones):
        for i in range(len(botones)):
            btn = botones[i]
            tipo = btn.tag.get('tipo')
            if tipo == 'cobros':
                self.pedido.modo_pago = btn.tag.get("text")
                if self.pedido.modo_pago == "Efectivo":
                    self.mostrar_efectivo()
                else:
                    self.pedido.cambio = 0.00
                    self.pedido.efectivo = 0.00
                    self.tpv.imprimirTicket(self.pedido.guardar_pedido())
                    self.tpv.mostrar_inicio()

            elif tipo == 'llevar':
                self.show_botonera('../db/privado/num_avisador.json')
                self.pedido.para_llevar = btn.tag.get('text')
                if self.pedido.para_llevar == "Para recoger":
                    self.pedido.para_llevar = "Para llevar"
                    self.pedido.num_avisador = "Para recoger"
                    self.pedido.modo_pago = "Efectivo"
                    self.pedido.cambio = 0.00
                    self.pedido.efectivo = 0.00
                    self.pedido.guardar_pedido()
                    self.tpv.mostrar_inicio()

            elif tipo == 'num':
                self.show_botonera('../db/privado/cobrar.json')
                self.pedido.num_avisador = btn.tag.get("text")
            elif tipo == 'clase':
                self.clase = btn.tag
                if "promocion" in self.clase:
                    self.promocion = self.clase["promocion"]
                self.puntero = 0
                name = self.clase.get('productos')
                db = "../db/productos/%s.json" % name
                self.show_botonera(db)
                self.linea_editable = None
                self.pilaDeStados = []
                self.pilaDeStados.append({'db': db, 'punt': 0, 'pass': 1})
                self.btnAtras.disabled = False
            else:
                if "precio" in self.clase:
                    btn.tag[
                        "precio"] = btn.tag["precio"] * self.clase["precio"]
                db = self.pedido.add_modificador(btn.tag)
                if not self.linea_editable:
                    self.add_linea()
                self.refresh_linea()
                num = len(self.clase.get('preguntas')) if self.clase else 0
                ps = len(botones) - 1
                if db != None:
                    self.show_botonera(db)
                elif db == None and self.puntero < num and i == ps:
                    db = None
                    igDb = False
                    while self.puntero < num:
                        name = self.clase.get('preguntas')[self.puntero]
                        db = "../db/preguntas/%s.json" % name
                        self.puntero += 1
                        if 'ignore' in btn.tag:
                            if db not in btn.tag.get('ignore'):
                                igDb = False
                                break
                            else:
                                igDb = True
                                db = None
                        else:
                            break

                    if not igDb:
                        self.show_botonera(db)
                    else:
                        self.puntero += 1

                if not db and self.puntero >= num and i == ps:
                    self.linea_nueva()

                if i == ps:
                    self.pilaDeStados.append({
                        'db': db,
                        'punt': self.puntero,
                        'pass': len(botones)
                    })

    def mostrar_efectivo(self):
        self.efectivo.total = str(self.total)
        self.efectivo.open()

    def salir_efectivo(self, cancelar=True):
        self.efectivo.dismiss()
        if cancelar:
            self.show_botonera('../db/privado/cobrar.json')
        else:
            self.pedido.efectivo = self.efectivo.efectivo.replace("€", "")
            self.pedido.cambio = self.efectivo.cambio.replace("€", "")
            self.tpv.imprimirTicket(self.pedido.guardar_pedido())
            self.tpv.abrir_cajon()
            self.tpv.mostrar_inicio()
            self.tpv.mostrar_men_cobro("Cambio " + self.efectivo.cambio)

    def exit_sug(self, key, w, txt, ln):
        if txt != "":
            if "sug" not in ln.obj:
                ln.obj["sug"] = []

            ln.obj["sug"].append(txt)
            db = JsonStore("../db/sugerencias.json")
            sug = self.modal.sug
            db.put(ln.obj.get("text").lower(), db=sug)
            self.rf_parcial(w, ln)
        self.modal.dismiss()

    def sugerencia(self, w, linea):
        try:
            name = linea.obj.get('text').lower()
            db = JsonStore("../db/sugerencias.json")
            if not db.exists(name):
                db.put(name, db=[])
            self.modal.sug = db[name].get("db")
            self.modal.des = "{0}  {1:.2f}".format(linea.getTexto(),
                                                   linea.getTotal())
            self.modal.clear_text()
            self.modal.tag = linea
            self.modal.content = w
            self.modal.open()
        except:
            self.modal.content = None

    def atras(self):
        num = len(self.pilaDeStados)
        if num == 1:
            self.linea_nueva()
        if num == 2:
            self.pilaDeStados.pop()
            pr = self.pilaDeStados[-1]
            self.show_botonera(pr['db'])
            self.puntero = pr['punt']
            self.pedido.rm_estado()
            if self.linea_editable:
                self.lista.rm_linea(self.linea_editable)
                self.linea_editable = None

        if num > 2:
            sc = self.pilaDeStados.pop()
            pr = self.pilaDeStados[-1]
            self.show_botonera(pr['db'])
            self.puntero = pr['punt']
            if sc['pass'] > 1:
                for i in range(int(sc['pass'])):
                    self.pedido.rm_estado()
            else:
                self.pedido.rm_estado()

        self.refresh_linea()

    def linea_nueva(self):
        db = "../db/clases.json"
        self.show_botonera(db)
        self.clase = None
        self.promocion = None
        self.linea_editable = None
        if len(self.pedido.lineas_pedido) > 0:
            self.btnPedido.disabled = False
        self.btnAtras.disabled = True
        self.pedido.finaliza_linea()
        self.pilaDeStados = []

    def add_linea(self):
        self.btnPedido.disabled = True
        self.btnAtras.disabled = False
        if self.pedido.linea:
            self.linea_editable = LineaWidget(tag=self.pedido.linea,
                                              borrar=self.borrar,
                                              sumar=self.sumar,
                                              sugerencia=self.sugerencia)
            if self.promocion is not None:
                self.linea_editable.mostar_btnpromo()
                self.linea_editable.aplicar = self.aplicar_promo
                self.linea_editable.promocion = self.promocion
            else:
                self.linea_editable.mostar_btnpromo(False)

            self.lista.add_linea(self.linea_editable)

    def aplicar_promo(self, btn):
        self.rf_parcial(btn, btn.tag)

    def refresh_linea(self):
        if self.pedido and self.pedido.linea:
            self.linea_editable.texto = self.pedido.linea.getTexto()
            self.linea_editable.total = self.pedido.linea.getTotal()
        if len(self.pedido.lineas_pedido) == 0:
            self.btnPedido.disabled = True

    def rf_parcial(self, w, ln):
        w.texto = ln.getTexto()
        w.total = ln.getTotal()
        if self.pedido:
            self.pedido.actualizar_total()

    def sumar(self, w, tag):
        self.pedido.sumar(tag)
        self.rf_parcial(w, tag)

    def borrar(self, widget, tag):
        if self.pedido.borrar(tag):
            self.linea_nueva()
            self.pedido.borrar(tag)
            self.lista.rm_linea(widget)
            self.refresh_linea()
        else:
            self.rf_parcial(widget, tag)

    def show_botonera(self, db):
        self.storage = JsonStore(db)
        if self.storage.exists('db'):
            if self.storage.exists('selectable'):
                self.botonera.selectable = True
            else:
                self.botonera.selectable = False
            lista = self.storage['db'].get('lista')
            num = len(lista)
            if num <= 4:
                self.botonera.cols = 1
            elif num > 4 and num <= 12:
                self.botonera.cols = 3
            else:
                self.botonera.cols = 4
            title = 'None'
            if self.clase != None:
                title = str(self.clase['text'])
            self.botonera.title = title
            self.botonera.buttons = []
            self.botonera.buttons = self.storage['db'].get('lista')

    def nuevo_pedido(self, clase):
        self.onPress([Wrap(clase)])
        self.clear_pedidos()

    def clear_pedidos(self):
        self.lista.rm_all_widgets()
        self.pedido = Pedido()
        self.btnPedido.disabled = True
        self.btnAtras.disabled = False
        self.total = 0
        self.des = "Pedido {0: >10} articulos".format(0)
        self.dbCliente = None

    def aparcar_pedido(self):
        if self.dbCliente == None:
            self.pedido.aparcar_pedido()
            self.tpv.mostrar_inicio()

    def recuperar_pedido(self, db):
        self.clear_pedidos()
        self.pedido.cargar_pedido(db)
        lineas = db.get("db")['lineas']
        for linea in lineas:
            self.pedido.add_linea(linea)
            self.add_linea()
            self.refresh_linea()
            self.linea_nueva()

    def hacer_pedido(self):
        if not self.dbCliente and self.total > 0:
            self.btnPedido.disabled = True
            self.btnAtras.disabled = True
            self.show_botonera('../db/privado/llevar.json')
        else:
            if self.dbCliente:
                self.pedido.para_llevar = "Domicilio"
                self.pedido.dbCliente = self.dbCliente
                self.pedido.num_avisador = "Domicilio"
                self.pedido.modo_pago = "Efectivo"
                self.tpv.imprimirTicket(self.pedido.guardar_pedido())
                self.tpv.mostrar_inicio()

            else:
                self.show_botonera("../db/privado/num_avisador.json")
                self.pedido.modo_pago = "Efectivo"
Example #14
0
def delete_pedido(pedido_id):
    pedido = Pedido.find_or_fail(pedido_id)
    pedido.destroy(pedido_id)
    return jsonify(pedido)
Example #15
0
def update_pedido(pedido_id):
    pedido = Pedido.find_or_fail(pedido_id)
    pedido.update(**request.get_json())
    return jsonify(pedido)
Example #16
0
def get_pedido(pedido_id):
    pedido = Pedido.find(pedido_id)
    return jsonify(pedido)
Example #17
0
def create_pedido():
    ped = Pedido.create(**request.get_json())
    return jsonify(ped)
Example #18
0
def get_allpedidos():
    pedido = Pedido.all()
    return jsonify(pedido)
Example #19
0
def delete_pedido(pedido_id):
    ped = Pedido.find_or_fail(pedido_id)
    ped.delete()
    return app.response_class('No Content', 204)
Example #20
0
from werkzeug.utils import secure_filename
## Importación fechas
from datetime import datetime as dt
## Importacion Culqi
import culqipy

app = Flask(__name__)
## DEFINIMOS RUTA DONDE SE SUBIRAN LOS ARCHIVOS
app.config['UPLOAD_FOLDER'] = "./static"

## Instancia  DE CLASES
ClassUsuario = Usuario()
ClassProveedor = Proveedor()
ClassCategoria = Categoria()
ClassProducto = Producto()
ClassPedido = Pedido()


# Ruta de inicio de página
@app.route('/')
def home():
    categorias = ClassCategoria.obtenerCategorias()
    return render_template('home.html', categoriasB=categorias)


#Registro de usuario
@app.route('/registro', methods=["get", "post"])
def registration():
    if request.method == "POST":
        #Capturamos las variables del formulario
        nombres = request.form["name"]
Example #21
0
def registrarPedido():
    carritoid = None
    precio_prod = 0
    userid = session["user_id"]
    useremail = session["user_email"]
    carrito_list = Ccarrito.listar_carrito(id_user=userid)
    user = Cusuario.obtener_usuario(correo_electronico = useremail)
    if carrito_list:
        carritoid = carrito_list[0]
        precio_prod = int(carrito_list[2])
    
    ## Capturamos la fecha 
    now1 = dt.now()
    fecha = now1.strftime('%Y-%m-%d %H:%M:%S')
    if request.method == "POST":
        ## DATOS DE TARJETA
        metodo = request.form["metodo"]
        tarjeta = request.form["tarjeta"]
        expiracion = request.form["expiracion"]
        cvv = request.form["cvv"]
        estado = "pagado"
        if metodo=="tarjeta" and not(tarjeta and expiracion and cvv):
            message = 'Verifica los datos de tu tarjeta'
            return render_template('users/registerPedido.html', message=message)
        
        if metodo=="efectivo":
            estado = "pago pendiente"
            tarjeta = 0
        
        ##DATOS DE ENVIO
        provincia = request.form["provincia"]
        distrito = request.form["distrito"]
        direccion = request.form["direccion"]
        dir_envio = provincia+" / "+distrito+" / "+direccion
        if not(provincia and distrito and direccion):
            message = 'Verifica tus datos de envío'
            return render_template('users/registerPedido.html', message=message)
        
        ## DATOS DE COMPROBANTE
        comprobante = request.form["comprobante"]
        ruc = 0
        if request.form["ruc"]:
            ruc = int(request.form["ruc"])
    
        repartidor = "Motorizado 1"
        tarifa = 10
        if (distrito!="Lima") and (provincia!="Lima"):
            tarifa = 15
        
        totalp = int(tarifa + precio_prod)
        Pedid = Pedido(
            estado=estado,
            repartidor=repartidor,
            tipo_comprobante=comprobante,
            metodo_pago=metodo,
            direccion_envio=dir_envio,
            area_reparto=distrito,
            tarifa_envio=totalp,
            fecha_emision=fecha,
            fecha_entrega=fecha
        )

        result = Pedid.generar(id_user=userid, id_cart=carritoid)
        liniodir = "Calle Las Begonias 345 - San Isidro"
        linioruc = "10101957387"
        datos_list =[
            estado,                 ## Estado de la compra
            comprobante,            ## Tipo de comprobante
            user.primer_nombre,     ## Primer nombre del cliente
            user.primer_apellido,   ## Primer apellido
            user.segundo_apellido,  ## Segundo apellido
            dir_envio,              ## Direccion de envio de compras
            ruc,                    ## RUC del cliente(si lo hubiera)
            carrito_list[3],        ## Cantidad de productos comprados 
            carrito_list[2],        ## Monto del carrito
            tarifa,                 ## Tarifa de envío
            fecha,                  ## Fecha que se realizó la compra
            liniodir,               ## Direccion de Linio
            linioruc                ## RUC de Linio
            ]
        if result:
            Ccarrito.cambiar_estado_carrito(id_user= carritoid)
            message = 'Se ha completado tu compra'
            return render_template('users/comprobante.html', message=message, datos_list=datos_list)
        else:
            error = 'No se ha podido pocesar tu compra'
            return render_template('users/registerPedido.html', product = carrito_list, error=error)
    return render_template('users/registerPedido.html', product = carrito_list)
Example #22
0
from models.pedido import Pedido
from database import Database

__author__ = 'Tadeu Faustino'

Database.initialize()

pedido = Pedido(nome="Tadeu",
                email="*****@*****.**",
                telefone="23466954",
                pedido="Lagosta",
                date="12/12/12",
                id="001")

pedido.save_to_mongo()
Example #23
0
from models.comercio import Comercio
from models.pedido import Pedido
from models.carrito import Carrito
from models.categoria import Categoria
from datetime import datetime as dt


app = Flask(__name__)

#Importacion de Clases
#Es necesario la importacion declarandolo de esta manera para 
#omitir las variables 'self' en las funciones dentro de la clase
Cusuario    = Usuario()
Cproducto   = Producto()
Ccomercio   = Comercio()
Cpedido      = Pedido()
Ccarrito     = Carrito()
Ccategoria   = Categoria()


#Primera ruta a ejecutarse en la pagina
@app.route('/')
def home():
    categoriaList = Ccategoria.listar()
    return render_template('home.html', categoriaList = categoriaList)

### RUTAS DEL FOOTER
@app.route('/ayuda')
def ayuda():
    return render_template('info/ayuda.html')