Example #1
0
def view(request):
    ex = None
    data = {'title': u'Gestión de Clientes'}
    addUserData(request, data)
    if request.method == 'POST':
        action = request.POST['action']
        if action == 'add':
            f = ClienteForm(request.POST, request.FILES)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        tipo = int(f.cleaned_data['tipo'])
                        ruc = f.cleaned_data['ruc']
                        identificacion = f.cleaned_data['identificacion']
                        usuario_nombre = f.cleaned_data['usuario']
                        if identificacion and Cliente.objects.filter(identificacion=identificacion).exists():
                            return bad_json(mensaje=u"Ya existe un cliente con ese número de identificación.")
                        if ruc and Cliente.objects.filter(ruc=ruc).exists():
                            return bad_json(mensaje=u"Ya existe un cliente con ese número de RUC.")
                        if User.objects.filter(username=usuario_nombre).exists():
                            return bad_json(mensaje=u"Ya existe ese nombre de usuario en el sistema.")

                        cliente = Cliente(tipo=tipo,
                                          identificacion=identificacion,
                                          nombre=f.cleaned_data['nombre'],
                                          domicilio=f.cleaned_data['domicilio'],
                                          fecha_nacimiento=f.cleaned_data['fecha_nacimiento'],
                                          email=f.cleaned_data['email'],
                                          telefono=f.cleaned_data['telefono'],
                                          celular=f.cleaned_data['celular'],
                                          # corporativos
                                          ruc=f.cleaned_data['ruc'],
                                          razon_social=f.cleaned_data['razon_social'],
                                          representante_legal=f.cleaned_data['representante_legal'],
                                          # especificos
                                          alergias=f.cleaned_data['alergias'],
                                          caracteristicas_fisicas=f.cleaned_data['caracteristicas_fisicas'],
                                          tipo_cabello=f.cleaned_data['tipo_cabello'],
                                          tipo_piel=f.cleaned_data['tipo_piel'],
                                          oportunidades_servicios=f.cleaned_data['oportunidades_servicios'])
                        cliente.save()

                        if 'foto' in request.FILES:
                            newfile = request.FILES['foto']
                            newfile._name = generar_nombre("foto_", newfile._name)
                            cliente.foto = newfile
                            cliente.save()

                        user = User.objects.create_user(usuario_nombre, cliente.email, DEFAULT_PASSWORD)
                        user.username = user.username.lower()
                        user.save()
                        cliente.usuario = user
                        cliente.save()
                        g = Group.objects.get(pk=CLIENTES_GROUP_ID)
                        g.user_set.add(user)
                        g.save()
                        salva_auditoria(request, cliente, ACCION_ADICIONAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        elif action == 'edit':
            cliente = Cliente.objects.get(pk=request.POST['id'])
            f = ClienteForm(request.POST, request.FILES)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        tipo = int(f.cleaned_data['tipo'])
                        ruc = f.cleaned_data['ruc']
                        identificacion = f.cleaned_data['identificacion']
                        usuario_nombre = f.cleaned_data['usuario']
                        if identificacion and Cliente.objects.filter(identificacion=identificacion).exclude(id=cliente.id).exists():
                            return bad_json(mensaje=u"Ya existe un cliente con ese número de identificación.")
                        if ruc and Cliente.objects.filter(ruc=ruc).exclude(id=cliente.id).exists():
                            return bad_json(mensaje=u"Ya existe un cliente con ese número de RUC.")
                        if User.objects.filter(username=usuario_nombre).exclude(cliente__id=cliente.id).exists():
                            return bad_json(mensaje=u"Ya existe ese nombre de usuario en el sistema.")

                        if not cliente.usuario:
                            user = User.objects.create_user(usuario_nombre, cliente.email, DEFAULT_PASSWORD)
                            user.username = user.username.lower()
                            user.save()
                            cliente.usuario = user
                            cliente.save()
                            g = Group.objects.get(pk=CLIENTES_GROUP_ID)
                            g.user_set.add(user)
                            g.save()
                        else:
                            cliente.usuario.username = usuario_nombre
                            cliente.usuario.save()

                        cliente.tipo = tipo
                        cliente.nombre = f.cleaned_data['nombre']
                        cliente.identificacion = f.cleaned_data['identificacion']
                        cliente.domicilio = f.cleaned_data['domicilio']
                        cliente.fecha_nacimiento = f.cleaned_data['fecha_nacimiento']
                        cliente.email = f.cleaned_data['email']
                        cliente.telefono = f.cleaned_data['telefono']
                        cliente.celular = f.cleaned_data['celular']
                        # corporativos
                        cliente.ruc = f.cleaned_data['ruc']
                        cliente.razon_social = f.cleaned_data['razon_social']
                        cliente.representante_legal = f.cleaned_data['representante_legal']
                        # especificos
                        cliente.alergias = f.cleaned_data['alergias']
                        cliente.caracteristicas_fisicas = f.cleaned_data['caracteristicas_fisicas']
                        cliente.tipo_cabello = f.cleaned_data['tipo_cabello']
                        cliente.tipo_piel = f.cleaned_data['tipo_piel']
                        cliente.oportunidades_servicios = f.cleaned_data['oportunidades_servicios']

                        cliente.save()
                        if 'foto' in request.FILES:
                            newfile = request.FILES['foto']
                            newfile._name = generar_nombre("foto_", newfile._name)
                            cliente.foto = newfile
                            cliente.save()
                        salva_auditoria(request, cliente, ACCION_MODIFICAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=2)
            else:
                return bad_json(error=2)

        elif action == 'delete':
            try:
                cliente = Cliente.objects.get(pk=request.POST['id'])
                with transaction.atomic():
                    salva_auditoria(request, cliente, ACCION_ELIMINAR)
                    cliente.delete()
                    return ok_json()
            except Exception:
                return bad_json(error=3)

        elif action == 'resetear':
            try:
                cliente = Cliente.objects.get(pk=request.POST['id'])
                with transaction.atomic():
                    user = cliente.usuario
                    user.set_password(DEFAULT_PASSWORD)
                    user.save()
                    salva_auditoria(request, cliente, ACCION_MODIFICAR)
                    return ok_json()
            except Exception:
                return bad_json(error=3)

        return bad_json(error=0)

    else:
        if 'action' in request.GET:
            action = request.GET['action']
            if action == 'add':
                try:
                    data['title'] = u'Crear Cliente'
                    data['form'] = ClienteForm(initial={'fecha_nacimiento': datetime.now().date()})
                    return render_to_response("clientes/add.html", data)
                except Exception as ex:
                    pass

            elif action == 'edit':
                try:
                    data['title'] = 'Editar Cliente'
                    data['cliente'] = cliente = Cliente.objects.get(pk=request.GET['id'])
                    data['form'] = ClienteForm(initial={'tipo': cliente.tipo,
                                                        'identificacion': cliente.identificacion,
                                                        'nombre': cliente.nombre,
                                                        'domicilio': cliente.domicilio,
                                                        'fecha_nacimiento': cliente.fecha_nacimiento,
                                                        'email': cliente.email,
                                                        'telefono': cliente.telefono,
                                                        'celular': cliente.celular,
                                                        'usuario': cliente.usuario.username,
                                                        'ruc': cliente.ruc,
                                                        'razon_social': cliente.razon_social,
                                                        'representante_legal': cliente.representante_legal,
                                                        'tipo_cabello': cliente.tipo_cabello,
                                                        'tipo_piel': cliente.tipo_piel,
                                                        'caracteristicas_fisicas': cliente.caracteristicas_fisicas,
                                                        'alergias': cliente.alergias,
                                                        'oportunidades_servicios': cliente.oportunidades_servicios,
                                                        'foto': cliente.foto})
                    return render_to_response("clientes/edit.html", data)
                except Exception as ex:
                    pass

            elif action == 'delete':
                try:
                    data['title'] = 'Borrar Cliente'
                    data['cliente'] = Cliente.objects.get(pk=request.GET['id'])
                    return render_to_response("clientes/delete.html", data)
                except Exception as ex:
                    pass

            elif action == 'resetear':
                try:
                    data['title'] = u'Resetear clave del usuario'
                    data['cliente'] = Cliente.objects.get(pk=request.GET['id'])
                    return render_to_response("clientes/resetear.html", data)
                except Exception as ex:
                    pass

            return HttpResponseRedirect(url_back(request, mensaje_excepcion(ex.args[0])))

        else:
            search = None
            tipo = None

            if 't' in request.GET and int(request.GET['t']) > 0:
                tipo = request.GET['t']

            if 's' in request.GET:
                search = request.GET['s']

            clientes = Cliente.objects.all().select_related('tipo_cabello', 'tipo_piel')
            if search:
                clientes = clientes.filter(Q(nombre__icontains=search) |
                                           Q(ruc__icontains=search) |
                                           Q(identificacion__icontains=search) |
                                           Q(email__icontains=search) |
                                           Q(usuario__username__icontains=search))
            if tipo:
                clientes = clientes.filter(tipo=tipo)

            paging = MiPaginador(clientes, 30)
            p = 1
            try:
                if 'page' in request.GET:
                    p = int(request.GET['page'])
                page = paging.page(p)
            except:
                page = paging.page(1)
            data['paging'] = paging
            data['rangospaging'] = paging.rangos_paginado(p)
            data['page'] = page
            data['search'] = search if search else ""
            data['clientes'] = page.object_list
            data['tipoid'] = int(tipo) if tipo else ""
            return render_to_response("clientes/clientes.html", data)
Example #2
0
def view(request):
    ex = None
    data = {'title': u'Productos'}
    addUserData(request, data)

    if request.method == 'POST':
        action = request.POST['action']
        if action == 'add':
            f = ProductoForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        producto = Producto(
                            tipo=f.cleaned_data['tipo'],
                            codigo=f.cleaned_data['codigo'],
                            descripcion=f.cleaned_data['descripcion'],
                            unidadmedida=f.cleaned_data['unidadmedida'],
                            tipoproducto=f.cleaned_data['tipoproducto'],
                            alias=f.cleaned_data['alias'],
                            codigobarra=f.cleaned_data['codigobarra'],
                            minimo=f.cleaned_data['minimo'],
                            con_iva=f.cleaned_data['con_iva'],
                            precio=f.cleaned_data['precio'],
                            precio_cliente_normal=f.
                            cleaned_data['precio_cliente_normal'],
                            precio_cliente_corporativo=f.
                            cleaned_data['precio_cliente_corporativo'],
                            precio_cliente_vip=f.
                            cleaned_data['precio_cliente_vip'])
                        producto.save()

                        # Guardar Historial de cambios de precios
                        historialprecio = HistorialPrecioProducto(
                            producto=producto,
                            precio=producto.precio,
                            precio_cliente_normal=producto.
                            precio_cliente_normal,
                            precio_cliente_corporativo=producto.
                            precio_cliente_corporativo,
                            precio_cliente_vip=producto.precio_cliente_vip,
                            usuario=request.user,
                            modulo='P',  # C - Compra, P - Productos
                            accion=ACCION_ADICIONAR)
                        historialprecio.save()

                        salva_auditoria(request, producto, ACCION_ADICIONAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        elif action == 'edit':
            producto = Producto.objects.get(pk=request.POST['id'])
            f = ProductoForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        flag1 = producto.precio != f.cleaned_data['precio']
                        flag2 = producto.precio_cliente_normal != f.cleaned_data[
                            'precio_cliente_normal']
                        flag3 = producto.precio_cliente_corporativo != f.cleaned_data[
                            'precio_cliente_corporativo']
                        flag4 = producto.precio_cliente_vip != f.cleaned_data[
                            'precio_cliente_vip']
                        producto.codigo = f.cleaned_data['codigo']
                        producto.codigobarra = f.cleaned_data['codigobarra']
                        producto.descripcion = f.cleaned_data['descripcion']
                        producto.tipoproducto = f.cleaned_data['tipoproducto']
                        producto.unidadmedida = f.cleaned_data['unidadmedida']
                        producto.alias = f.cleaned_data['alias']
                        producto.minimo = f.cleaned_data['minimo']
                        producto.con_iva = f.cleaned_data['con_iva']
                        producto.precio = f.cleaned_data['precio']
                        producto.precio_cliente_normal = f.cleaned_data[
                            'precio_cliente_normal']
                        producto.precio_cliente_corporativo = f.cleaned_data[
                            'precio_cliente_corporativo']
                        producto.precio_cliente_vip = f.cleaned_data[
                            'precio_cliente_vip']
                        producto.save()

                        # Guardar Historial si hubo cambios de precios
                        if flag1 or flag2 or flag3 or flag4:
                            historialprecio = HistorialPrecioProducto(
                                producto=producto,
                                precio=producto.precio,
                                precio_cliente_normal=producto.
                                precio_cliente_normal,
                                precio_cliente_corporativo=producto.
                                precio_cliente_corporativo,
                                precio_cliente_vip=producto.precio_cliente_vip,
                                fecha=datetime.now().date(),
                                usuario=request.user,
                                modulo='P',
                                accion=ACCION_MODIFICAR)
                            historialprecio.save()

                        for pp in producto.paqueteproducto_set.all():
                            pp.paquete.save()

                        salva_auditoria(request, producto, ACCION_MODIFICAR)
                    return ok_json()

                except Exception:
                    return bad_json(error=2)
            else:
                return bad_json(error=2)

        elif action == 'delete':
            producto = Producto.objects.get(pk=request.POST['id'])
            try:
                with transaction.atomic():
                    salva_auditoria(request, producto, ACCION_ELIMINAR)
                    producto.delete()
                return ok_json()
            except Exception:
                return bad_json(error=3)

        elif action == 'get_next_codigo':
            t = int(request.POST['tid'])
            if t == TIPO_PRODUCTO_PARA_VENTA:
                tipo = 'V'
            elif t == TIPO_PRODUCTO_PARA_CONSUMO:
                tipo = 'C'
            else:
                tipo = 'R'
            categoria = TipoProducto.objects.get(pk=request.POST['cid'])
            try:
                codigo = "P{}-{}-0001".format(tipo, categoria.codigo)
                ultimo_producto = categoria.get_ultimo_producto()
                if ultimo_producto:
                    codigo = "P{}-{}-{}".format(
                        tipo, categoria.codigo,
                        str(ultimo_producto.secuencia_codigo() + 1).zfill(4))
                return ok_json(data={"codigo": codigo})
            except Exception:
                return bad_json(error=1)

        elif action == 'cargarfoto':
            form = FotoProductoForm(request.POST, request.FILES)
            producto = Producto.objects.get(pk=request.POST['id'])
            if form.is_valid():
                try:
                    with transaction.atomic():
                        newfile = request.FILES['foto']
                        newfile._name = generar_nombre("foto_", newfile._name)
                        producto.foto = newfile
                        producto.save()
                    return ok_json()
                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        elif action == 'favorito':
            try:
                producto = Producto.objects.get(pk=request.POST['idprod'])
                try:
                    with transaction.atomic():
                        producto.favorito = False if producto.favorito else True
                        producto.save()
                        return ok_json()
                except Exception:
                    return bad_json(error=1)
            except:
                return bad_json(error=1)

        return bad_json(error=0)

    else:
        if 'action' in request.GET:
            action = request.GET['action']
            if action == 'add':
                try:
                    data['title'] = u'Crear Producto'
                    data['form'] = ProductoForm()
                    return render_to_response('productos/add.html', data)
                except Exception as ex:
                    pass

            elif action == 'edit':
                try:
                    data['title'] = u'Modificar Producto'
                    data['producto'] = producto = Producto.objects.get(
                        pk=request.GET['id'])
                    form = ProductoForm(initial=model_to_dict(producto))
                    form.for_editproducto()
                    data['form'] = form
                    return render_to_response('productos/edit.html', data)
                except Exception as ex:
                    pass

            elif action == 'delete':
                try:
                    data['title'] = u'Eliminar Producto'
                    data['producto'] = Producto.objects.get(
                        pk=request.GET['id'])
                    return render_to_response('productos/delete.html', data)
                except Exception as ex:
                    pass

            elif action == 'cargarfoto':
                try:
                    data['title'] = u'Cargar Foto del Producto '
                    data['producto'] = Producto.objects.get(
                        pk=request.GET['id'])
                    data['form'] = FotoProductoForm()
                    return render_to_response('productos/cargarfoto.html',
                                              data)
                except Exception as ex:
                    pass

            elif action == 'catalogo':
                try:
                    data['title'] = u'Catalogo de Productos'
                    data['categorias'] = categorias = TipoProducto.objects.all(
                    )
                    categoria = categorias[0]
                    if 'cid' in request.GET:
                        cid = int(request.GET['cid'])
                        categoria = categorias.filter(pk=cid)[0]
                    inventarios = categoria.productos_con_existencias()

                    cantidad_filas = 0
                    if inventarios:
                        if inventarios.count() > 8:
                            cantidad_filas = int(
                                math.ceil(inventarios.count() / 8.0))
                        else:
                            cantidad_filas = 1
                    salto = 8
                    lista = []
                    for i in range(cantidad_filas):
                        a = i * salto
                        lista.append((i, inventarios[a:(a + salto)]))

                    data['lista'] = lista
                    data['cantidad_filas'] = cantidad_filas
                    data['categoria'] = categoria
                    return render_to_response('productos/catalogo.html', data)
                except Exception as ex:
                    pass

            elif action == 'catalogopdf':
                try:
                    data['title'] = u'Catálogo de Productos por Categoria'
                    categoria = TipoProducto.objects.get(
                        pk=int(request.GET['cid']))

                    inventarios = categoria.productos_con_existencias()
                    cantidad_productos = inventarios.count()
                    cantidad_paginas = int(math.ceil(cantidad_productos /
                                                     12.0))

                    paginas = []
                    salto = 4
                    inicio = 0
                    fin = 4
                    for p in range(1, cantidad_paginas + 1):
                        grupo1 = inventarios[inicio:fin]
                        inicio = fin
                        fin += salto
                        grupo2 = inventarios[inicio:fin]
                        inicio = fin
                        fin += salto
                        grupo3 = inventarios[inicio:fin]
                        inicio = fin
                        fin += salto
                        paginas.append((p, grupo1, grupo2, grupo3))

                    data['paginas'] = paginas
                    data['categoria'] = categoria
                    data['request'] = request
                    html = render_to_string('productos/catalogopdf.html', data,
                                            request)
                    return generar_pdf(html)
                except Exception as ex:
                    pass

            elif action == 'todospdf':
                try:
                    data['title'] = u'Catálogo de todos los Productos'
                    data[
                        'categorias'] = categorias = TipoProducto.objects.filter(
                            producto__inventarioreal__cantidad__gt=0).distinct(
                            )

                    lista = collections.OrderedDict()
                    listado_final = collections.OrderedDict()
                    for c in categorias:
                        lista_productos_ordenados = []
                        for inventario in c.productos_con_existencias():
                            lista_productos_ordenados.append(inventario)
                        lista[c] = lista_productos_ordenados

                    salto = 4
                    for x, y in lista.items():
                        inicio = 0
                        fin = 4
                        listado = []
                        for p in range(1, x.cantidad_paginas_catalogo() + 1):
                            grupo1 = y[inicio:fin]
                            inicio = fin
                            fin += salto
                            grupo2 = y[inicio:fin]
                            inicio = fin
                            fin += salto
                            grupo3 = y[inicio:fin]
                            inicio = fin
                            fin += salto
                            listado.append((p, grupo1, grupo2, grupo3))
                        listado_final[x] = listado

                    data['listado_final'] = listado_final
                    data['request'] = request
                    html = render_to_string('productos/todospdf.html', data,
                                            request)
                    return generar_pdf(html)
                except Exception as ex:
                    pass

            return HttpResponseRedirect(
                url_back(request, mensaje_excepcion(ex.args[0])))

        else:
            search = None
            tipo = None
            tipodestino = None

            if 't' in request.GET and int(request.GET['t']) > 0:
                tipo = int(request.GET['t'])

            if 'tipo' in request.GET and int(request.GET['tipo']) > 0:
                tipodestino = int(request.GET['tipo'])

            if 's' in request.GET:
                search = request.GET['s']

            productos = Producto.objects.filter(activo=True).select_related(
                'unidadmedida', 'tipoproducto')
            if search:
                productos = productos.filter(
                    Q(codigo__icontains=search)
                    | Q(descripcion__icontains=search))

            if tipo and tipodestino:
                productos = productos.filter(tipoproducto__id=tipo,
                                             tipo=tipodestino)

            if tipo:
                productos = productos.filter(tipoproducto__id=tipo)

            if tipodestino:
                productos = productos.filter(tipo=tipodestino)

            paging = MiPaginador(productos, 30)
            p = 1
            try:
                if 'page' in request.GET:
                    p = int(request.GET['page'])
                page = paging.page(p)
            except:
                page = paging.page(p)

            data['paging'] = paging
            data['rangospaging'] = paging.rangos_paginado(p)
            data['page'] = page
            data['search'] = search if search else ""
            data['productos'] = page.object_list
            data['categoriaid'] = int(tipo) if tipo else ""
            data['tipoid'] = int(tipodestino) if tipodestino else ""
            data['tipos_productos'] = TipoProducto.objects.all()
            return render_to_response("productos/productos.html", data)
Example #3
0
def view(request):
    ex = None
    data = {'title': u'Control de Sesiones de Paquetes'}
    addUserData(request, data)
    if request.method == 'POST':
        action = request.POST['action']
        if action == 'add':
            f = SesionesForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        sesion = Sesion(
                            factura=f.cleaned_data['factura'],
                            cliente=f.cleaned_data['cliente'],
                            paquete=f.cleaned_data['paquete'],
                            colaborador=f.cleaned_data['colaborador'],
                            fecha=f.cleaned_data['fecha'],
                            proxima_cita=f.cleaned_data['proxima_cita'],
                            observaciones=f.cleaned_data['observaciones'],
                            cerrada=False)
                        sesion.save()
                        salva_auditoria(request, sesion, ACCION_ADICIONAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        elif action == 'edit':
            sesion = Sesion.objects.get(pk=request.POST['id'])
            f = SesionesForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        sesion.factura = f.cleaned_data['factura']
                        sesion.paquete = f.cleaned_data['paquete']
                        sesion.cliente = f.cleaned_data['cliente']
                        sesion.colaborador = f.cleaned_data['colaborador']
                        sesion.fecha = f.cleaned_data['fecha']
                        sesion.proxima_cita = f.cleaned_data['proxima_cita']
                        sesion.observaciones = f.cleaned_data['observaciones']
                        sesion.save()
                        salva_auditoria(request, sesion, ACCION_MODIFICAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=2)
            else:
                return bad_json(error=2)

        elif action == 'delete':
            try:
                sesion = Sesion.objects.get(pk=request.POST['id'])
                with transaction.atomic():
                    salva_auditoria(request, sesion, ACCION_ELIMINAR)
                    sesion.delete()
                    return ok_json()

            except Exception:
                return bad_json(error=3)

        elif action == 'get_factura_data':
            try:
                factura = Factura.objects.get(pk=request.POST['idfact'])
                cliente = factura.cliente
                colaborador = factura.mis_colaboradores(
                )[0] if factura.mis_colaboradores() else None
                paquete = factura.detallefactura_set.filter(
                    paquete__isnull=False)[0].paquete
                return ok_json(
                    data={
                        'cliente': cliente.id if cliente else "",
                        'paquete': paquete.id if paquete else "",
                        'fecha': factura.fecha.strftime('%d-%m-%Y'),
                        'colaborador': colaborador.id if colaborador else ""
                    })
            except Exception:
                return bad_json(error=1)

        return bad_json(error=0)

    else:
        if 'action' in request.GET:
            action = request.GET['action']
            if action == 'add':
                try:
                    data['title'] = u'Crear Sesión'
                    form = SesionesForm(
                        initial={'fecha': datetime.now().date()})
                    form.solo_facturas_con_paquetes()
                    data['form'] = form
                    return render_to_response("sesiones/add.html", data)
                except Exception as ex:
                    pass

            elif action == 'edit':
                try:
                    data['title'] = u'Editar Sesión'
                    data['sesion'] = sesion = Sesion.objects.get(
                        pk=request.GET['id'])
                    form = SesionesForm(
                        initial={
                            'factura': sesion.factura,
                            'paquete': sesion.paquete,
                            'cliente': sesion.cliente,
                            'colaborador': sesion.colaborador,
                            'fecha': sesion.fecha,
                            'observaciones': sesion.observaciones,
                            'proxima_cita': sesion.proxima_cita
                        })
                    form.solo_facturas_con_paquetes()
                    data['form'] = form
                    return render_to_response("sesiones/edit.html", data)
                except Exception as ex:
                    pass

            elif action == 'delete':
                try:
                    data['title'] = u'Borrar Sesión'
                    data['sesion'] = Sesion.objects.get(pk=request.GET['id'])
                    return render_to_response("sesiones/delete.html", data)
                except Exception as ex:
                    pass

            return HttpResponseRedirect(
                url_back(request, mensaje_excepcion(ex.args[0])))

        else:
            search = None

            if 's' in request.GET:
                search = request.GET['s']

            sesiones = Sesion.objects.all().select_related(
                'paquete', 'cliente', 'colaborador')
            if search:
                sesiones = sesiones.filter(
                    Q(cliente__nombre__icontains=search)
                    | Q(cliente__ruc__icontains=search)
                    | Q(cliente__identificacion__icontains=search))

            paging = MiPaginador(sesiones, 30)
            p = 1
            try:
                if 'page' in request.GET:
                    p = int(request.GET['page'])
                page = paging.page(p)
            except:
                page = paging.page(1)
            data['paging'] = paging
            data['rangospaging'] = paging.rangos_paginado(p)
            data['page'] = page
            data['search'] = search if search else ""
            data['sesiones'] = page.object_list
            return render_to_response("sesiones/view.html", data)
Example #4
0
def view(request):
    ex = None
    data = {'title': u'Servicios'}
    addUserData(request, data)
    if request.method == 'POST':
        action = request.POST['action']
        if action == 'add':
            f = ServicioForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        servicio = Servicio(
                            codigo=f.cleaned_data['codigo'],
                            descripcion=f.cleaned_data['descripcion'],
                            unidadmedida=f.cleaned_data['unidadmedida'],
                            tiposervicio=f.cleaned_data['tiposervicio'],
                            alias=f.cleaned_data['alias'],
                            con_iva=f.cleaned_data['con_iva'],
                            costo_estandar=f.cleaned_data['costo_estandar'],
                            precio=f.cleaned_data['precio'],
                            precio_cliente_normal=f.
                            cleaned_data['precio_cliente_normal'],
                            precio_cliente_corporativo=f.
                            cleaned_data['precio_cliente_corporativo'],
                            precio_cliente_vip=f.
                            cleaned_data['precio_cliente_vip'])
                        servicio.save()

                        # Guardar Historial de cambios de precios
                        historialprecio = HistorialPrecioServicio(
                            servicio=servicio,
                            precio=servicio.precio,
                            precio_cliente_normal=servicio.
                            precio_cliente_normal,
                            precio_cliente_corporativo=servicio.
                            precio_cliente_corporativo,
                            precio_cliente_vip=servicio.precio_cliente_vip,
                            usuario=request.user,
                            modulo='S',  # C - Compra, S - Servicios
                            accion=ACCION_ADICIONAR)
                        historialprecio.save()

                        salva_auditoria(request, servicio, ACCION_ADICIONAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        elif action == 'edit':
            servicio = Servicio.objects.get(pk=request.POST['id'])
            f = ServicioForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        flag1 = servicio.precio != f.cleaned_data['precio']
                        flag2 = servicio.precio_cliente_normal != f.cleaned_data[
                            'precio_cliente_normal']
                        flag3 = servicio.precio_cliente_corporativo != f.cleaned_data[
                            'precio_cliente_corporativo']
                        flag4 = servicio.precio_cliente_vip != f.cleaned_data[
                            'precio_cliente_vip']
                        servicio.codigo = f.cleaned_data['codigo']
                        servicio.descripcion = f.cleaned_data['descripcion']
                        servicio.tiposervicio = f.cleaned_data['tiposervicio']
                        servicio.unidadmedida = f.cleaned_data['unidadmedida']
                        servicio.alias = f.cleaned_data['alias']
                        servicio.con_iva = f.cleaned_data['con_iva']
                        servicio.costo_estandar = f.cleaned_data[
                            'costo_estandar']
                        servicio.precio = f.cleaned_data['precio']
                        servicio.precio_cliente_normal = f.cleaned_data[
                            'precio_cliente_normal']
                        servicio.precio_cliente_corporativo = f.cleaned_data[
                            'precio_cliente_corporativo']
                        servicio.precio_cliente_vip = f.cleaned_data[
                            'precio_cliente_vip']
                        servicio.save()

                        # Guardar Historial si hubo cambios de precios
                        if flag1 or flag2 or flag3 or flag4:
                            historialprecio = HistorialPrecioServicio(
                                servicio=servicio,
                                precio=servicio.precio,
                                precio_cliente_normal=servicio.
                                precio_cliente_normal,
                                precio_cliente_corporativo=servicio.
                                precio_cliente_corporativo,
                                precio_cliente_vip=servicio.precio_cliente_vip,
                                fecha=datetime.now().date(),
                                usuario=request.user,
                                modulo='S',
                                accion=ACCION_MODIFICAR)
                            historialprecio.save()

                        for ps in servicio.paqueteservicio_set.all():
                            ps.paquete.save()

                        salva_auditoria(request, servicio, ACCION_MODIFICAR)
                    return ok_json()

                except Exception:
                    return bad_json(error=2)
            else:
                return bad_json(error=2)

        elif action == 'delete':
            servicio = Servicio.objects.get(pk=request.POST['id'])
            try:
                with transaction.atomic():
                    salva_auditoria(request, servicio, ACCION_ELIMINAR)
                    servicio.delete()
                return ok_json()

            except Exception:
                return bad_json(error=3)

        elif action == 'get_next_codigo':
            categoria = TipoServicio.objects.get(pk=request.POST['cid'])
            try:
                with transaction.atomic():
                    codigo = "SV-{}-0001".format(categoria.codigo)
                    ultimo_servicio = categoria.get_ultimo_servicio()
                    if ultimo_servicio:
                        codigo = "SV-{}-{}".format(
                            categoria.codigo,
                            str(ultimo_servicio.secuencia_codigo() +
                                1).zfill(4))
                    return ok_json(data={"codigo": codigo})

            except Exception:
                return bad_json(error=1)

        elif action == 'favorito':
            try:
                servicio = Servicio.objects.get(pk=request.POST['idprod'])
                try:
                    with transaction.atomic():
                        servicio.favorito = False if servicio.favorito else True
                        servicio.save()
                        return ok_json()
                except Exception:
                    return bad_json(error=1)
            except:
                return bad_json(error=1)

        if action == 'addreceta':
            servicio = Servicio.objects.get(pk=request.POST['id'])
            f = RecetaForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        receta = Receta(servicio=servicio,
                                        producto=f.cleaned_data['producto'])
                        receta.save()

                        salva_auditoria(request, receta, ACCION_ADICIONAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        elif action == 'deletereceta':
            receta = Receta.objects.get(pk=request.POST['id'])
            try:
                with transaction.atomic():
                    salva_auditoria(request, receta, ACCION_ELIMINAR)
                    receta.delete()
                return ok_json()

            except Exception:
                return bad_json(error=1)

        return bad_json(error=0)

    else:
        if 'action' in request.GET:
            action = request.GET['action']
            if action == 'add':
                try:
                    data['title'] = u'Crear Servicio'
                    data['form'] = ServicioForm()
                    return render_to_response('servicios/add.html', data)
                except Exception as ex:
                    pass

            elif action == 'edit':
                try:
                    data['title'] = u'Modificar Servicio'
                    data['servicio'] = servicio = Servicio.objects.get(
                        pk=request.GET['id'])
                    form = ServicioForm(initial=model_to_dict(servicio))
                    form.for_edit()
                    data['form'] = form
                    return render_to_response('servicios/edit.html', data)
                except Exception as ex:
                    pass

            elif action == 'delete':
                try:
                    data['title'] = u'Eliminar Producto'
                    data['servicio'] = Servicio.objects.get(
                        pk=request.GET['id'])
                    return render_to_response('servicios/delete.html', data)
                except Exception as ex:
                    pass

            elif action == 'receta':
                try:
                    data['title'] = u'Receta del Servicio'
                    data['servicio'] = servicio = Servicio.objects.get(
                        pk=request.GET['id'])
                    data['receta'] = servicio.mi_receta()
                    return render_to_response('servicios/receta.html', data)
                except Exception as ex:
                    pass

            if action == 'addreceta':
                try:
                    data[
                        'title'] = u'Adicionar producto a la receta del servicio'
                    data['servicio'] = servicio = Servicio.objects.get(
                        pk=request.GET['id'])
                    form = RecetaForm()
                    form.for_receta(servicio)
                    data['form'] = form
                    return render_to_response('servicios/addreceta.html', data)
                except Exception as ex:
                    pass

            elif action == 'deletereceta':
                try:
                    data['title'] = u'Eliminar producto de la receta'
                    data['receta'] = Receta.objects.get(pk=request.GET['id'])
                    return render_to_response('servicios/deletereceta.html',
                                              data)
                except Exception as ex:
                    pass

            return HttpResponseRedirect(
                url_back(request, mensaje_excepcion(ex.args[0])))

        else:
            search = None
            tipo = None

            if 't' in request.GET and int(request.GET['t']) > 0:
                tipo = int(request.GET['t'])

            if 's' in request.GET:
                search = request.GET['s']

            servicios = Servicio.objects.filter(activo=True).select_related(
                'unidadmedida', 'tiposervicio')
            if search:
                servicios = servicios.filter(
                    Q(codigo__icontains=search)
                    | Q(descripcion__icontains=search))

            if tipo:
                servicios = servicios.filter(tiposervicio__id=tipo)

            paging = MiPaginador(servicios, 30)
            p = 1
            try:
                if 'page' in request.GET:
                    p = int(request.GET['page'])
                page = paging.page(p)
            except:
                page = paging.page(p)

            data['paging'] = paging
            data['rangospaging'] = paging.rangos_paginado(p)
            data['page'] = page
            data['search'] = search if search else ""
            data['servicios'] = page.object_list
            data['categoriaid'] = int(tipo) if tipo else ""
            data['tipos_servicios'] = TipoServicio.objects.all()
            return render_to_response("servicios/servicios.html", data)
Example #5
0
def view(request):
    ex = None
    data = {'title': u'Sesiones de Caja'}
    addUserData(request, data)

    usuario = request.user
    if not data['es_cajero']:
        return HttpResponseRedirect("/?info=El usuario no tiene permisos como cajero")
    data['cajero'] = cajero = usuario.cajero_set.all()[0]

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

        if action == 'abrirsesion':
            f = SesionCajaForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        sc = SesionCaja(cajero=cajero,
                                        fecha=datetime.now(),
                                        fondo=f.cleaned_data['fondo'],
                                        abierta=True)
                        sc.save()
                        salva_auditoria(request, sc, ACCION_MODIFICAR, 'Abierta sesion de caja: ' + sc.__str__())
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        elif action == 'closesesion':
            sc = SesionCaja.objects.get(pk=request.POST['id'])
            f = CierreSesionCajaForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        sc.bill100 = f.cleaned_data['bill100']
                        sc.bill50 = f.cleaned_data['bill50']
                        sc.bill20 = f.cleaned_data['bill20']
                        sc.bill10 = f.cleaned_data['bill10']
                        sc.bill5 = f.cleaned_data['bill5']
                        sc.bill2 = f.cleaned_data['bill2']
                        sc.bill1 = f.cleaned_data['bill1']
                        sc.enmonedas = f.cleaned_data['enmonedas']
                        sc.cheque = f.cleaned_data['cheque']
                        sc.deposito = f.cleaned_data['deposito']
                        sc.transferencia = f.cleaned_data['transferencia']
                        sc.abierta = False
                        sc.fechacierre = datetime.now()
                        sc.horacierre = datetime.now().time()
                        sc.save()
                        salva_auditoria(request, sc, ACCION_MODIFICAR, 'Cerrada sesion de caja: {}'.format(sc))
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        return bad_json(error=0)

    else:
        if 'action' in request.GET:
            action = request.GET['action']
            if action == 'addsesion':
                try:
                    data['title'] = u'Abrir Sesión de Caja'
                    data['form'] = SesionCajaForm(initial={'fondo': '0.00'})
                    return render_to_response("caja/adicionarbs.html", data)
                except Exception as ex:
                    pass

            elif action == 'closesesion':
                try:
                    data['title'] = u'Cierre Sesión de Caja'
                    data['sesion'] = SesionCaja.objects.get(pk=request.GET['id'])
                    data['form'] = CierreSesionCajaForm(initial={'bill100': 0,
                                                                 'bill50': 0,
                                                                 'bill20': 0,
                                                                 'bill10': 0,
                                                                 'bill5': 0,
                                                                 'bill2': 0,
                                                                 'bill1': 0,
                                                                 'enmonedas': 0.00,
                                                                 'cheque': 0.00,
                                                                 'deposito': 0.00,
                                                                 'transferencia': 0.00,
                                                                 'total': 0.00})
                    return render_to_response("caja/cerrarsesionbs.html", data)
                except Exception as ex:
                    pass

            return HttpResponseRedirect(url_back(request, mensaje_excepcion(ex.args[0])))

        else:
            sesiones = cajero.sesiones_caja()
            paging = MiPaginador(sesiones, 30)
            p = 1
            try:
                if 'page' in request.GET:
                    p = int(request.GET['page'])
                sesionespagina = paging.page(p)
            except:
                sesionespagina = paging.page(1)
            data['paging'] = paging
            data['rangospaging'] = paging.rangos_paginado(p)
            data['page'] = sesionespagina
            data['sesiones'] = sesionespagina.object_list
            return render_to_response("caja/sesionesbs.html", data)
Example #6
0
def view(request):
    ex = None
    data = {'title': u'Gestión de Cajeros'}
    addUserData(request, data)

    if request.method == 'POST':
        action = request.POST['action']
        if action == 'add':
            f = CajeroForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        cedula = f.cleaned_data['cedula']
                        usuario_nombre = f.cleaned_data['usuario']
                        if Cajero.objects.filter(cedula=cedula).exists():
                            return bad_json(
                                mensaje=
                                u"Ya existe un cajero registrado con ese número de cedula."
                            )
                        if User.objects.filter(
                                username=usuario_nombre).exists():
                            return bad_json(
                                mensaje=
                                u"Ya existe ese nombre de usuario en el sistema favor de corregir."
                            )

                        cajero = Cajero(cedula=cedula,
                                        nombre=f.cleaned_data['nombre'],
                                        direccion=f.cleaned_data['direccion'],
                                        telefono=f.cleaned_data['telefono'],
                                        email=f.cleaned_data['email'])
                        cajero.save()

                        user = User.objects.create_user(
                            usuario_nombre, cajero.email, DEFAULT_PASSWORD)
                        user.username = user.username.lower()
                        user.save()
                        cajero.usuario = user
                        cajero.save()
                        g = Group.objects.get(pk=CAJAS_GROUP_ID)
                        g.user_set.add(user)
                        g.save()
                        salva_auditoria(request, cajero, ACCION_ADICIONAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        elif action == 'edit':
            cajero = Cajero.objects.get(pk=request.POST['id'])
            f = CajeroForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        cedula = f.cleaned_data['cedula']
                        usuario_nombre = f.cleaned_data['usuario']
                        if Cajero.objects.filter(cedula=cedula).exclude(
                                id=cajero.id).exists():
                            return bad_json(
                                mensaje=
                                u"Ya existe un cajero registrado con ese número de cedula."
                            )
                        if User.objects.filter(
                                username=usuario_nombre).exclude(
                                    cajero__id=cajero.id).exists():
                            return bad_json(
                                mensaje=
                                u"Ya existe ese nombre de usuario en el sistema favor de corregir."
                            )

                        cajero.cedula = cedula
                        cajero.nombre = f.cleaned_data['nombre']
                        cajero.direccion = f.cleaned_data['direccion']
                        cajero.telefono = f.cleaned_data['telefono']
                        cajero.email = f.cleaned_data['email']
                        cajero.save()
                        cajero.usuario.username = usuario_nombre
                        cajero.usuario.save()
                        salva_auditoria(request, cajero, ACCION_MODIFICAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=2)
            else:
                return bad_json(error=2)

        elif action == 'delete':
            try:
                cajero = Cajero.objects.get(pk=request.POST['id'])
                with transaction.atomic():
                    salva_auditoria(request, cajero, ACCION_ELIMINAR)
                    cajero.delete()
                    return ok_json()

            except Exception:
                return bad_json(error=3)

        elif action == 'resetear':
            try:
                cajero = Cajero.objects.get(pk=request.POST['id'])
                with transaction.atomic():
                    user = cajero.usuario
                    user.set_password(DEFAULT_PASSWORD)
                    user.save()
                    salva_auditoria(request, cajero, ACCION_MODIFICAR)
                    return ok_json()

            except Exception:
                return bad_json(error=2)

        return bad_json(error=0)
    else:
        if 'action' in request.GET:
            action = request.GET['action']
            if action == 'add':
                try:
                    data['title'] = u'Crear Cajero'
                    data['form'] = CajeroForm()
                    return render_to_response("cajeros/add.html", data)
                except Exception as ex:
                    pass

            elif action == 'edit':
                try:
                    data['title'] = u'Editar Cajero'
                    data['cajero'] = cajero = Cajero.objects.get(
                        pk=request.GET['id'])
                    data['form'] = CajeroForm(
                        initial={
                            'cedula': cajero.cedula,
                            'nombre': cajero.nombre,
                            'direccion': cajero.direccion,
                            'telefono': cajero.telefono,
                            'email': cajero.email,
                            'usuario': cajero.usuario.username
                        })
                    return render_to_response("cajeros/edit.html", data)
                except Exception as ex:
                    pass

            elif action == 'delete':
                try:
                    data['title'] = u'Borrar cajero'
                    data['cajero'] = Cajero.objects.get(pk=request.GET['id'])
                    return render_to_response("cajeros/delete.html", data)
                except Exception as ex:
                    pass

            elif action == 'resetear':
                try:
                    data['title'] = u'Resetear clave del cajero'
                    data['cajero'] = Cajero.objects.get(pk=request.GET['id'])
                    return render_to_response("cajeros/resetear.html", data)
                except Exception as ex:
                    pass

            return HttpResponseRedirect(
                url_back(request, mensaje_excepcion(ex.args[0])))

        else:
            search = None

            if 's' in request.GET:
                search = request.GET['s']
            if search:
                cajeros = Cajero.objects.filter(
                    Q(nombre__icontains=search) | Q(cedula__icontains=search)
                    | Q(usuario__username__icontains=search))
            else:
                cajeros = Cajero.objects.all()

            paging = MiPaginador(cajeros, 30)
            p = 1
            try:
                if 'page' in request.GET:
                    p = int(request.GET['page'])
                page = paging.page(p)
            except:
                page = paging.page(1)
            data['paging'] = paging
            data['rangospaging'] = paging.rangos_paginado(p)
            data['page'] = page
            data['search'] = search if search else ""
            data['cajeros'] = page.object_list
            return render_to_response("cajeros/view.html", data)
Example #7
0
def view(request):
    ex = None
    data = {'title': u'Ordenes de Servicio'}
    addUserData(request, data)
    if not data['es_colaborador']:
        return bad_json(
            mensaje=u"El usuario no pertenece al grupo de colaboradores")
    if not Colaborador.objects.filter(usuario__username=request.user).exists():
        return bad_json(mensaje=u"El usuario no es colaborador")
    colaborador = Colaborador.objects.filter(usuario__username=request.user)[0]

    if request.method == 'POST':
        action = request.POST['action']
        if action == 'delete':
            orden = OrdenServicio.objects.get(pk=request.POST['id'])
            try:
                with transaction.atomic():
                    salva_auditoria(request, orden, ACCION_ELIMINAR)
                    orden.delete()
                    return ok_json()

            except Exception:
                return bad_json(error=3)

        elif action == 'datoscliente':
            cliente = None

            if 'idc' in request.POST and int(request.POST['idc']) > 0:
                cliente = Cliente.objects.get(pk=int(request.POST['idc']))
                if not cliente.identificacion:
                    diff_lenght_clienteid = 10 - len(str(cliente.id))
                    cliente.identificacion = str(
                        cliente.id) + '1'.zfill(diff_lenght_clienteid)
                    cliente.save()

            if 'identificacion' in request.POST[
                    'identificacion'] and request.POST['identificacion']:
                if Cliente.objects.filter(identificacion=request.
                                          POST['identificacion']).exists():
                    cliente = Cliente.objects.filter(
                        identificacion=request.POST['identificacion'])[0]

            if cliente:

                if cliente.tipo == TIPO_CLIENTE_NORMAL:
                    tipo = 1
                    ruc = cliente.identificacion
                elif cliente.tipo == TIPO_CLIENTE_CORPORATIVO:
                    tipo = 2
                    if not cliente.ruc and cliente.identificacion:
                        cliente.ruc = cliente.identificacion
                        cliente.save()
                    ruc = cliente.ruc
                else:
                    tipo = 3
                    ruc = cliente.identificacion

                return ok_json(
                    data={
                        "identificacion": ruc,
                        "nombre": cliente.nombre,
                        "tipo": tipo,
                        "telefono": cliente.mi_telefono(),
                        "email": cliente.email,
                        "direccion": cliente.domicilio
                    })
            else:
                return bad_json(error=1)

        elif action == 'generar':
            try:
                with transaction.atomic():

                    datos = json.loads(request.POST['items'])
                    items = json.loads(request.POST['productos'])

                    if Cliente.objects.filter(
                            identificacion=datos['ruccliente']).exists():
                        cliente = Cliente.objects.filter(
                            identificacion=datos['ruccliente'])[0]
                        cliente.nombre = datos['nombrecliente']
                        cliente.domicilio = datos['direccioncliente']
                        cliente.tipo = int(datos['tipoclienteid'])
                        cliente.telefono = datos['telefonocliente']
                        cliente.email = datos['emailcliente']
                        cliente.save()
                    else:
                        cliente = Cliente(identificacion=datos['ruccliente'],
                                          nombre=datos['nombrecliente'],
                                          domicilio=datos['direccioncliente'],
                                          tipo=int(datos['tipoclienteid']),
                                          telefono=datos['telefonocliente'],
                                          email=datos['emailcliente'])
                        cliente.save()
                        if cliente.tipo == TIPO_CLIENTE_CORPORATIVO:
                            cliente.ruc = cliente.identificacion
                            cliente.save()

                    # Crear Orden de Servicio
                    orden = OrdenServicio(
                        cliente=cliente,
                        colaborador=colaborador,
                        fecha=fechaactual,
                        subtotal=float(datos['subtotal']),
                        iva=float(datos['iva']),
                        total=float(datos['total']),
                        observaciones=datos['observacionesfactura'])
                    orden.save()

                    for item in items:
                        producto = None
                        servicio = None
                        if item['tipoproducto'] == 'PRODUCTO':
                            producto = Producto.objects.filter(
                                codigo=item['codproducto'])[0]
                        else:
                            servicio = Servicio.objects.filter(
                                codigo=item['codproducto'])[0]
                        detalleorden = OrdenServicioDetalle(
                            orden=orden,
                            servicio=servicio,
                            producto=producto,
                            cantidad=float(item['cantidad']),
                            precio=float(item['pvpproducto']),
                            valor=float(item['valor']))
                        detalleorden.save()

                    salva_auditoria(request, orden, ACCION_ADICIONAR)
                    return ok_json(data={
                        "orden": orden.repr_id(),
                        "cliente": orden.cliente.nombre
                    })

            except ErrorOrdenServicio:
                return bad_json(error=2)
            except Exception:
                return bad_json(error=1)

        elif action == 'add_serviciofuturo':
            orden = OrdenServicio.objects.get(pk=request.POST['id'])
            f = ServicioFuturoForm(request.POST)
            if f.is_valid():
                try:
                    with transaction.atomic():
                        if f.cleaned_data['fecha'] < datetime.now().date():
                            return bad_json(
                                mensaje=
                                "La fecha no puede ser menor al dia de hoy")
                        serviciofuturo = ServicioFuturo(
                            orden=orden,
                            cliente=orden.cliente,
                            servicio=f.cleaned_data['servicio'],
                            fecha=f.cleaned_data['fecha'])
                        serviciofuturo.save()
                        salva_auditoria(request, serviciofuturo,
                                        ACCION_ADICIONAR)
                        return ok_json()

                except Exception:
                    return bad_json(error=1)
            else:
                return bad_json(error=1)

        if action == 'delete_serviciofuturo':
            serviciofuturo = ServicioFuturo.objects.get(pk=request.POST['id'])
            try:
                with transaction.atomic():
                    salva_auditoria(request, serviciofuturo, ACCION_ELIMINAR)
                    serviciofuturo.delete()
                    return ok_json()
            except Exception:
                return bad_json(error=1)

        return bad_json(error=0)

    else:
        if 'action' in request.GET:
            action = request.GET['action']
            if action == 'add':
                try:
                    data['title'] = u'Crear Orden de Servicio'
                    data['tipos_productos'] = TipoProducto.objects.all()
                    data['tipos_servicios'] = TipoServicio.objects.all()
                    data['tipos_documentos'] = TipoDocumento.objects.all()
                    return render_to_response("ordenes/add.html", data)
                except Exception as ex:
                    pass

            elif action == 'delete':
                try:
                    data['title'] = u'Eliminar orden de servicio'
                    data['orden'] = OrdenServicio.objects.get(
                        pk=request.GET['id'])
                    return render_to_response("ordenes/delete.html", data)
                except Exception as ex:
                    pass

            elif action == 'detalle_orden':
                try:
                    data['orden'] = orden = OrdenServicio.objects.get(
                        pk=request.GET['id'])
                    data['detalles'] = orden.ordenserviciodetalle_set.all()
                    return render_to_response('ordenes/detalles.html', data)
                except Exception as ex:
                    pass

            if action == 'buscaproductos':
                try:
                    inventarios = None
                    tipoprod = None
                    if 'tipoid' in request.GET and request.GET['tipoid'] != '':
                        tipoprod = TipoProducto.objects.get(
                            pk=request.GET['tipoid'])
                        inventarios = tipoprod.productos_con_existencias()
                    data['productos'] = inventarios
                    data['tipoprod'] = tipoprod
                    data['tipocliente'] = int(request.GET['tipoclienteid'])
                    return render_to_response("ordenes/buscaproductos.html",
                                              data)
                except Exception as ex:
                    pass

            if action == 'buscaservicios':
                try:
                    servicios = None
                    tiposerv = None
                    if 'tipoid' in request.GET and request.GET['tipoid'] != '':
                        tiposerv = TipoServicio.objects.get(
                            pk=request.GET['tipoid'])
                        servicios = tiposerv.servicio_set.filter(activo=True)
                    data['servicios'] = servicios
                    data['tiposerv'] = tiposerv
                    data['tipocliente'] = int(request.GET['tipoclienteid'])
                    return render_to_response("ordenes/buscaproductos.html",
                                              data)
                except Exception as ex:
                    pass

            if action == 'serviciosfuturos':
                try:
                    data['orden'] = orden = OrdenServicio.objects.get(
                        pk=request.GET['id'])
                    data['servicios_futuros'] = orden.serviciofuturo_set.all()
                    data[
                        'cantidad_servicios_futuros'] = orden.serviciofuturo_set.count(
                        )
                    return render_to_response("ordenes/serviciosfuturos.html",
                                              data)
                except Exception as ex:
                    pass

            if action == 'add_serviciofuturo':
                try:
                    data['title'] = u'Adicionar Servicio Futuro'
                    data['orden'] = orden = OrdenServicio.objects.get(
                        pk=request.GET['id'])
                    form = ServicioFuturoForm()
                    form.for_serviciofuturo(orden)
                    data['form'] = form
                    return render_to_response(
                        'ordenes/add_serviciofuturo.html', data)
                except Exception as ex:
                    pass

            elif action == 'delete_serviciofuturo':
                try:
                    data['title'] = u'Eliminar servicio futuro'
                    data[
                        'servicio_futuro'] = servicio_futuro = ServicioFuturo.objects.get(
                            pk=request.GET['id'])
                    data['orden'] = servicio_futuro.orden
                    return render_to_response(
                        "ordenes/delete_serviciofuturo.html", data)
                except Exception as ex:
                    pass

            return HttpResponseRedirect(
                url_back(request, mensaje_excepcion(ex.args[0])))

        else:

            search = None
            clienteid = None

            if 's' in request.GET:
                search = request.GET['s']

            if 'c' in request.GET and int(request.GET['c']) > 0:
                clienteid = int(request.GET['c'])

            if search:
                ordenes = OrdenServicio.objects.filter(
                    Q(cliente__nombre__icontains=search),
                    Q(factura__numero__icontains=search),
                    colaborador=colaborador).distinct()
            elif clienteid:
                ordenes = OrdenServicio.objects.filter(cliente__id=clienteid,
                                                       colaborador=colaborador)
            else:
                ordenes = OrdenServicio.objects.filter(colaborador=colaborador)

            paging = MiPaginador(ordenes, 30)
            p = 1
            try:
                if 'page' in request.GET:
                    p = int(request.GET['page'])
                page = paging.page(p)
            except:
                page = paging.page(1)
            data['paging'] = paging
            data['rangospaging'] = paging.rangos_paginado(p)
            data['page'] = page
            data['search'] = search if search else ""
            data['ordenes'] = page.object_list
            data['clienteid'] = clienteid if clienteid else ""
            data['clientes'] = Cliente.objects.filter(
                ordenservicio__colaborador__usuario=request.user).distinct()
            return render_to_response("ordenes/view.html", data)