예제 #1
0
파일: views.py 프로젝트: jdcali/backenddj
def enterprise_index(request):
    """
    Página principal para trabajar con empresas
    """
    try:
        d = get_object_or_404(Association,
                              id=DataAccessToken.get_association_id(
                                  request.session))
    except:
        Message.error(request, (
            "Asociación no seleccionada o no se encuentra en la base de datos."
        ))
        return Redirect.to(request, "/home/choice_headquar/")
    enterprise_list = None
    try:
        subq = "SELECT COUNT(*) as count_sedes FROM space_headquar WHERE space_headquar.enterprise_id = space_enterprise.id"  # mejor usar {{ d.headquar_set.all.count }} y listo, trate de no usar {{ d.num_sedes_all }}
        # enterprise_list = Enterprise.objects.filter(headquar__association_id=DataAccessToken.get_association_id(request.session)).annotate(num_sedes=Count("headquar")).order_by("-id").distinct().extra(select={"num_sedes_all": subq})
        enterprise_list = Enterprise.objects.filter(
            headquar__association_id=DataAccessToken.get_association_id(
                request.session)).annotate(
                    num_sedes=Count("headquar")).order_by("-id").distinct()
        # enterprise_list2= Enterprise.objects.filter(headquar__enterprise_id=DataAccessToken.get_enterprise_id(request.session)).annotate(num_sedes_all=Count("headquar")).distinct()
        # enterprise_list =enterprise_list1.add(num_sedes_all="e")
        # enterprise_list = chain(enterprise_list1, enterprise_list2)
        # enterprise_list= [s.id for s in sets.Set(enterprise_list1).intersection(sets.Set(enterprise_list2))]
        # enterprise_list=enterprise_list.distinct()
    except Exception, e:
        Message.error(request, e)
예제 #2
0
def enterprise_delete(request, key):
    """
    Elimina empresa con todas sus sedes
    """
    id = SecurityKey.is_valid_key(request, key, "enterprise_del")
    if not id:
        return Redirect.to_action(request, "index")
    try:
        d = get_object_or_404(Enterprise, id=id)
    except:
        Message.error(request, ("Empresa no se encuentra en la base de datos."))
        return Redirect.to_action(request, "index")
    try:
        sid = transaction.savepoint()
        association = Association.objects.get(id=DataAccessToken.get_association_id(request.session))
        if Enterprise.objects.filter(headquar__association_id=DataAccessToken.get_association_id(request.session)).count() == 1:
            raise Exception(("Asociación <b>%(name)s</b> no puede quedar sin ninguna sede asociada.") % {"name":association.name})        
        if d.userprofileenterprise_set.count() > 0:
            raise Exception(("Empresa <b>%(name)s</b> tiene usuarios y grupos asignados.") % {"name":d.name})
        # agregue aquí sus otras relgas de negocio
        d.delete()
        if not d.id:
            Message.info(request, ("Empresa <b>%(name)s</b> ha sido eliminado correctamente.") % {"name":d.name}, True)
            return Redirect.to_action(request, "index")
    except Exception, e:
        transaction.savepoint_rollback(sid)
        Message.error(request, e)
        return Redirect.to_action(request, "index")
예제 #3
0
def headquar_add(request):
    """
    Agrega sede
    """
    d = Headquar()
    d.phone = ""
    d.address = ""
    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.name = request.POST.get("name")
            d.phone = request.POST.get("phone")
            d.address = request.POST.get("address")
            d.is_main = False
            d.locality_name = request.POST.get("locality_name")
            if request.POST.get("locality_name"):
                d.locality, is_locality_created = Locality.objects.get_or_create(
                    name=request.POST.get("locality_name"),  # name__iexact
                    )
            d.association_id = DataAccessToken.get_association_id(request.session)
            d.enterprise_id = DataAccessToken.get_enterprise_id(request.session)

            if normalize("NFKD", u"%s" % d.name).encode("ascii", "ignore").lower() in list(
                normalize("NFKD", u"%s" % col["name"]).encode("ascii", "ignore").lower() for col in Headquar.objects.values("name").exclude(id=d.id).filter(enterprise_id=d.enterprise_id)
                ):
                raise Exception("La sede <b>%s</b> ya existe " % (d.name))
            d.save()
            if d.id:
                Message.info(request, ("Sede <b>%(name)s</b> ha sido registrado correctamente.") % {"name":d.name})
                return Redirect.to_action(request, "index")
        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #4
0
def headquar_index(request):
    """
    Página principal para trabajar con sedes
    """
    try:
        enterprise = get_object_or_404(Enterprise, id=DataAccessToken.get_enterprise_id(request.session))
    except:
        Message.error(request, ("Empresa no seleccionada o no se encuentra en la base de datos."))
        return Redirect.to(request, "/home/choice_headquar/")
    try:
        headquar_list = Headquar.objects.filter(enterprise_id=DataAccessToken.get_enterprise_id(request.session)).order_by("-id")
    except Exception, e:
        Message.error(request, e)
예제 #5
0
def get_grupos(request, url):
    """
	Genera el menú de Grupos para imprimirlo en header.html

	Usage::
		
		{% get_grupos request get_url %}

	Examples::

        {% url 'mod_ventas_dashboard' as get_url %}
        {% get_grupos request get_url %}


	"""
    sede = None
    if DataAccessToken.get_headquar_id(request.session):
        try:
            sede = Headquar.objects.get(
                id=DataAccessToken.get_headquar_id(request.session))
        except:
            Message.error(request,
                          ("Sede no se encuentra en la base de datos."))

    value = ''
    w = ""
    d = DataAccessToken.get_grupo_id_list(request.session)
    if sede:
        w = (
            u'		<a href="#" class="dropdown-toggle" data-toggle="dropdown" title ="%s">%s > %s %s<b class="caret"></b></a>'
            % (sede.association.name, sede.enterprise.name, sede.name, value))

    o = ''
    if d:
        for i in d:
            print i
            o = o + (u'<li><a href="%s?grupo=%s">%s/%s</a></li>' %
                     (url, i, sede.name, ""))
    if sede:
        o = o + (u'<li><a href="%s?">%s/Todas las areas</a></li>' %
                 (url, sede.name))
    a = (u'<ul class="nav">'
         u'	<li class="dropdown">'
         u'		%s'
         u'		<ul class="dropdown-menu">' % (w))

    c = (u'		</ul>' u'	</li>' u'</ul>')
    return "%s%s%s" % (a, o, c)
예제 #6
0
def producto_index(request, field="descripcion", value="None", order="-id"):
    """
    Página principal para trabajar con productos
    """
    try:
        headquar = get_object_or_404(Headquar, id=DataAccessToken.get_headquar_id(request.session))
    except:
        Message.error(request, ("Sede no seleccionado o no se encuentra en la base de datos."))
        return Redirect.to(request, "/home/choice_headquar/")

    field = (field if not request.REQUEST.get("field") else request.REQUEST.get("field")).strip()
    value = (value if not request.REQUEST.get("value") else request.REQUEST.get("value")).strip()
    order = (order if not request.REQUEST.get("order") else request.REQUEST.get("order")).strip()

    producto_page = None
    try:
        value_f = "" if value == "None" else value
        column_contains = u"%s__%s" % (field, "contains")
        producto_list = Producto.objects.filter(headquar=headquar).filter(**{ column_contains: value_f }).order_by(order)
        paginator = Paginator(producto_list, 20)
        try:
            producto_page = paginator.page(request.GET.get("page"))
        except PageNotAnInteger:
            producto_page = paginator.page(1)
        except EmptyPage:
            producto_page = paginator.page(paginator.num_pages)
    except Exception, e:
        Message.error(request, e)
예제 #7
0
def producto_add(request):
    """
    Agrega Producto
    """
    d = Producto()
    d.descripcion = ""
    d.fecha_venc = ""
    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.codigo = request.POST.get("codigox")
            d.descripcion = request.POST.get("descripcion")
            d.precio_venta = request.POST.get("precio_venta")
            d.headquar_id = DataAccessToken.get_headquar_id(request.session)

            if request.POST.get("fecha_venc"):
                d.fecha_venc = request.POST.get("fecha_venc")

            if request.POST.get("categoria_nombre"):
                d.categoria, is_created = Categoria.objects.get_or_create(
                    nombre=request.POST.get("categoria_nombre"), )

            if Producto.objects.filter(codigo=d.codigo).exclude(
                    id=d.id, headquar_id=d.headquar_id).count() > 0:
                raise Exception("El producto <b>%s</b> ya existe " % d.codigo)
            d.save()
            if d.id:
                Message.info(request, (
                    "Producto <b>%(name)s</b> ha sido registrado correctamente."
                ) % {"name": d.codigo}, True)
                return Redirect.to_action(request, "index")
        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #8
0
def association_edit_current(request):
    """
    Actualiza datos de la asociación a la que ingresó el usuario
    """
    d = Association()
    try:
        d = get_object_or_404(Association, id=DataAccessToken.get_association_id(request.session))
    except:
        Message.error(request, ("Asociación no seleccionada o no se encuentra en la base de datos."))
        return Redirect.to(request, "/home/choice_headquar/")

    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.name = request.POST.get("name")
            d.type_a = request.POST.get("type_a")
            d.solution_id = request.POST.get("solution_id")
            # solution=Solution.objects.get(id=d.solution_id) #no es necesario
            d.logo = request.POST.get("asociacion_logo")
            if normalize("NFKD", u"%s" % d.name).encode("ascii", "ignore").lower() in list(
                normalize("NFKD", u"%s" % col["name"]).encode("ascii", "ignore").lower() for col in Association.objects.values("name").exclude(id=d.id)
                ):
                raise Exception(("Asociación <b>%(name)s</b> ya existe.") % {"name":d.name})

            # salvar registro
            d.save()
            raise Exception(("Asociación <b>%(name)s</b> ya existe.") % {"name":d.name})
            if d.id:
                Message.info(request, ("Asociación <b>%(name)s</b> ha sido actualizado correctamente.") % {"name":d.name})

        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #9
0
def producto_add(request):
    """
    Agrega Producto
    """
    d = Producto()
    d.descripcion = ""
    d.fecha_venc=""
    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.codigo = request.POST.get("codigox")
            d.descripcion = request.POST.get("descripcion")
            d.precio_venta = request.POST.get("precio_venta")
            d.headquar_id = DataAccessToken.get_headquar_id(request.session)
            
            if request.POST.get("fecha_venc"):
                d.fecha_venc = request.POST.get("fecha_venc")
                
            if request.POST.get("categoria_nombre"):
                d.categoria, is_created = Categoria.objects.get_or_create(
                    nombre=request.POST.get("categoria_nombre"),
                    )

            if Producto.objects.filter(codigo=d.codigo).exclude(id=d.id, headquar_id=d.headquar_id).count() > 0:
                raise Exception("El producto <b>%s</b> ya existe " % d.codigo)
            d.save()
            if d.id:
                Message.info(request, ("Producto <b>%(name)s</b> ha sido registrado correctamente.") % {"name":d.codigo}, True)
                return Redirect.to_action(request, "index")
        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #10
0
파일: views.py 프로젝트: jdcali/backenddj
def enterprise_add(request):
    """
    Agrega empresa dentro de una asociación, para ello deberá agregarse con una sede Principal
    """
    d = Enterprise()
    d.sede = "Principal"
    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.name = request.POST.get("name")
            d.tax_id = request.POST.get("tax_id")
            d.type_e = request.POST.get("type_e")
            d.solution_id = request.POST.get("solution_id")
            # solution=Solution.objects.get(id=d.solution_id) #no es necesario
            if normalize("NFKD", u"%s" % d.name).encode(
                    "ascii", "ignore").lower() in list(
                        normalize("NFKD", u"%s" % col["name"]).encode(
                            "ascii", "ignore").lower()
                        for col in Enterprise.objects.values("name").exclude(
                            id=d.id)):
                raise Exception(
                    ("Empresa <b>%(name)s</b> ya existe.") % {"name": d.name})

            if Enterprise.objects.exclude(id=d.id).filter(
                    tax_id=d.tax_id).count() > 0:
                raise Exception("La empresa con RUC <b>%s</b> ya existe " %
                                (d.tax_id))

            d.save()

            headquar = Headquar()
            headquar.name = request.POST.get("sede")
            headquar.association_id = DataAccessToken.get_association_id(
                request.session)
            headquar.enterprise = d

            if normalize("NFKD", u"%s" % headquar.name).encode(
                    "ascii", "ignore").lower() in list(
                        normalize("NFKD", u"%s" % col["name"]).encode(
                            "ascii", "ignore").lower()
                        for col in Headquar.objects.values("name").exclude(
                            id=headquar.id).filter(
                                enterprise_id=headquar.enterprise_id)):
                raise Exception("La sede <b>%s</b> ya existe " %
                                (headquar.name))

            headquar.save()

            if d.id:
                Message.info(request, (
                    "Empresa <b>%(name)s</b> ha sido registrado correctamente."
                ) % {"name": d.name})
                return Redirect.to_action(request, "index")
        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #11
0
파일: views.py 프로젝트: jdcali/backenddj
def headquar_index(request):
    """
    Página principal para trabajar con sedes
    """
    try:
        enterprise = get_object_or_404(Enterprise,
                                       id=DataAccessToken.get_enterprise_id(
                                           request.session))
    except:
        Message.error(
            request,
            ("Empresa no seleccionada o no se encuentra en la base de datos."))
        return Redirect.to(request, "/home/choice_headquar/")
    try:
        headquar_list = Headquar.objects.filter(
            enterprise_id=DataAccessToken.get_enterprise_id(
                request.session)).order_by("-id")
    except Exception, e:
        Message.error(request, e)
예제 #12
0
	def load(request, menu_module): 
		""" 
		Carga el menú del usuario

		Entrada::

			menu_module=BACKEND

		Salida::

			menu_item_list[menu]
	    """
		Menus.menu_list = []
		Menus.menu_item_list = {}
		Menus.menu_module = menu_module
		user = request.user

		print "\n\n\n"
		# print 'Permisos del User a travez de sus Groups'
		# print user.get_group_permissions() # no sirve pk tambien debemos comparar con la sede
		# if not DataAccessToken.get_headquar_id(request.session):
		# 	return HttpResponse("Sede no seleccionada, seleccione en la Página de inicio para cargar el menú")
		# los Grupos del User según su espacio actual
		permission_list = []
		if not request.user.is_superuser:
			
			try:
				headquar = Headquar.objects.get(id=DataAccessToken.get_headquar_id(request.session))
				group_id_list_by_user_and_headquar = list(col["id"] for col in Group.objects.values("id").filter(userprofileheadquar__headquar__id=headquar.id, userprofileheadquar__user__id=user.id).distinct())
				group_id_list_by_user_and_enterprise = list(col["id"] for col in Group.objects.values("id").filter(userprofileenterprise__enterprise__id=headquar.enterprise.id, userprofileenterprise__user__id=user.id).distinct())
				group_id_list_by_user_and_association = list(col["id"] for col in Group.objects.values("id").filter(userprofileassociation__association__id=headquar.association.id, userprofileassociation__user__id=user.id).distinct())
				group_id_list_by_user_and_hea = list(set(group_id_list_by_user_and_headquar + group_id_list_by_user_and_enterprise + group_id_list_by_user_and_association))
			
				# print 'Groups del User a travez de su espacio actual'
				# print group_id_list_by_user_and_hea
	
				# print 'Permisos del User a travez de su espacio actual'
				permission_list = Permission.objects.filter(group__in=group_id_list_by_user_and_hea).distinct()  # compara con los Group del user
			except:
				print "Sede no seleccionado"
				#headquar=Headquar.objects.filter(userprofileheadquar__user__id=request.user.id).distinct().first()
				pass
		if request.user.is_superuser:
			permission_list = []  # si es uperuser mostrarme todo los menús
		menu = Menu()
		#permission_list = []
		# obtengo los hijos y luego saco sus padres, esto es para no mostrar un menu sin items
		menu_item_list_t = Menu.objects.filter(Q(permission__in=permission_list) | Q(id__isnull=True if permission_list else False), module=menu_module, is_active=True).order_by("pos")
		Menus.menu_list = Menu.objects.filter(menu__in=menu_item_list_t, module=menu_module, is_active=True).order_by("pos").distinct()
		# print Menus.menu_list
		if Menus.menu_list:
			for menu in Menus.menu_list:
				Menus.menu_item_list[menu.title] = Menu.objects.filter(Q(permission__in=permission_list) | Q(id__isnull=True if permission_list else False), parent_id=menu.id, module=menu_module, is_active=True).order_by("pos")  # .lower().replace(" ","_")
		# print Menus.menu_item_list
		return ""
예제 #13
0
파일: views.py 프로젝트: jdcali/backenddj
def headquar_add(request):
    """
    Agrega sede
    """
    d = Headquar()
    d.phone = ""
    d.address = ""
    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.name = request.POST.get("name")
            d.phone = request.POST.get("phone")
            d.address = request.POST.get("address")
            d.is_main = False
            d.locality_name = request.POST.get("locality_name")
            if request.POST.get("locality_name"):
                d.locality, is_locality_created = Locality.objects.get_or_create(
                    name=request.POST.get("locality_name"),  # name__iexact
                )
            d.association_id = DataAccessToken.get_association_id(
                request.session)
            d.enterprise_id = DataAccessToken.get_enterprise_id(
                request.session)

            if normalize("NFKD", u"%s" % d.name).encode(
                    "ascii", "ignore").lower() in list(
                        normalize("NFKD", u"%s" % col["name"]).encode(
                            "ascii", "ignore").lower()
                        for col in Headquar.objects.values("name").exclude(
                            id=d.id).filter(enterprise_id=d.enterprise_id)):
                raise Exception("La sede <b>%s</b> ya existe " % (d.name))
            d.save()
            if d.id:
                Message.info(
                    request,
                    ("Sede <b>%(name)s</b> ha sido registrado correctamente.")
                    % {"name": d.name})
                return Redirect.to_action(request, "index")
        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #14
0
def enterprise_index(request):
    """
    Página principal para trabajar con empresas
    """
    try:
        d = get_object_or_404(Association, id=DataAccessToken.get_association_id(request.session))
    except:
        Message.error(request, ("Asociación no seleccionada o no se encuentra en la base de datos."))
        return Redirect.to(request, "/home/choice_headquar/")
    enterprise_list = None
    try:
        subq = "SELECT COUNT(*) as count_sedes FROM space_headquar WHERE space_headquar.enterprise_id = space_enterprise.id"  # mejor usar {{ d.headquar_set.all.count }} y listo, trate de no usar {{ d.num_sedes_all }}
        # enterprise_list = Enterprise.objects.filter(headquar__association_id=DataAccessToken.get_association_id(request.session)).annotate(num_sedes=Count("headquar")).order_by("-id").distinct().extra(select={"num_sedes_all": subq})
        enterprise_list = Enterprise.objects.filter(headquar__association_id=DataAccessToken.get_association_id(request.session)).annotate(num_sedes=Count("headquar")).order_by("-id").distinct()
        # enterprise_list2= Enterprise.objects.filter(headquar__enterprise_id=DataAccessToken.get_enterprise_id(request.session)).annotate(num_sedes_all=Count("headquar")).distinct()
        # enterprise_list =enterprise_list1.add(num_sedes_all="e")
        # enterprise_list = chain(enterprise_list1, enterprise_list2)
        # enterprise_list= [s.id for s in sets.Set(enterprise_list1).intersection(sets.Set(enterprise_list2))]
        # enterprise_list=enterprise_list.distinct()
    except Exception, e:
        Message.error(request, e)
예제 #15
0
파일: views.py 프로젝트: jdcali/backenddj
def enterprise_delete(request, key):
    """
    Elimina empresa con todas sus sedes
    """
    id = SecurityKey.is_valid_key(request, key, "enterprise_del")
    if not id:
        return Redirect.to_action(request, "index")
    try:
        d = get_object_or_404(Enterprise, id=id)
    except:
        Message.error(request,
                      ("Empresa no se encuentra en la base de datos."))
        return Redirect.to_action(request, "index")
    try:
        sid = transaction.savepoint()
        association = Association.objects.get(
            id=DataAccessToken.get_association_id(request.session))
        if Enterprise.objects.filter(
                headquar__association_id=DataAccessToken.get_association_id(
                    request.session)).count() == 1:
            raise Exception((
                "Asociación <b>%(name)s</b> no puede quedar sin ninguna sede asociada."
            ) % {"name": association.name})
        if d.userprofileenterprise_set.count() > 0:
            raise Exception(
                ("Empresa <b>%(name)s</b> tiene usuarios y grupos asignados.")
                % {"name": d.name})
        # agregue aquí sus otras relgas de negocio
        d.delete()
        if not d.id:
            Message.info(
                request,
                ("Empresa <b>%(name)s</b> ha sido eliminado correctamente.") %
                {"name": d.name}, True)
            return Redirect.to_action(request, "index")
    except Exception, e:
        transaction.savepoint_rollback(sid)
        Message.error(request, e)
        return Redirect.to_action(request, "index")
예제 #16
0
파일: views.py 프로젝트: jdcali/backenddj
def enterprise_edit_current(request):
    """
    Actualiza datos de la empresa a la que ingresó el usuario
    """
    d = Enterprise()
    try:
        d = get_object_or_404(Enterprise,
                              id=DataAccessToken.get_enterprise_id(
                                  request.session))
    except:
        Message.error(
            request,
            ("Empresa no seleccionada o no se encuentra en la base de datos."))
        return Redirect.to(request, "/home/choice_headquar/")

    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.name = request.POST.get("name")
            d.tax_id = request.POST.get("tax_id")
            d.type_e = request.POST.get("type_e")
            d.solution_id = request.POST.get("solution_id")
            d.logo = request.POST.get("empresa_logo")
            # solution=Solution.objects.get(id=d.solution_id) #no es necesario
            if normalize("NFKD", u"%s" % d.name).encode(
                    "ascii", "ignore").lower() in list(
                        normalize("NFKD", u"%s" % col["name"]).encode(
                            "ascii", "ignore").lower()
                        for col in Enterprise.objects.values("name").exclude(
                            id=d.id)):
                raise Exception(
                    ("Empresa <b>%(name)s</b> ya existe.") % {"name": d.name})

            if Enterprise.objects.exclude(id=d.id).filter(
                    tax_id=d.tax_id).count() > 0:
                raise Exception("La empresa con RUC <b>%s</b> ya existe " %
                                (d.tax_id))

            # salvar registro
            d.save()
            if d.id:
                Message.info(request, (
                    "Empresa <b>%(name)s</b> ha sido actualizado correctamente."
                ) % {"name": d.name})

        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #17
0
파일: views.py 프로젝트: jdcali/backenddj
def association_edit_current(request):
    """
    Actualiza datos de la asociación a la que ingresó el usuario
    """
    d = Association()
    try:
        d = get_object_or_404(Association,
                              id=DataAccessToken.get_association_id(
                                  request.session))
    except:
        Message.error(request, (
            "Asociación no seleccionada o no se encuentra en la base de datos."
        ))
        return Redirect.to(request, "/home/choice_headquar/")

    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.name = request.POST.get("name")
            d.type_a = request.POST.get("type_a")
            d.solution_id = request.POST.get("solution_id")
            # solution=Solution.objects.get(id=d.solution_id) #no es necesario
            d.logo = request.POST.get("asociacion_logo")
            if normalize("NFKD", u"%s" % d.name).encode(
                    "ascii", "ignore").lower() in list(
                        normalize("NFKD", u"%s" % col["name"]).encode(
                            "ascii", "ignore").lower()
                        for col in Association.objects.values("name").exclude(
                            id=d.id)):
                raise Exception(("Asociación <b>%(name)s</b> ya existe.") %
                                {"name": d.name})

            # salvar registro
            d.save()
            raise Exception(
                ("Asociación <b>%(name)s</b> ya existe.") % {"name": d.name})
            if d.id:
                Message.info(request, (
                    "Asociación <b>%(name)s</b> ha sido actualizado correctamente."
                ) % {"name": d.name})

        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #18
0
def enterprise_add(request):
    """
    Agrega empresa dentro de una asociación, para ello deberá agregarse con una sede Principal
    """
    d = Enterprise()
    d.sede = "Principal"
    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.name = request.POST.get("name")
            d.tax_id = request.POST.get("tax_id")
            d.type_e = request.POST.get("type_e")
            d.solution_id = request.POST.get("solution_id")
            # solution=Solution.objects.get(id=d.solution_id) #no es necesario
            if normalize("NFKD", u"%s" % d.name).encode("ascii", "ignore").lower() in list(
                normalize("NFKD", u"%s" % col["name"]).encode("ascii", "ignore").lower() for col in Enterprise.objects.values("name").exclude(id=d.id)
                ):
                raise Exception(("Empresa <b>%(name)s</b> ya existe.") % {"name":d.name})

            if Enterprise.objects.exclude(id=d.id).filter(tax_id=d.tax_id).count() > 0:
                raise Exception("La empresa con RUC <b>%s</b> ya existe " % (d.tax_id))

            d.save()

            headquar = Headquar()
            headquar.name = request.POST.get("sede")
            headquar.association_id = DataAccessToken.get_association_id(request.session)
            headquar.enterprise = d

            if normalize("NFKD", u"%s" % headquar.name).encode("ascii", "ignore").lower() in list(
                normalize("NFKD", u"%s" % col["name"]).encode("ascii", "ignore").lower() for col in Headquar.objects.values("name").exclude(id=headquar.id).filter(enterprise_id=headquar.enterprise_id)
                ):
                raise Exception("La sede <b>%s</b> ya existe " % (headquar.name))

            headquar.save()

            if d.id:
                Message.info(request, ("Empresa <b>%(name)s</b> ha sido registrado correctamente.") % {"name":d.name})
                return Redirect.to_action(request, "index")
        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #19
0
def producto_index(request, field="descripcion", value="None", order="-id"):
    """
    Página principal para trabajar con productos
    """
    try:
        headquar = get_object_or_404(Headquar,
                                     id=DataAccessToken.get_headquar_id(
                                         request.session))
    except:
        Message.error(
            request,
            ("Sede no seleccionado o no se encuentra en la base de datos."))
        return Redirect.to(request, "/home/choice_headquar/")

    field = (field if not request.REQUEST.get("field") else
             request.REQUEST.get("field")).strip()
    value = (value if not request.REQUEST.get("value") else
             request.REQUEST.get("value")).strip()
    order = (order if not request.REQUEST.get("order") else
             request.REQUEST.get("order")).strip()

    producto_page = None
    try:
        value_f = "" if value == "None" else value
        column_contains = u"%s__%s" % (field, "contains")
        producto_list = Producto.objects.filter(headquar=headquar).filter(
            **{
                column_contains: value_f
            }).order_by(order)
        paginator = Paginator(producto_list, 20)
        try:
            producto_page = paginator.page(request.GET.get("page"))
        except PageNotAnInteger:
            producto_page = paginator.page(1)
        except EmptyPage:
            producto_page = paginator.page(paginator.num_pages)
    except Exception, e:
        Message.error(request, e)
예제 #20
0
def enterprise_edit_current(request):
    """
    Actualiza datos de la empresa a la que ingresó el usuario
    """
    d = Enterprise()
    try:
        d = get_object_or_404(Enterprise, id=DataAccessToken.get_enterprise_id(request.session))
    except:
        Message.error(request, ("Empresa no seleccionada o no se encuentra en la base de datos."))
        return Redirect.to(request, "/home/choice_headquar/")

    if request.method == "POST":
        try:
            sid = transaction.savepoint()
            d.name = request.POST.get("name")
            d.tax_id = request.POST.get("tax_id")
            d.type_e = request.POST.get("type_e")
            d.solution_id = request.POST.get("solution_id")
            d.logo = request.POST.get("empresa_logo")
            # solution=Solution.objects.get(id=d.solution_id) #no es necesario
            if normalize("NFKD", u"%s" % d.name).encode("ascii", "ignore").lower() in list(
                normalize("NFKD", u"%s" % col["name"]).encode("ascii", "ignore").lower() for col in Enterprise.objects.values("name").exclude(id=d.id)
                ):
                raise Exception(("Empresa <b>%(name)s</b> ya existe.") % {"name":d.name})

            if Enterprise.objects.exclude(id=d.id).filter(tax_id=d.tax_id).count() > 0:
                raise Exception("La empresa con RUC <b>%s</b> ya existe " % (d.tax_id))

            # salvar registro
            d.save()
            if d.id:
                Message.info(request, ("Empresa <b>%(name)s</b> ha sido actualizado correctamente.") % {"name":d.name})

        except Exception, e:
            transaction.savepoint_rollback(sid)
            Message.error(request, e)
예제 #21
0
파일: views.py 프로젝트: jdcali/backenddj
def load_access(request, headquar_id, module_id):
    if request.is_ajax():
        return HttpResponse(
            "ESTA OPERACION NO DEBE SER CARGADO CON AJAX, Presione F5")
    else:
        try:
            try:
                headquar = Headquar.objects.get(id=headquar_id)
            except:
                Message.error(request, (
                    "Sede no seleccionado o no se encuentra en la base de datos."
                ))
                return Redirect.to(request, "/accounts/choice_headquar/")
            try:
                module = Module.objects.get(id=module_id)
            except:
                Message.error(request, (
                    "Módulo no seleccionado o no se encuentra en la base de datos."
                ))
                return Redirect.to(request, "/accounts/choice_headquar/")

            if not request.user.is_superuser:  # vovler a verificar si tiene permisos
                # obteniendo las sedes a la cual tiene acceso
                headquar_list = Headquar.objects.filter(
                    userprofileheadquar__user__id=request.user.id).distinct()
                if headquar not in headquar_list:
                    raise Exception((
                        "Acceso denegado. No tiene privilegio para ingresar a esta sede: %s %s."
                        % (headquar.enterprise.name, headquar.name)))
                # obteniendo los módulos a la cual tiene acceso
                group_list = Group.objects.filter(
                    userprofileheadquar__headquar__id=headquar.id,
                    userprofileheadquar__user__id=request.user.id).distinct()
                module_list = Module.objects.filter(
                    groups__in=group_list).distinct()

                if module not in module_list:
                    raise Exception((
                        "Acceso denegado. No tiene privilegio para ingresar a este módulo: %s de %s %s."
                        % (module.name, headquar.enterprise.name,
                           headquar.name)))

            # cargando permisos de datos para el usuario
            DataAccessToken.set_association_id(request,
                                               headquar.association.id)
            DataAccessToken.set_enterprise_id(request, headquar.enterprise.id)
            DataAccessToken.set_headquar_id(request, headquar.id)

            try:
                profile = Profile.objects.get(user_id=request.user.id)
                if profile.id:
                    profile.last_headquar_id = headquar_id
                    profile.last_module_id = module_id
                    profile.save()
            except:
                person = Person(first_name=request.user.first_name,
                                last_name=request.user.last_name)
                person.save()

                profile = Profile(user=request.user,
                                  last_headquar_id=headquar_id,
                                  last_module_id=module_id)
                profile.person = person
                profile.save()
                pass

            # Message.info(request, ("La sede %(name)s ha sido cargado correctamente.") % {"name":headquar_id} )
            if module.BACKEND == module.module:
                return Redirect.to(request, "/mod_backend/dashboard/")
            if module.VENTAS == module.module:
                return Redirect.to(request, "/mod_ventas/dashboard/")
            if module.PRO == module.module:
                return Redirect.to(request, "/mod_pro/dashboard/")
            # TODO agregue aqui su nuevo modulo
            else:
                Message.error(request, "Módulo no definido")
                return HttpResponseRedirect("/accounts/choice_headquar/")
        except Exception, e:
            Message.error(request, e)
        return HttpResponseRedirect("/accounts/choice_headquar/")
예제 #22
0
def load_access(request, headquar_id, module_id):
    if request.is_ajax():
        return HttpResponse("ESTA OPERACION NO DEBE SER CARGADO CON AJAX, Presione F5")
    else:
        try:
            try:
                headquar = Headquar.objects.get(id=headquar_id)
            except:
                Message.error(request, ("Sede no seleccionado o no se encuentra en la base de datos."))
                return Redirect.to(request, "/accounts/choice_headquar/")
            try:
                module = Module.objects.get(id=module_id)
            except:
                Message.error(request, ("Módulo no seleccionado o no se encuentra en la base de datos."))
                return Redirect.to(request, "/accounts/choice_headquar/")

            if not request.user.is_superuser:  # vovler a verificar si tiene permisos
                # obteniendo las sedes a la cual tiene acceso
                headquar_list = Headquar.objects.filter(userprofileheadquar__user__id=request.user.id).distinct()
                if headquar not in headquar_list:
                    raise Exception(("Acceso denegado. No tiene privilegio para ingresar a esta sede: %s %s." % (headquar.enterprise.name, headquar.name)))
                # obteniendo los módulos a la cual tiene acceso
                group_list = Group.objects.filter(userprofileheadquar__headquar__id=headquar.id, userprofileheadquar__user__id=request.user.id).distinct()
                module_list = Module.objects.filter(groups__in=group_list).distinct()
                
                if module not in module_list:
                    raise Exception(("Acceso denegado. No tiene privilegio para ingresar a este módulo: %s de %s %s." % (module.name, headquar.enterprise.name, headquar.name)))
                
            # cargando permisos de datos para el usuario
            DataAccessToken.set_association_id(request, headquar.association.id)
            DataAccessToken.set_enterprise_id(request, headquar.enterprise.id)
            DataAccessToken.set_headquar_id(request, headquar.id)

            try:
                profile = Profile.objects.get(user_id=request.user.id)
                if profile.id:
                    profile.last_headquar_id = headquar_id
                    profile.last_module_id = module_id
                    profile.save()
            except:
                person = Person(first_name=request.user.first_name, last_name=request.user.last_name)
                person.save()

                profile = Profile(user=request.user, last_headquar_id=headquar_id, last_module_id=module_id)
                profile.person = person
                profile.save()
                pass

            # Message.info(request, ("La sede %(name)s ha sido cargado correctamente.") % {"name":headquar_id} )
            if module.BACKEND == module.module:
                return Redirect.to(request, "/mod_backend/dashboard/")
            if module.VENTAS == module.module:
                return Redirect.to(request, "/mod_ventas/dashboard/")
            if module.PRO == module.module:
                return Redirect.to(request, "/mod_pro/dashboard/")
            # TODO agregue aqui su nuevo modulo
            else:
                Message.error(request, "Módulo no definido")
                return HttpResponseRedirect("/accounts/choice_headquar/")
        except Exception, e:
            Message.error(request, e)
        return HttpResponseRedirect("/accounts/choice_headquar/")
예제 #23
0
    def load(request, menu_module):
        """ 
		Carga el menú del usuario

		Entrada::

			menu_module=BACKEND

		Salida::

			menu_item_list[menu]
	    """
        Menus.menu_list = []
        Menus.menu_item_list = {}
        Menus.menu_module = menu_module
        user = request.user

        print "\n\n\n"
        # print 'Permisos del User a travez de sus Groups'
        # print user.get_group_permissions() # no sirve pk tambien debemos comparar con la sede
        # if not DataAccessToken.get_headquar_id(request.session):
        # 	return HttpResponse("Sede no seleccionada, seleccione en la Página de inicio para cargar el menú")
        # los Grupos del User según su espacio actual
        permission_list = []
        if not request.user.is_superuser:

            try:
                headquar = Headquar.objects.get(
                    id=DataAccessToken.get_headquar_id(request.session))
                group_id_list_by_user_and_headquar = list(
                    col["id"] for col in Group.objects.values("id").filter(
                        userprofileheadquar__headquar__id=headquar.id,
                        userprofileheadquar__user__id=user.id).distinct())
                group_id_list_by_user_and_enterprise = list(
                    col["id"] for col in Group.objects.values("id").filter(
                        userprofileenterprise__enterprise__id=headquar.
                        enterprise.id,
                        userprofileenterprise__user__id=user.id).distinct())
                group_id_list_by_user_and_association = list(
                    col["id"] for col in Group.objects.values("id").filter(
                        userprofileassociation__association__id=headquar.
                        association.id,
                        userprofileassociation__user__id=user.id).distinct())
                group_id_list_by_user_and_hea = list(
                    set(group_id_list_by_user_and_headquar +
                        group_id_list_by_user_and_enterprise +
                        group_id_list_by_user_and_association))

                # print 'Groups del User a travez de su espacio actual'
                # print group_id_list_by_user_and_hea

                # print 'Permisos del User a travez de su espacio actual'
                permission_list = Permission.objects.filter(
                    group__in=group_id_list_by_user_and_hea).distinct(
                    )  # compara con los Group del user
            except:
                print "Sede no seleccionado"
                #headquar=Headquar.objects.filter(userprofileheadquar__user__id=request.user.id).distinct().first()
                pass
        if request.user.is_superuser:
            permission_list = []  # si es uperuser mostrarme todo los menús
        menu = Menu()
        #permission_list = []
        # obtengo los hijos y luego saco sus padres, esto es para no mostrar un menu sin items
        menu_item_list_t = Menu.objects.filter(
            Q(permission__in=permission_list)
            | Q(id__isnull=True if permission_list else False),
            module=menu_module,
            is_active=True).order_by("pos")
        Menus.menu_list = Menu.objects.filter(
            menu__in=menu_item_list_t, module=menu_module,
            is_active=True).order_by("pos").distinct()
        # print Menus.menu_list
        if Menus.menu_list:
            for menu in Menus.menu_list:
                Menus.menu_item_list[menu.title] = Menu.objects.filter(
                    Q(permission__in=permission_list)
                    | Q(id__isnull=True if permission_list else False),
                    parent_id=menu.id,
                    module=menu_module,
                    is_active=True).order_by(
                        "pos")  # .lower().replace(" ","_")
        # print Menus.menu_item_list
        return ""