def ajax_by_id(pk):
    data = Cliente.query.filter_by(id=pk).one()
    if data:
        return Response(response=json.dumps(
            Cliente.to_dict(data, cliente_colunas)),
                        status=200,
                        mimetype="application/json")
    return '', 404
Exemple #2
0
def crear_Clt_Admin():
    form = CreacionClt()
    if form.validate_on_submit():
        #Metodos de la bdd con el formulario
        clt = Cliente()
        clt.nameClt = form.nameClt.data
        clt.apellidoPateClt = form.apellidoPateClt.data
        clt.apellidoMateClt = form.apellidoMateClt.data
        clt.phone = form.phone.data
        clt.phone2 = form.phone2.data
        clt.placaCarro = form.placaCarro.data
        clt.placaCarro2 = form.placaCarro2.data
        clt.users_id = current_user.id
        db.session.add(clt)
        db.session.commit()
        return redirect(url_for("client_admin"))
    return render_template("crear_Clt_Admin.html", form=form)
Exemple #3
0
def registrate(request):             
    ext=True    
    if request.method == "POST": 
        t_doc=request.POST['documento']
        doc=request.POST['ru']
        nombre=request.POST['nombre']
        nac=request.POST['nacimiento']
        genero=request.POST['genero']
        fono=request.POST['telefono']
        email=request.POST['email']
        cont=request.POST['pasword']
        direc=request.POST['direccion']
        ofe = request.POST['acepta']        
        cli = Cliente(nro_doc=doc,tipo_doc=t_doc,nombre_completo=nombre,fecha_nac=nac,genero=genero,telefono=fono,email=email,pasword=cont,direccion=direc,ofertas=ofe)
        cli.save() 
    
    return render(request,'registrate.html', {"ext":ext})
def criarCliente():
    form = ClienteForm()
    if form.validate_on_submit():
        try:
            cliente = Cliente()
            cliente.cpf_cnpj = form.cpfCnpj.data
            cliente.nome = form.nome.data.upper()
            db.session.add(cliente)
            db.session.commit()
            form.data.clear()
            flash("Cliente inserido com sucesso!")
            return redirect(url_for('.criarCliente'))

        except:
            if exc.IntegrityError:
                flash("Cliente já cadastrado!")
                return redirect(url_for('.criarCliente'))
    else:
        return render_template('cliente/clienteCadastro.html', form=form)
def addCliente():
    form = AddClienteForm()
    if form.validate_on_submit():
        cliente = Cliente(dni=form.dni.data,
                          nombre=form.nombre.data,
                          apellidos=form.apellidos.data)

        db.session.add(cliente)
        db.session.commit()
        flash('Cliente creado!')
        return redirect(url_for('getClientes'))
    return render_template('AddCliente.html', title='Crear Cliente', form=form)
def addCliente():
    form = AddClienteForm()
    if form.validate_on_submit():
        cliente = Cliente(nombre=form.nombre.data,
                          apellido_pat=form.apellido_pat.data,
                          apellido_mat=form.apellido_mat.data,
                          documento=form.documento.data,
                          numero_documento=form.numero_documento.data)
        db.session.add(cliente)
        db.session.commit()
        flash('Cliente agregado!')
        return redirect(url_for('getClientes'))
    return render_template('AddCliente.html', title='Crear Cliente', form=form)
Exemple #7
0
def add_cliente():
    if request.method == 'POST':
        nome = request.form['nome']
        cidade = request.form['cidade']
        telefone = request.form['telefone']
        celular = request.form['celular']
        email = request.form['email']
        cliente = Cliente(nome, cidade, telefone, celular, email)
        db.session.add(cliente)
        db.session.commit()
        flash('Cliente adicionado com sucesso!')
        return redirect(url_for('cliente'))

    return render_template('add_cliente.html')
Exemple #8
0
    def clienteslista():
        # GET
        clientes = Cliente.get_all()
        results = []

        for cliente in clientes:
            obj = {
                'id': cliente.id,
                'nome': cliente.nome,
            }
            results.append(obj)
        response = jsonify(results)
        response.status_code = 200
        return response
def ajax():
    _limit = int(request.args.get('limit', '10'))
    _offset = int(request.args.get('offset', '0'))
    _sort_order = request.args.get('sort_order', '')
    _sort_direction = request.args.get('sort_direction', 'asc')

    _nome = request.args.get('nome', '')
    _telefone = request.args.get('telefone', '')
    _celular = request.args.get('celular', '')
    _limit = _offset + _limit
    items = []
    filtro = get_filter(_nome, _telefone, _celular)
    try:
        fetch = Cliente.query.filter(filtro)
        fetch = Cliente.sorting_data(fetch, _sort_order, _sort_direction)
        fetch = fetch.slice(_offset, _limit).all()
        colunas = [col.name for col in Cliente.__table__._columns]
        for dado in fetch:
            items.append(Cliente.to_dict(dado, cliente_colunas))
    except Exception as ex:
        print(ex)
    return Response(response=json.dumps(items),
                    status=200,
                    mimetype="application/json")
def addCliente():
    form = AddClienteForm()
    clientes = Cliente.query.all()
    if form.validate_on_submit():
        cliente = Cliente(nombre=form.nombre.data,
                          ruc=form.ruc.data,
                          direccion=form.direccion.data)
        db.session.add(cliente)
        db.session.commit()
        flash('Cliente creado!')
        return redirect(url_for('getCliente'))
    return render_template('AddCliente.html',
                           title='Crear Cliente',
                           form=form,
                           clientes=clientes)
Exemple #11
0
 def form_valid(self, form):
     try:
         data = form.cleaned_data
         user_data = {}
         user_data['username'] = data['login']
         user_data['password'] = data['senha']
         user_data['first_name'] = data['nome']
         user_data['email'] = data['email']
         usuario = User.objects.create_user(**user_data)
         usuario.save()
         user = authenticate(**user_data)
         login(self.request, user)
         cliente = Cliente(user=usuario)
         cliente.phone = data['phone']
         cliente.endereco = data['endereco']
         cliente.numero = data['numero']
         cliente.bairro = data['bairro']
         cliente.cidade = data['cidade']
         cliente.save()
         pedido = Pedido(cliente=cliente)
         pedido.save()
         self.request.session['pedido'] = pedido.id
         pedido = cliente.pedido_set.last()
         pedido.is_completed = True
         pedido.save()
         print(self.request.session['pedido'])
         # self.request.session['pedido'] = None
         # del self.request.session['pedido']
         # users = User.objects.filter(is_superuser=True)
         # for us in users:
         #     message = "Um novo pedido foi feito no Catalogo Virtual"
         #     n = Notification(type_message='NOVO_PEDIDO_LOJA', to=us, message=message)
         #     n.save()
     except (Exception,):
         return self.form_invalid(form)
     messages.success(self.request, "Cadastro realizado com sucesso")
     return HttpResponseRedirect(self.get_success_url())
Exemple #12
0
def report(pk):
    data = Historico.query.filter_by(id=pk).one()
    dados = Historico.to_dict(data, historico_colunas)
    cliente = Cliente.query.filter_by(id=data.id_cliente).one()
    dados['cliente'] = Cliente.to_dict(cliente, cliente_colunas)
    veiculo = Veiculo.query.filter_by(id=data.id_veiculo).one()
    dados['veiculo'] = Veiculo.to_dict(veiculo, veiculo_colunas)
    modelo = Modelo.query.filter_by(id=veiculo.id_modelo).one()
    dados['modelo'] = Modelo.to_dict(modelo, modelo_colunas)
    montadora = Montadora.query.filter_by(id=modelo.id_monta).one()
    dados['montadora'] = Modelo.to_dict(montadora, montadora_colunas)
    pdf_buffer = gerar_pdf(dados)
    return send_file(
        pdf_buffer,
        attachment_filename='relatorio.pdf',
        mimetype='application/pdf',
        cache_timeout=0
    )
def form(pk):
    #Pega os dados dos campos na tela
    contexto = {}
    contexto['model'] = {}
    if request.method == 'POST':
        nome = request.form.get('nome')
        rg = request.form.get('rg')
        cpf = request.form.get('cpf')
        endereco = request.form.get('endereco')
        complemento = request.form.get('complemento')
        bairro = request.form.get('bairro')
        cidade = request.form.get('cidade')
        cep = request.form.get('cep')
        estado = request.form.get('estado')
        pais = request.form.get('pais')
        telefone = request.form.get('telefone')
        fax = request.form.get('fax')
        celular = request.form.get('celular')
        telefone_comercial = request.form.get('telefone_comercial')
        fax_comercial = request.form.get('fax_comercial')
        email = request.form.get('email')
        bip = request.form.get('bip')
        data_nascimento = from_str_to_datetime_or_none(
            request.form.get('data_nascimento'))
        mes = to_int_or_none(request.form.get('mes'))

        if data_nascimento:
            mes = data_nascimento.month
        else:
            mes = 0

        #Criar dicionário com os dados
        dicionario = {
            "nome": nome,
            "rg": rg,
            "cpf": cpf,
            "endereco": endereco,
            "complemento": complemento,
            "bairro": bairro,
            "cidade": cidade,
            "cep": cep,
            "estado": estado,
            "pais": pais,
            "telefone": telefone,
            "fax": fax,
            "celular": celular,
            "telefone_comercial": telefone_comercial,
            "fax_comercial": fax_comercial,
            "email": email,
            "bip": bip,
            "data_nascimento": data_nascimento,
            "mes": mes
        }
        if pk:
            dicionario['id'] = pk
        cliente = Cliente(**dicionario)
        mensagem = None
        try:
            contexto['tipo_mensagem'] = 'success'
            if pk:
                db.session.merge(cliente)
            else:
                db.session.add(cliente)
            db.session.commit()
            id_cadastro = cliente.id
            if pk:
                flash(
                    u'Cliente {0} atualizado com sucesso.'.format(id_cadastro),
                    'success')
            else:
                flash(
                    u'Cliente {0} cadastrado com sucesso.'.format(id_cadastro),
                    'success')
            return redirect(url_for('cliente.index'))
        except Exception as ex:
            print(ex)
            contexto['mensagem'] = u'Erro ao cadastrar cliente.'
            contexto['tipo_mensagem'] = 'danger'
    elif pk:
        data = Cliente.query.filter_by(id=pk).one()
        contexto['model'] = Cliente.to_dict(data, cliente_colunas)
    return render_template('cliente/cadastro.html', **contexto)
Exemple #14
0
def index(request):
    c = Cliente()
    r = c.nome = 'raul'
    return render(request, 'app/index.html', {'nome': c.nome})
def inserir_cliente(request):  # VIEW PARA INSERIR CLIENTE NO BANCO DE DADOS

    if request.method == 'POST':
        nCliente = Cliente()
        nEndereco = Endereco()
        nContato = Contato()

        nCliente.nome_fantasia = request.POST.get('nome_fantasia')
        nCliente.cnpj = request.POST.get('cnpj')
        nCliente.razao_social = request.POST.get('razao_social')
        nCliente.inscri_municipal = request.POST.get('inscri_municipal')
        nCliente.inscri_estadual = request.POST.get('inscri_estadual')
        nCliente.status = request.POST.get('status')

        nEndereco.rua = request.POST.get('rua')
        nEndereco.numero = request.POST.get('numero')
        nEndereco.referencia = request.POST.get('referencia')
        nEndereco.cep = int(request.POST.get('cep')) if request.POST.get(
            'cep') else None  # SE FOR STRING VAZIA, ENTÃO RECEBE NONE/NULLO
        nEndereco.bairro = request.POST.get('bairro')
        nEndereco.cidade_id = request.POST.get('cidade')
        nEndereco.estado_id = request.POST.get('estado')
        nEndereco.save()
        nCliente.endereco = nEndereco

        nContato.email = request.POST.get('email')
        nContato.celular1 = request.POST.get('celular1')
        nContato.celular2 = request.POST.get('celular2')
        nContato.telefone1 = request.POST.get('telefone1')
        nContato.telefone2 = request.POST.get('telefone2')
        nContato.site = request.POST.get('site')
        nContato.save()
        nCliente.contato = nContato

        nCliente.save()  # SALVANDO NO BANCO DE DADOS

    return redirect('clientes_manutencao_inserir')
Exemple #16
0
def view(request):
    global ex
    data = informacionusuario(request)
    persona = request.session['persona']
    if request.method == 'POST':
        action = request.POST['action']

        if action == 'add':
            try:
                form = ClienteForm(request.POST)
                if form.is_valid():
                    if Cliente.objects.filter(
                            identificacion=form.cleaned_data['identificacion']
                    ).exists():
                        return bad_json(transaction, error=18)
                    personaadmin = Cliente(
                        nombres=form.cleaned_data['nombres'],
                        apellidos=form.cleaned_data['apellidos'],
                        identificacion=form.cleaned_data['identificacion'],
                        tipoidentificacion=form.
                        cleaned_data['tipoidentificacion'],
                        provincia=form.cleaned_data['provincia'],
                        canton=form.cleaned_data['canton'],
                        sector=form.cleaned_data['sector'],
                        direccion=form.cleaned_data['direccion'],
                        telefonomovil=form.cleaned_data['telefonomovil'],
                        telefonofijo=form.cleaned_data['telefonofijo'],
                        email=form.cleaned_data['email'])
                    personaadmin.save(request)
                    log(u'Adiciono cliente: %s' % personaadmin, request, "add")
                    return ok_json(transaction)
                else:
                    return bad_json(transaction, error=6)
            except Exception as ex:
                return bad_json(transaction, error=1)

        if action == 'edit':
            try:
                form = ClienteForm(request.POST)
                if form.is_valid():
                    personaadmin = Cliente.objects.get(
                        id=int(request.POST['id']))
                    personaadmin.nombres = form.cleaned_data['nombres']
                    personaadmin.apellidos = form.cleaned_data['apellidos']
                    personaadmin.provincia = form.cleaned_data['provincia']
                    personaadmin.canton = form.cleaned_data['canton']
                    personaadmin.sector = form.cleaned_data['sector']
                    personaadmin.direccion = form.cleaned_data['direccion']
                    personaadmin.telefonomovil = form.cleaned_data[
                        'telefonomovil']
                    personaadmin.telefonofijo = form.cleaned_data[
                        'telefonofijo']
                    personaadmin.email = form.cleaned_data['email']
                    personaadmin.save()
                    log(u'Modifico personal administrativo: %s' % personaadmin,
                        request, "edit")
                    return ok_json(transaction)
                else:
                    return bad_json(transaction, error=6)
            except Exception as ex:
                return bad_json(transaction, error=1)

        if action == 'delete':
            try:
                personaadmin = Cliente.objects.get(id=int(request.POST['id']))
                log(u'Elimino personal administrativo: %s' % personaadmin,
                    request, "edit")
                personaadmin.delete()
                return ok_json(transaction)
            except Exception as ex:
                return bad_json(transaction, error=1)

        return bad_json(transaction, error=0)
    else:
        if 'action' in request.GET:
            action = request.GET['action']

            if action == 'add':
                try:
                    data['title'] = u'Adicionar Cliente'
                    form = ClienteForm()
                    data['form'] = form
                    data['tipo_cedula'] = TipoIdentificacion.objects.filter(
                        cedula=True)[0].id
                    return render_to_response(
                        "clientes/add.html",
                        data,
                        context_instance=RequestContext(request))
                except Exception as ex:
                    pass

            if action == 'edit':
                try:
                    data['title'] = u'Editar Cliente'
                    data['administrativo'] = cliente = Cliente.objects.get(
                        id=int(request.GET['id']))
                    form = ClienteForm(
                        initial={
                            'nombres': cliente.nombres,
                            'apellidos': cliente.apellidos,
                            'tipoidentificacion': cliente.tipoidentificacion,
                            'identificacion': cliente.identificacion,
                            'provincia': cliente.provincia,
                            'canton': cliente.canton,
                            'sector': cliente.sector,
                            'direccion': cliente.direccion,
                            'telefonomovil': cliente.telefonomovil,
                            'telefonofijo': cliente.telefonofijo,
                            'email': cliente.email
                        })
                    data['form'] = form
                    data['tipo_cedula'] = TipoIdentificacion.objects.filter(
                        cedula=True)[0].id
                    return render_to_response(
                        "clientes/edit.html",
                        data,
                        context_instance=RequestContext(request))
                except Exception as ex:
                    pass

            if action == 'delete':
                try:
                    data['title'] = u'Eliminar Cliente'
                    data['cliente'] = cliente = Cliente.objects.get(
                        id=int(request.GET['id']))
                    return render_to_response(
                        "clientes/delete.html",
                        data,
                        context_instance=RequestContext(request))
                except Exception as ex:
                    pass

            return url_back(request, ex=ex if 'ex' in locals() else None)

        else:
            try:
                data['title'] = u'Listado de Clientes'
                search = None
                ids = None
                if 's' in request.GET:
                    search = request.GET['s'].strip()
                    administrativos = Cliente.objects.filter(
                        Q(nombres__icontains=search)
                        | Q(apellidos__icontains=search)
                        | Q(identificacion__icontains=search)).distinct()
                elif 'id' in request.GET:
                    ids = request.GET['id']
                    administrativos = Cliente.objects.filter(id=ids).distinct()
                else:
                    administrativos = Cliente.objects.all()
                paging = MiPaginador(administrativos, 25)
                p = 1
                try:
                    paginasesion = 1
                    if 'paginador' in request.session and 'paginador_url' in request.session:
                        if request.session['paginador_url'] == 'clientes':
                            paginasesion = int(request.session['paginador'])
                    if 'page' in request.GET:
                        p = int(request.GET['page'])
                    else:
                        p = paginasesion
                    page = paging.page(p)
                except:
                    p = 1
                    page = paging.page(p)
                request.session['paginador'] = p
                request.session['paginador_url'] = 'clientes'
                data['paging'] = paging
                data['rangospaging'] = paging.rangos_paginado(p)
                data['page'] = page
                data['search'] = search if search else ""
                data['ids'] = ids if ids else ""
                data['administrativos'] = page.object_list
                return render_to_response(
                    "clientes/view.html",
                    data,
                    context_instance=RequestContext(request))
            except Exception as ex:
                return HttpResponseRedirect('/')
 def form_valid(self, form):
     context = self.get_context_data()
     pontoset = context['pontoset']
     with transaction.atomic():
         self.object = form.save()
         print(pontoset.errors)
         if pontoset.is_valid():
             pontoset.instance = self.object
             pontoset.save()
     pedido = self.object
     data = self.request.POST
     usuario = None
     cliente = None
     try:
         usuario = User.objects.get(last_name=str(data['nome'])[:30])
         usuario.email = data['email']
         usuario.save()
         cliente = usuario.cliente
     except (Exception, ):
         username = '******' + str(uuid.uuid4())[:8]
         usuario = User(username=username,
                        password='******',
                        email=data['email'],
                        last_name=str(data['nome'])[:30])
         usuario.save()
         cliente = Cliente(user=usuario)
         cliente.save()
     cliente.phone = data['phone']
     cliente.endereco = data['endereco']
     cliente.numero = data['numero']
     cliente.bairro = data['bairro']
     cliente.cidade = data['cidade']
     cliente.save()
     pedido.cliente = cliente
     pedido.save()
     # pedido = self.object
     # a = func()
     # message = "Um novo pedido foi feito pela " + self.request.user.first_name
     # for m in Motorista.objects.all():
     #     if m.is_online and not m.ocupado:
     #         n = Notification(type_message='NOVO_PEDIDO', to=m.user, message=message)
     #         n.save()
     return super(PedidoUpdateVendedorView, self).form_valid(form)
    def form_valid(self, form):
        context = self.get_context_data()
        pontoset = context['pontoset']
        with transaction.atomic():
            self.object = form.save()
            if pontoset.is_valid():
                pontoset.instance = self.object
                pontoset.save()
        pedido = self.object
        data = self.request.POST
        try:
            cliente = Cliente.objects.get(user__username=data['login'])
        except (Exception, ):
            cliente = None
        if not cliente:
            user_data = {}
            user_data['username'] = data['login']
            user_data['password'] = data['login']
            user_data['email'] = data['email']
            user_data['last_name'] = str(data['nome'])[:30]
            usuario = User.objects.create_user(**user_data)
            usuario.save()
            cliente = Cliente(user=usuario)
            cliente.save()
        cliente.phone = data['phone']
        cliente.nome = data['nome']
        cliente.endereco = data['endereco']
        cliente.numero = data['numero']
        cliente.bairro = data['bairro']
        cliente.cidade = data['cidade']
        cliente.save()
        pedido.cliente = cliente
        try:
            vendedor = Vendedor.objects.get(user=self.request.user)
            pedido.vendedor = vendedor
        except (Exception, ):
            pass
        pedido.save()

        # message = "Um novo pedido foi feito pelo vendedor " + self.request.user.first_name
        # pedido = self.object
        # a = func()
        if not self.request.user.is_superuser:
            users = User.objects.filter(is_superuser=True)
            for user in users:
                message = "Um novo pedido foi feito pelo vendedor " + self.request.user.first_name
                n = Notification(type_message='NOVO_PEDIDO_VENDEDOR',
                                 to=user,
                                 message=message)
                print(user)
                n.save()
        return super(PedidoCreateVendedorView, self).form_valid(form)
Exemple #19
0
def view(request):
    global ex
    data = informacionusuario(request)
    persona = request.session['persona']
    sucursal = request.session['sucursal']

    if request.method == 'POST':
        action = request.POST['action']

        if action == 'deldetalle':
            try:
                c = DetalleFactura.objects.get(id=int(request.POST['valor']))
                compra = c.factura_set.all()[0]
                c.delete()
                compra.actualiza_valor()
                return ok_json(transaction)
            except Exception as ex:
                return bad_json(transaction, error=1)

        if action == 'addprod':
            try:
                form = SalidaProductoForm(request.POST)
                c = Factura.objects.get(id=int(request.POST['id']))
                if form.is_valid():
                    cantidad = form.cleaned_data['cantidad']
                    costo = float(request.POST['micosto'])
                    articulo = form.cleaned_data['articulo']
                    if cantidad > articulo.mi_inventario_sucursal(sucursal).cantidad:
                        return bad_json(transaction, mensaje=u'No existe esa cantidad disponible para ese artículo')
                    desc = form.cleaned_data['descuento']
                    p = 0.12
                    subtotal = cantidad * costo
                    iva = subtotal * p
                    total = subtotal + iva - desc
                    detalle = DetalleFactura(producto=articulo,
                                            cantidad=cantidad,
                                            subtotal=subtotal,
                                             descuento=desc,
                                            precio=costo,
                                            iva=iva,
                                            valor=total)
                    detalle.save()
                    c.detalles.add(detalle)
                    c.actualiza_valor()
                    return ok_json(transaction)
                else:
                    return bad_json(transaction, error=6)
            except Exception as ex:
                return bad_json(transaction, error=1)

        if action == 'updatecli':
            try:
                c = Factura.objects.get(id=int(request.POST['id']))
                cliente = Cliente.objects.get(id=int(request.POST['cli']))
                c.cliente = cliente
                c.save()
                return ok_json(transaction)
            except Exception as ex:
                return bad_json(transaction, error=1)

        if action == 'datosprod':
            try:
                c = Producto.objects.get(id=int(request.POST['id']))
                disponible = '0'
                costo = '0'
                i = c.mi_inventario_sucursal(sucursal)
                total = c.stock_total()
                disponible = i.cantidad
                costo = i.precioventa
                otros = total - disponible
                return ok_json(transaction, data={'disponible': disponible, 'costo': costo, 'otros': otros})
            except Exception as ex:
                return bad_json(transaction, error=1)

        if action == 'confirmar':
            try:
                c = Factura.objects.get(id=int(request.POST['id']))
                if not c.cliente:
                    return bad_json(transaction, mensaje=u'No ha seleccionado un cliente')
                c.finalizada = True
                c.fecha = datetime.now().date()
                c.sucursal = sucursal
                c.save()
                for d in c.detalles.all():
                    p = d.producto
                    inv = p.mi_inventario_sucursal(sucursal)
                    movimiento = KardexInventario(ingreso=False,
                                                  fechaingreso=datetime.now(),
                                                  inventario=inv,
                                                  precioventa=d.precio,
                                                  cantidad=d.cantidad,
                                                  valor=d.valor)
                    movimiento.save()
                    inv.cantidad -= d.cantidad
                    inv.valor = inv.cantidad * inv.costo
                    inv.save()
                if c.credito:
                    valor = c.total
                    vc = null_to_numeric(valor / c.meses, 2)
                    fecha = datetime.now().date()
                    fechavence = fecha + timedelta(days=1)
                    for i in range(1, int(c.meses) + 1):
                        cuota = CuotasFacturas(factura=c,
                                              cuota=i,
                                              valor=vc,
                                              fechalimite=fechavence)
                        cuota.save()
                        fechavence = proximafecha(fechavence, 3).date()
                    valorc = null_to_numeric(c.cuotasfacturas_set.aggregate(valor=Sum('valor'))['valor'], 2)
                    ultima = c.cuotasfacturas_set.all().order_by('-cuota')[0]
                    faltante = 0
                    excddente = 0
                    if valor > valorc:
                        faltante = valor - valorc
                        ultima.valor += faltante
                        ultima.save()
                    elif valorc > valor:
                        excedente = valorc - valor
                        ultima.valor -= excedente
                        ultima.save()
                return ok_json(transaction)
            except Exception as ex:
                return bad_json(transaction, error=1)

        if action == 'act_credito':
            try:
                c = Factura.objects.get(id=int(request.POST['id']))
                valor = request.POST['valor'] == 'true'
                c.credito = valor
                c.save()
                if not c.credito:
                    c.meses = 0
                    c.recargo = 0
                    c.save()
                else:
                    if not c.porcentaje:
                        c.porcentaje = 10
                c.save()
                c.actualiza_valor()
                return ok_json()
            except Exception as ex:
                transaction.rollback()
                return bad_json(error=1)

        if action == 'act_meses':
            try:
                c = Factura.objects.get(id=int(request.POST['id']))
                valor = int(request.POST['valor'])
                c.meses = valor
                c.save()
                return ok_json()
            except Exception as ex:
                transaction.rollback()
                return bad_json(error=1)

        if action == 'act_recargo':
            try:
                c = Factura.objects.get(id=int(request.POST['id']))
                valor = int(request.POST['valor'])
                c.porcentaje = valor
                c.save()
                valor = null_to_numeric((c.subtotal * c.porcentaje) / 100, 2)
                c.recargo = valor
                c.save()
                c.actualiza_valor()
                return ok_json()
            except Exception as ex:
                transaction.rollback()
                return bad_json(error=1)

        if action == 'addcliente':
            try:
                form = ClienteForm(request.POST)
                if form.is_valid():
                    c = Factura.objects.get(id=int(request.POST['id']))
                    if Cliente.objects.filter(identificacion=form.cleaned_data['identificacion']).exists():
                        return bad_json(transaction, error=18)
                    personaadmin = Cliente(nombres=form.cleaned_data['nombres'],
                                           apellidos=form.cleaned_data['apellidos'],
                                           identificacion=form.cleaned_data['identificacion'],
                                           tipoidentificacion=form.cleaned_data['tipoidentificacion'],
                                           provincia=form.cleaned_data['provincia'],
                                           canton=form.cleaned_data['canton'],
                                           sector=form.cleaned_data['sector'],
                                           direccion=form.cleaned_data['direccion'],
                                           telefonomovil=form.cleaned_data['telefonomovil'],
                                           telefonofijo=form.cleaned_data['telefonofijo'],
                                           email=form.cleaned_data['email'])
                    personaadmin.save(request)
                    c.cliente = personaadmin
                    c.save()
                    log(u'Adiciono cliente: %s' % personaadmin, request, "add")
                    return ok_json(transaction)
                else:
                    return bad_json(transaction, error=6)
            except Exception as ex:
                return bad_json(transaction, error=1)

        return bad_json(transaction, error=0)
    else:
        if 'action' in request.GET:
            action = request.GET['action']

            if action == 'add':
                try:
                    data['title'] = u'Nueva Venta'
                    i = IvaAplicado.objects.all()[0]
                    data['iva'] = i.nombre
                    data['p'] = i.porciento
                    numero = null_to_numeric(Factura.objects.aggregate(valor=Max('numeroreal'))['valor'], 0)
                    if 'id' in request.GET:
                        c = Factura.objects.get(id=int(request.GET['id']))
                    else:
                        c = Factura(fecha=datetime.now().date(), numeroreal=int(numero)+1)
                        c.save()
                        c.actualiza_numero()
                    data['c'] = c
                    data['det'] = c.detalles.all()
                    data['clientes'] = Cliente.objects.all()
                    return render_to_response("ventas/nueva.html", data)
                except Exception as ex:
                    pass

            if action == 'addcliente':
                try:
                    data['title'] = u'Adicionar Cliente'
                    form = ClienteForm()
                    data['form'] = form
                    data['venta'] = Factura.objects.get(id=int(request.GET['id']))
                    data['tipo_cedula'] = TipoIdentificacion.objects.filter(cedula=True)[0].id
                    return render_to_response("ventas/addcliente.html", data, context_instance=RequestContext(request))
                except Exception as ex:
                    pass

            if action == 'addprod':
                try:
                    data['title'] = u'Adicionar Producto'
                    data['iva'] = 12
                    data['venta'] = c = Factura.objects.get(id=int(request.GET['id']))
                    data['p'] = 0.12
                    form = SalidaProductoForm(initial={'porcentaje': 12})
                    form.editar(sucursal)
                    data['form'] = form
                    return render_to_response("ventas/addproducto.html", data, context_instance=RequestContext(request))
                except Exception as ex:
                    pass

            if action == 'detalle':
                try:
                    data['title'] = u'Productos vendidos'
                    data['c'] = c = Factura.objects.get(id=int(request.GET['id']))
                    form = InfoCompraProductoForm(initial={'numero': c.numero})
                    data['form'] = form
                    data['permite_modificar'] = False
                    return render_to_response("ventas/detalles.html", data, context_instance=RequestContext(request))
                except Exception as ex:
                    pass

            if action == 'pdf':
                id = request.GET['id']
                compra = Factura.objects.get(id=id)
                i = IvaAplicado.objects.all()[0]
                if Factura.objects.filter(id=id):
                    # template = get_template('compras/report.html')
                    tpl = Template("{% include 'ventas/report.html' %}")
                    data = {'e': Institucion.objects.all()[0], 'c': compra, 'details': compra.detalles.all(), 'ivanombre': i.nombre}
                    html = tpl.render(Context(data))
                    # html = template.render(d)
                    result = BytesIO()
                    links = lambda uri, rel: os.path.join(MEDIA_ROOT, uri.replace(MEDIA_URL, ''))
                    pdf = pisa.pisaDocument(BytesIO(html.encode('UTF-8')), result, encoding='UTF-8', link_callback=links)
                    return HttpResponse(result.getvalue(), content_type='application/pdf')

            if action == 'confirmar':
                try:
                    data['title'] = u'Confirmar venta'
                    data['c'] = c = Factura.objects.get(id=int(request.GET['id']))
                    return render_to_response("ventas/confirmar.html", data, context_instance=RequestContext(request))
                except Exception as ex:
                    pass

            return url_back(request, ex=ex if 'ex' in locals() else None)

        else:
            try:
                data['title'] = u'Factura emitidas'
                search = None
                ids = None
                if 's' in request.GET:
                    search = request.GET['s'].strip()
                    ventas = Factura.objects.filter(Q(cliente__nombres__icontains=search) |
                                                    Q(cliente__apellidos__icontains=search) |
                                                    Q(cliente__identificacion__icontains=search) |
                                                    Q(numeroreal__icontains=search) |
                                                    Q(numero__icontains=search), sucursal=sucursal).distinct()
                elif 'id' in request.GET:
                    ids = request.GET['id']
                    ventas = Factura.objects.filter(id=ids, sucursal=sucursal).distinct()
                else:
                    ventas = Factura.objects.all()
                paging = MiPaginador(ventas, 25)
                p = 1
                try:
                    paginasesion = 1
                    if 'paginador' in request.session and 'paginador_url' in request.session:
                        if request.session['paginador_url'] == 'ventas':
                            paginasesion = int(request.session['paginador'])
                    if 'page' in request.GET:
                        p = int(request.GET['page'])
                    else:
                        p = paginasesion
                    page = paging.page(p)
                except:
                    p = 1
                    page = paging.page(p)
                request.session['paginador'] = p
                request.session['paginador_url'] = 'ventas'
                data['paging'] = paging
                data['rangospaging'] = paging.rangos_paginado(p)
                data['page'] = page
                data['search'] = search if search else ""
                data['ids'] = ids if ids else ""
                data['ventas'] = page.object_list
                Factura.objects.filter(finalizada=False).delete()
                return render_to_response("ventas/view.html", data, context_instance=RequestContext(request))
            except Exception as ex:
                return HttpResponseRedirect('/ventas')