Example #1
0
    def chat(self, request, pk):
        """Chat por Cliente."""
        obj_api = api()
        token = request.session['token']
        messages = None
        parameters = {'page_size': 0}

        data_messages = obj_api.get(slug='queries/clients/' + pk,
                                    token=token,
                                    arg=parameters)
        # Ordenamos el listado de mensajes
        # para que los mas recientes salgan abajo.
        form = QueryForm()
        if data_messages:
            messages = sorted(data_messages, key=itemgetter('id'))

        client = obj_api.get(slug='clients/{}/'.format(pk), token=token)
        client_data = {}
        client_data["name"] = get_name_by_client(client)
        client_data["photo"] = client["photo"]

        return render(request, 'frontend/actors/specialist/chat.html', {
            'messages': messages,
            'form': form,
            'client': client_data
        })
Example #2
0
    def detail(self, request, pk):
        obj_api = api()
        token = request.session['token']

        data = obj_api.get_all(slug='backend/matchs/' + pk, token=token)

        if data.status_code == 200:
            # Titulo de la vista y variables de la Clase
            title_page = _('payments').title() + " - " + _('pending').title()
            vars_page = self.generate_header(custom_title=title_page)

            data_json = data.json()
            if request.method == 'POST':
                result = obj_api.put_all(slug='confirm-discount/{}'.format(pk),
                                         token=token)

                if result and result.status_code == 200:
                    return HttpResponseRedirect(reverse(self._list))

            return render(request, 'admin/authorization/specialist_match.html',
                          {
                              'data': data_json,
                              'vars_page': vars_page
                          })
        else:
            return HttpResponseRedirect(reverse(self._list))
Example #3
0
def logout_view(request):
    if 'token' in request.session:
        obj_api = api()
        token = request.session['token']
        obj_api.logout(token)
    logout(request)
    return HttpResponseRedirect(reverse('login:login'))
Example #4
0
    def detail(self, request, pk):
        obj_api = api()
        token = request.session['token']

        data = obj_api.get(slug='specialists/' + pk, token=token)

        # Si la data del usuario no es valida
        if not data and type(data) is not dict:
            raise Http404()

        # Si esta definido el tipo de especialista que es el usuario
        if type(data) is dict and 'type_specialist' in data:
            type_specialist = data['type_specialist']
        else:
            type_specialist = ''

        # Titulo de la vista y variables de la Clase
        title_page = "{} {} - {}".format(
            _('specialist').title(), _(type_specialist),
            _('detail').title())
        vars_page = self.generate_header(custom_title=title_page)

        return render(request, 'admin/actor/specialistsDetail.html', {
            'data': data,
            'vars_page': vars_page
        })
Example #5
0
    def send_query(self, request):
        """Enviar data de consulta."""
        obj_api = api()
        data = json.loads(request.POST.get('query_data'))
        token = request.session["token"]
        resp = None
        import pdb
        pdb.set_trace()
        if "msg_type" in data["message"][0]:
            if "query" in data:
                query = data["query"]

            if data["message"][0]["msg_type"] == "q":
                resp = obj_api.post_all(slug='client/queries/',
                                        token=token,
                                        arg=data)
            if data["message"][0]["msg_type"] == "a":
                resp = obj_api.put_all(
                    slug='specialist/queries/{}/'.format(query),
                    token=token,
                    arg=data)
            if data["message"][0]["msg_type"] == "r":
                resp = obj_api.put_all(slug='client/queries/{}/'.format(query),
                                       token=token,
                                       arg=data)

            data = resp.json()
            data['status_code'] = resp.status_code
            return JsonResponse(data)

        return JsonResponse({"msg_type": "required"})
Example #6
0
 def contact_linkup(self, request, pk):
     """Mi contacto Linkup (Vendedor Asignado)."""
     obj_api = api()
     title_contact  = "Tu contacto Linkup"
     token = request.session['token']
     resp = obj_api.get(slug='sellers/' + pk + "/", token=token)
     return render(request, 'frontend/actors/client/my_account.html', {'data_user': resp, 
                                                                     'title_contact': title_contact})
Example #7
0
    def list_purchase_plans(self, request):
        """Listado de planes."""
        obj_api = api()
        token = request.session['token']

        plans = obj_api.get(slug='plans/', token=token)
        return render(request,
                      'frontend/actors/client/purchase_plan_list.html',
                      {"plans": plans})
Example #8
0
    def delete(self, request):
        if request.method == 'POST':
            id = request.POST['id']
            obj_api = api()
            result = obj_api.delete(slug='specialists/' + id,
                                    token=request.session['token'])

            return JsonResponse({'result': result})

        return JsonResponse({})
Example #9
0
 def index(self, request):
     """Inicio Cliente."""
     token = request.session['token']
     # import pdb; pdb.set_trace()
     obj_api = api()
     data_plans = obj_api.get(slug='clients/plans/', token=token, request=request)
     # print(data_plans)
     # form = ActivePlansForm()
     return render(request,
                       'frontend/actors/client/base_client.html')
Example #10
0
    def __init__(self,initial=None, token=None, *args, **kwargs):
        super(AccountStatusSellerFormFilters, self).__init__(initial, token, *args, **kwargs)
        obj_api = api()

        # Traer vendedores directamente desde la api
        # y actualizamos los options del select
        # "?page_size=0" trae un listado, ignorando la paginacion
        data = obj_api.get(slug='sellers/?page_size=0', token=token)

        if type(data) is list:
            self.fields['seller'].widget.choices = [('', '')] + [(l['id'], l['first_name']+' '+l['last_name']) for l in data]
Example #11
0
    def status(self, request, pk):
        obj_api = api()
        token = request.session['token']
        resp = obj_api.get(slug='account_status/client/' + pk, token=token)

        month_api = resp['mounth']
        month = []
        for plan in month_api['plans']:
            month.append({
                "number": plan['query_quantity'],
                "text": plan['plan_name']
            })
            month.append({
                "number": plan['queries_used'],
                "text": "Consultas absueltas"
            })
            month.append({
                "number": plan['available_queries'],
                "text": "Consultas disponibles"
            })

        month.append({"number": month_api['match_acquired'], "text": "Match"})
        month.append({
            "number": month_api['match_absolved'],
            "text": "Match aceptados"
        })
        month.append({
            "number": month_api['match_declined'],
            "text": "Match declinados"
        })

        historic_api = resp['historic']
        historic = []
        historic.append({
            "number": historic_api['queries_acquired'],
            "text": "Consultas adquiridas"
        })
        historic.append({
            "number": historic_api['queries_made'],
            "text": "Consultas absueltas"
        })
        historic.append({
            "number": historic_api['queries_available'],
            "text": "Consultas disponibles"
        })

        if month and historic:
            return render(request,
                          'frontend/actors/client/account_status.html', {
                              'month': month,
                              'historic': historic
                          })
        else:
            return JsonResponse({})
Example #12
0
    def associates(self, request):
        obj_api = api()
        token = request.session['token']
        resp = obj_api.get(slug='specialists/associate/', token=token)

        associates = resp['results']
        count = resp['count']

        return render(request,
                      'frontend/actors/specialist/associate_list.html', {
                          'associates': associates,
                          'count': count
                      })
Example #13
0
    def middleware(request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        if 'token' in request.session:
            obj_api = api()
            if not obj_api.check_token(request.session['token'], 'oauth/'):
                logout(request)

        response = get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response
Example #14
0
    def account_profile(self, request, pk):
        obj_api = api()
        token = request.session['token']
        resp = obj_api.get(slug='clients/' + pk + "/", token=token)
        if resp["type_client"] == 'n':
            display_name = resp["first_name"] + ' ' + resp["last_name"]
        else:
            display_name = resp["agent_firstname"] + ' ' + resp["agent_lastname"]     

        try:
            ciiu = Ciiu.objects.get(pk=resp['ciiu'])
        except Ciiu.DoesNotExist:
            ciiu = None   

        return render(request, 'frontend/actors/client/my_account.html', {'data_user': resp, 'ciiu':ciiu, 'name':display_name})
Example #15
0
def upload_file(request):
    """Enviar data de archivos."""
    obj_api = api()
    files = request.FILES
    query = request.POST.get('query')

    token = request.session["token"]
    slug = 'queries/upload_files/{}'.format(query)

    resp = obj_api.put_all(slug=slug, token=token, files=files)

    if resp.status_code == 200:
        return JsonResponse({})
    else:
        return JsonResponse({"error": resp.status_code})
Example #16
0
 def account_profile(self, request, pk):
     obj_api = api()
     token = request.session['token']
     resp = obj_api.get(slug='specialists/' + pk + "/", token=token)
     name = resp["first_name"] + ' ' + resp["last_name"]
     if resp["type_specialist"] == 'm':
         type_specialist = 'Especialista Principal'
     else:
         type_specialist = 'Especialista Asociado'                
         
     
     if resp:
         return render(request, 'frontend/actors/specialist/my_account.html', {'data_user':resp, 'name':name,
                                                                              'type_specialist': type_specialist})
     else:
         return JsonResponse({})
Example #17
0
    def get_user(self, user_id):
        """
        Django exige a la clase de autenticacion un metodo
        para obtener cualquier usuario por el identificador unico

        :param user_id: identificador unico del usuario
        :return: objeto User o None
        """

        try:
            obj_api = api()
            # consultar un usuario por el identificador unico
            return obj_api.getuserById(user_id)

        except User.DoesNotExist:
            return None
Example #18
0
    def summary_purchase_plans(self, request):
        """Resumen compra de planes."""
        obj_api = api()
        token = request.session['token']
        plans_purchase = []
        products = []
        ids_purchase = []
        plans = obj_api.get(slug='plans/', token=token)
        ids_plans = request.POST.getlist('vehicle')
        total = request.POST["total"]

        is_fee = int(request.POST["modality"])

        for i in range(0, len(ids_plans)):
            id_p = int(ids_plans[i]) - 1
            plans_purchase.append(plans[id_p])

        for plan in plans_purchase:
            id_plan = plan["id"]
            plan_name = plan['name']
            ids_purchase.append(id_plan)
            total_queries = plan['query_quantity']
            price = float(plan['price'])
            validity = plan['validity_months']
            if is_fee == 1:
                fee_queries = total_queries // validity
                price /= validity
            else:
                fee_queries = None

            products.append({
                'id': id_plan,
                'name': plan_name,
                'total_queries': total_queries,
                'fee_queries': fee_queries,
                'validity': validity,
                'price': price
            })
        # json_ids = json.loads(ids_purchase)

        return render(
            request, 'frontend/actors/client/summary_plans.html', {
                "products": products,
                "total": total,
                "isfee": is_fee,
                "ids_plans": ids_purchase
            })
Example #19
0
    def authenticate(self, request, username=None, password=None):
        """
        A partir del nombre de usuario y password se comprueba
        si son los datos correctos por medio de una consulta al api linkup

        :param request: request con los datos de username y password
        :param username: identificador unico del usuario
        :param password: clave del usuario
        :return: objeto User si existe el usuario o None si no existe o el password es incorrecto
        """

        # crear objeto api
        obj_api = api()

        # validar datos por medio de una consulta del token del usuario
        token = obj_api.token(request.POST['user'], request.POST['password'])

        # validar respuesta
        if token:
            # existe token

            # guardar token en la sesion
            request.session['token'] = token

            try:
                # se debe pasar user y token para obtener los datos del usuario
                user = obj_api.getUsuario(token, username)
                # guardar usuario unicamete para que el framework acepte el objeto
                user.save()

                # Si es role especialista
                if user.role.id == 3:
                    specialist = obj_api.get_all(
                        token, slug="specialists-users/{}/".format(username))

                    if specialist.status_code == 200:
                        data_specialist = specialist.json()
                        request.session['specialist'] = {}
                        request.session['specialist'][
                            'type_specialist'] = data_specialist[
                                'type_specialist']

            except User.DoesNotExist:
                return None

            return user
        return None
Example #20
0
    def detail(self, request, pk):
        obj_api = api()
        data = obj_api.get(slug='sellers/' + pk,
                           token=request.session['token'])
        # Si la data del usuario no es valida

        if type(data) is not dict or 'id' not in data:
            raise Http404()

        # Titulo de la vista y variables de la Clase
        title_page = "{} - {}".format(_('Seller').title(), _('detail').title())
        vars_page = self.generate_header(custom_title=title_page)

        return render(request, 'admin/actor/sellersDetail.html', {
            'data': data,
            'vars_page': vars_page
        })
Example #21
0
    def list(self, request):
        actual_page = get_actual_page(request)
        arg = {"page": actual_page}
        obj_api = api()
        data = obj_api.get(slug='administrators/',
                           arg=arg,
                           token=request.session['token'])

        custom_column = {
            "last_name": {
                'type': 'concat',
                'data': {'username', 'last_name'}
            },
            "detail": {
                'type': 'detail',
                'data': {
                    'href': 'dashboard:actor-administrators-detail',
                    'key': 'id'
                }
            }
        }
        lastnames_title = "{} {} {}".format(_("surnames"), _("and"),
                                            _("names"))
        header_table = {
            lastnames_title: "last_name",
            _("code"): "code",
            _("email"): "email_exact",
            _("RUC"): "ruc",
            _("category"): "",
            _("specialty"): "",
            _("detail"): "detail"
        }
        table = convert(data,
                        header=header_table,
                        actual_page=actual_page,
                        custom_column=custom_column)

        vars_page = self.generate_header(
            custom_title=_('administrators').title())
        return render(request, 'admin/actor/administratorsList.html', {
            'table': table,
            'vars_page': vars_page
        })
Example #22
0
def ajax_service(request):
    """Planes Activos."""
    obj_api = api()
    if request.method == 'PUT':
        data = QueryDict(request.body)
    else:
        data = getattr(request, request.method)

    if request.FILES:
        files = request.FILES
    else:
        files = None
    if 'use_method' in data:
        request.method = data['use_method']

    if 'url' in data:
        url = data['url']
    else:
        return JsonResponse()

    if 'token' in request.session:
        token = request.session['token']
    else:
        token = None

    data = clean_data_files(request, data)

    if 'serialize' in data:
        data = serialize_keystr_to_json(request, data, data["serialize"])

    resp = getattr(obj_api,
                   request.method.lower() + '_all')(slug=url,
                                                    token=token,
                                                    arg=data,
                                                    files=files)
    data = resp.json()

    try:
        data['status_code'] = resp.status_code
    except TypeError as e:
        print(e)

    return JsonResponse(data, safe=False)
Example #23
0
    def associate(self, request, pk):
        obj_api = api()
        token = request.session['token']
        resp = obj_api.get(slug='specialists/' + pk, token=token)

        data_user = resp
        name = data_user['first_name'] + ' ' + data_user['last_name']
        type_specialist = data_user['type_specialist']
        if type_specialist == 'a':
            type_specialist = 'Especialista asociado'
        elif type_specialist == 'm':
            type_specialist = 'Especialista principal'

        return render(
            request, 'frontend/actors/specialist/my_account.html', {
                'data_user': data_user,
                'type_specialist': type_specialist,
                'name': name
            })
Example #24
0
    def detail(self, request, pk):
        obj_api = api()
        token = request.session['token']

        data = obj_api.get_all(slug='backend/matchs/' + pk, token=token)

        if data.status_code == 200:
            # Titulo de la vista y variables de la Clase
            title_page = _('payments').title() + " - " + _('pending').title()
            vars_page = self.generate_header(custom_title=title_page)

            data_json = data.json()
            if request.method == 'POST':
                form = PaymentMatch(data=request.POST)
                if form.is_valid():
                    data = form.cleaned_data
                    result = obj_api.post_all(
                        slug='specialists/payment/match/',
                        token=token,
                        arg=data)

                    if result and result.status_code == 201:
                        return HttpResponseRedirect(reverse(self._list))
                    else:
                        # Mostrar Errores en Form
                        # Agregamos errores retornados por la app para este formulario
                        form.add_error_custom(add_errors=result.json())
            else:
                payment = {}
                payment['bank'] = 1
                payment['match'] = data_json['id']
                form = PaymentMatch(initial=payment)

            return render(
                request, 'admin/payment/match.html', {
                    'data': data_json,
                    'vars_page': vars_page,
                    'form': form,
                    'go_back': self._list
                })
        else:
            return HttpResponseRedirect(reverse(self._list))
Example #25
0
    def chat(self, request, pk):
        """Chat por Especialidad."""
        obj_api = api()
        token = request.session['token']

        messages = None
        parameters = {'page_size': 0}
        data_messages = obj_api.get(slug='queries/categories/' + pk,
                                    token=token,
                                    arg=parameters)
        # Ordenamos el listado de mensajes para que los mas recientes salgan
        # abajo.
        esp = Category.objects.get(pk=pk)
        form = QueryForm()
        if data_messages:
            messages = sorted(data_messages, key=itemgetter('id'))

        return render(request, 'frontend/actors/client/chat.html', {
            'messages': messages,
            'form': form,
            'speciality': esp
        })
Example #26
0
    def create(self, request):
        """Metodo para crear Vendedores."""
        obj_api = api()
        token = request.session["token"]
        # Si llega envio por POST se valida contra el SpecialistForm
        if request.method == 'POST':

            form = self.generate_form_seller(data=request.POST,
                                             files=request.FILES)
            if form.is_valid():
                # Tomamos todo el formulario para enviarlo a la API
                data = form.cleaned_data
                data.update({
                    "address": {
                        "street": data["street"],
                        "department": data["department"],
                        "province": data["province"],
                        "district": data["district"],
                    },
                    "username": data["email_exact"]
                })
                result = obj_api.post(slug='sellers/', token=token, arg=data)
                if result and 'id' in result:
                    if 'photo' in request.FILES:
                        photo = {'photo': request.FILES['photo']}
                        obj_api.put(slug='upload_photo/' + str(result['id']),
                                    token=token,
                                    files=photo)
                    # Process success
                    if 'img_document_number' in request.FILES:
                        img_document_number = {
                            'img_document_number':
                            request.FILES['img_document_number']
                        }
                        obj_api.put(slug='upload_document/' +
                                    str(result['id']),
                                    token=token,
                                    files=img_document_number)
                    # Process success
                    return HttpResponseRedirect(reverse(self._list))
                else:
                    # Mostrar Errores en Form
                    form.add_error_custom(
                        add_errors=result
                    )  # Agregamos errores retornados por la app para este formulario

                    return render(request, 'admin/actor/sellersForm.html',
                                  {'form': form})

        else:
            # Crear formulario de especialistas vacio, se traeran
            # datos de selecion como Categorias y Departamentos.
            form = self.generate_form_seller()

        title_page = _('create seller').title()
        vars_page = self.generate_header(custom_title=title_page)
        sellers_form = reverse(self._create)
        return render(request, 'admin/actor/sellersForm.html', {
            'vars_page': vars_page,
            'form': form,
            'sellers_form': sellers_form
        })
Example #27
0
def register(request):
    """
    Vista para generar formulario de Registro perona Nutaral o Juridica
    """
    obj_api = api()
    type_client = 'n'

    if 'type_client' in request.GET:
        type_client = request.GET['type_client']

    if request.method == 'POST':

        if type_client == 'n':
            # Crear formulario de registro para persona Natural
            form = RegisterClientFormNatural(
                data=request.POST,
                files=request.FILES,
                initial={'type_client': type_client})
            template = 'public/register_natural.html'
        else:
            # Crear formulario de registro para persona Juridica
            form = RegisterClientFormBusiness(
                data=request.POST,
                files=request.FILES,
                initial={'type_client': type_client})
            template = 'public/register_business.html'

        if form.is_valid():
            # Tomamos todo el formulario para enviarlo a la API
            data = form.cleaned_data
            data.update({
                "address": {
                    "street": data["street"],
                    "department": data["department"],
                    "province": data["province"],
                    "district": data["district"],
                }
            })

            data['username'] = data['email_exact']

            tools = Tools()
            if 'birthdate' in data:
                data['birthdate'] = tools.date_format_to_db(
                    date=data['birthdate'])

            result = obj_api.post(slug='clients/', arg=data)
            # Si la respuesta de la API fue exitosa
            if result and 'id' in result:
                if 'photo' in request.FILES:
                    photo = {'photo': request.FILES['photo']}
                    image = Image.open(
                        os.path.join(BASE_DIR,
                                     request.FILES['photo'].file.name))
                    width, height = image.size
                    if width > height:
                        factor = 512 / width
                    else:
                        factor = 512 / height
                    img = image.resize(
                        (int(width * factor), int(height * factor)))
                    # image.size
                    # import pdb; pdb.set_trace()
                    img.save(request.FILES['photo'].file.name,
                             image.format,
                             quality=95)
                    obj_api.put(slug='upload_photo/' + str(result['id']),
                                files=photo)  # Envio de foto del Cliente
                # Process success
                template = 'public/register_success.html'
            else:
                # Mostrar Errores en Form
                # Agregamos errores retornados por la app para este formulario
                form.add_error_custom(add_errors=result)

    else:

        if type_client == 'n':
            # Crear formulario de registro para persona Natural
            form = RegisterClientFormNatural(
                initial={'type_client': type_client})
            template = 'public/register_natural.html'
        else:
            # Crear formulario de registro para persona Juridica
            form = RegisterClientFormBusiness(
                initial={'type_client': type_client})
            template = 'public/register_business.html'

    return render(request, template, {'form': form})
Example #28
0
    def edit(self, request, pk):
        obj_api = api()
        token = request.session['token']
        if request.method == 'POST':
            form = self.generate_form_seller(data=request.POST,
                                             form_edit=True,
                                             files=request.FILES)
            # check whether it's valid:
            if form.is_valid():
                # Tomamos todo el formulario para enviarlo a la API
                data = form.cleaned_data
                data.update({
                    "address": {
                        "street": data["street"],
                        "department": data["department"],
                        "province": data["province"],
                        "district": data["district"],
                    }
                })

                # return JsonResponse(data)

                result = obj_api.put(slug='sellers/' + pk,
                                     token=token,
                                     arg=data)

                if result and 'id' in result:
                    # Agregando foto del Usuario
                    if 'photo' in request.FILES:
                        photo = {'photo': request.FILES['photo']}
                        obj_api.put(slug='upload_photo/' + pk,
                                    token=token,
                                    files=photo)

                    # Se agrega documento del usuario
                    if 'img_document_number' in request.FILES:
                        img_document_number = {
                            'img_document_number':
                            request.FILES['img_document_number']
                        }
                        obj_api.put(slug='upload_document/' + pk,
                                    token=token,
                                    files=img_document_number)

                    return HttpResponseRedirect(reverse(self._list))
                else:
                    # Mostrar Errores en Form
                    form.add_error_custom(
                        add_errors=result
                    )  # Agregamos errores retornados por la app para este formulario

                    return render(request, 'admin/actor/sellersForm.html',
                                  {'form': form})

        else:
            seller = obj_api.get(slug='sellers/' + pk, token=token)
            form = self.generate_form_seller(seller=seller, form_edit=True)

        title_page = _('edit seller').title()
        vars_page = self.generate_header(custom_title=title_page)
        sellers_form = reverse(self._edit, args=(pk, ))

        return render(request, 'admin/actor/sellersForm.html', {
            'vars_page': vars_page,
            'form': form,
            'sellers_form': sellers_form
        })
Example #29
0
    def status(self, request, pk):
        obj_api = api()
        token = request.session['token']
        resp = obj_api.get(slug='account_status/specialist/' + pk, token=token)

        month_api = resp['mounth']
        month = []

        month.append({
            "number": month_api['queries_category_total'],
            "text": "Consultas recibidas"
        })
        month.append({
            "number": month_api['queries_category_absolved'],
            "text": "Consultas absueltas"
        })
        month.append({
            "number": month_api['queries_category_pending'],
            "text": "Consultas pendientes"
        })

        if resp['type_specialist'] == 'm':
            month.append({
                "number": month_api['queries_main_total'],
                "text": "Especialista principal"
            })
            month.append({
                "number": month_api['queries_main_absolved'],
                "text": "Principal absueltas"
            })
            month.append({
                "number": month_api['queries_main_pending'],
                "text": "Principal pendientes"
            })

            month.append({
                "number": month_api['queries_asociate_total'],
                "text": "Especialistas asociados"
            })
            month.append({
                "number": month_api['queries_asociate_absolved'],
                "text": "Asociados absueltas"
            })
            month.append({
                "number": month_api['queries_asociate_pending'],
                "text": "Asociados pendientes"
            })

        month.append({"number": month_api['match_total'], "text": "Match"})
        month.append({
            "number": month_api['match_accepted'],
            "text": "Match aceptados"
        })
        month.append({
            "number": month_api['match_declined'],
            "text": "Match declinados"
        })

        historic_api = resp['historic']
        historic = []
        historic.append({
            "number": historic_api['queries_main_absolved'],
            "text": "Consultas absueltas"
        })
        historic.append({
            "number": historic_api['match_accepted'],
            "text": "Match aceptados"
        })

        if resp:
            return render(request,
                          'frontend/actors/client/account_status.html', {
                              'month': month,
                              'historic': historic
                          })
        else:
            return JsonResponse({})
Example #30
0
    def list(self, request):
        """
        Listado de estado de cuenta de vendedores, donde se debera filtrar para buscar
        las ventas de un vendedor en especifico.
        """
        table = data_user = ""
        obj_api = api()
        token = request.session['token']
        title_page = _('Seller').title()

        form_filters = AccountStatusSellerFormFilters(initial=request.GET, token=token)
        if form_filters.is_valid():
            filters = form_filters.cleaned_data
            pk = filters['seller']

            if pk:
                actual_page = None
                tools = Tools()
                filters['from_date'] = tools.date_format_to_db(date=filters['from_date'])
                filters['until_date'] = tools.date_format_to_db(date=filters['until_date'])

                if filters['show_sum_column']:
                    filters['page_size'] = 0
                else:
                    actual_page = get_actual_page(request)

                # Traer data para el listado
                data = obj_api.get(slug='account_status/sellers/' + pk, arg=filters, token=token)

                # Columnas personalizadas, tienen mayor prioriedad que los campos que retornan de la api
                custom_column = {
                    "purchase__fee__date": {'type': 'date', 'data': ('purchase__fee__date',)},
                    "fee_accumulated": {'type': 'format_price', 'data': ('fee_accumulated',)},
                    "purchase__fee__fee_amount": {'type': 'format_price', 'data': ('purchase__fee__fee_amount',)},
                    "purchase__total_amount": {'type': 'format_price', 'data': ('purchase__total_amount',)},
                    "amount_accumulated": {'type': 'format_price', 'data': ('amount_accumulated',)},
                    "pending_payment": {'type': 'eval',
                                        'data': ('float(r["purchase__total_amount"]) - float(r["fee_accumulated"])',),
                                        'next': {'type': 'format_price'}},

                    "count_products_c": {'type': 'if_eval', 'data': ('int(r["purchase__fee_number"])<=1',),
                                         'next': {'type': 'concat', 'data': ('count_products',)}},
                    "fee_accumulated_c": {'type': 'if_eval', 'data': ('int(r["purchase__fee_number"])<=1',),
                                          'next': {'type': 'concat', 'data': ('fee_accumulated',)}},
                    "purchase__fee__fee_amount_c": {'type': 'if_eval', 'data': ('int(r["purchase__fee_number"])<=1',),
                                                    'next': {'type': 'concat', 'data': ('purchase__fee__fee_amount',)}},
                    "amount_accumulated_c": {'type': 'if_eval', 'data': ('int(r["purchase__fee_number"])<=1',),
                                             'next': {'type': 'concat', 'data': ('amount_accumulated',)}},

                    "count_products_q": {'type': 'if_eval', 'data': ('int(r["purchase__fee_number"])>1',),
                                         'next': {'type': 'concat', 'data': ('count_products',)}},
                    "fee_accumulated_q": {'type': 'if_eval', 'data': ('int(r["purchase__fee_number"])>1',),
                                          'next': {'type': 'concat', 'data': ('fee_accumulated',)}},
                    "purchase__fee__fee_amount_q": {'type': 'if_eval', 'data': ('int(r["purchase__fee_number"])>1',),
                                                    'next': {'type': 'concat', 'data': ('purchase__fee__fee_amount',)}},
                    "amount_accumulated_q": {'type': 'if_eval', 'data': ('int(r["purchase__fee_number"])>1',),
                                             'next': {'type': 'concat', 'data': ('amount_accumulated',)}},

                    "purchase_fee_amount": {'type': 'concat', 'data': ('purchase__fee__fee_amount',)},
                    "purchase__fee__reference_number": {'type': 'concat', 'data': (
                        'purchase__fee__fee_order_number', '/', 'purchase__fee_number')},

                }

                # Cabecera principal, los titulos de la columna seran sobrepuestos si pasa el list de cabecera multiple
                header_table = [(_("date"), "purchase__fee__date"), (_("type"), "is_billable"), (
                    _("number"), "purchase__code"), (_("code"), "purchase__client__code"),
                                (_("nick"), "purchase__client__nick"), (
                                    _("name"), "purchase__product__name"),
                                (_("query amount"), "purchase__query_amount"), (
                                    _("mounth of duration"), "purchase__product__expiration_number"), (
                                    _("price"), "purchase__total_amount"), (_("Payments Made"), "purchase_fee_amount"),
                                (
                                    _("Pending payment"), "pending_payment"), (
                                    _("advance"), "purchase__fee__reference_number"), (
                                    "", "count_products_c"), ("", "fee_accumulated_c"),
                                ("", "purchase__fee__fee_amount_c"), ("", "amount_accumulated_c"), (
                                    "", "count_products_q"), ("", "fee_accumulated_q"),
                                ("", "purchase__fee__fee_amount_q"), ("", "amount_accumulated_q"), (
                                    "", "count_products"), ("", "fee_accumulated"), ("", "purchase__fee__fee_amount"),
                                ("", "amount_accumulated")]

                # Multiples header, una lista por cada nivel de la cabecera
                multi_header = [
                    [
                        (_('date'), {'rowspan': '4'}),
                        (_('reference of sale'), {'rowspan': '3', 'colspan': '2'}),
                        (_('customer reference'), {'rowspan': '3', 'colspan': '2'}),
                        (_('description of plans'), {'rowspan': '3', 'colspan': '3'}),
                        (_('sales productivity'), {'rowspan': '3', 'colspan': '4'}),
                        (_('Composition of the Sale by Form of Payment'), {'rowspan': '1', 'colspan': '12'}),
                    ],
                    [
                        (_('Cash'), {'colspan': '4'}),
                        (_('Credit'), {'colspan': '4'}),
                        (_('Totals'), {'colspan': '4'}),
                    ],
                    [
                        (_('units'), {'colspan': '2'}),
                        (_('amount'), {'colspan': '2'}),
                        (_('units'), {'colspan': '2'}),
                        (_('amount'), {'colspan': '2'}),
                        (_('units'), {'colspan': '2'}),
                        (_('amount'), {'colspan': '2'}),
                    ],
                    [
                        (_('type'), {}),
                        (_('number'), {}),
                        (_('code'), {}),
                        (_('Nick'), {}),
                        (_('name'), {}),
                        (_('N° of queries'), {}),
                        (_('mounth of duration'), {}),
                        (_('Price'), {}),
                        (_('Payments Made'), {}),
                        (_('Pending payment'), {}),
                        (_("reference fee"), {}),
                        (_('quantity'), {}),
                        (_('accumulated'), {}),
                        (_('paid out'), {}),
                        (_('accumulated'), {}),
                        (_('quantity'), {}),
                        (_('accumulated'), {}),
                        (_('paid out'), {}),
                        (_('accumulated'), {}),
                        (_('quantity'), {}),
                        (_('accumulated'), {}),
                        (_('paid out'), {}),
                        (_('accumulated'), {}),
                    ],
                ]

                if filters['show_sum_column']:
                    # Lista con los valores para el footer de la tabla, posterior al cargado de la data
                    footer = [
                        {
                            'purchase__total_amount': {'type': 'acum', 'id': 'purchase__id',
                                                       'value': 'purchase__total_amount', 'format_price': True},
                            'purchase_fee_amount': {'type': 'acum', 'id': 'purchase__fee__id',
                                                    'value': 'purchase__fee__fee_amount', 'format_price': True},
                            'pending_payment': {'type': 'eval',
                                                'data': 'float(f[0]["_purchase__total_amount"])-float(f[0]["_purchase_fee_amount"])',
                                                'format_price': True},
                        },
                        {
                            'purchase_fee_amount': {'type': 'eval',
                                                    'data': 'float(f[0]["_purchase_fee_amount"])/float(f[0]["_purchase__total_amount"])',
                                                    'format_price': True},
                            'pending_payment': {'type': 'eval', 'data': '1-float(f[1]["_purchase_fee_amount"])',
                                                'format_price': True},
                        }
                    ]
                else:
                    footer = None

                table = convert(data, header=header_table, actual_page=actual_page, custom_column=custom_column,
                                multi_header=multi_header, footer=footer)
                
                data_user = obj_api.get(slug='sellers/' + pk, token=token)

        vars_page = self.generate_header(custom_title=title_page)
        return render(request, 'admin/account_status/account_status_seller.html',
                      {'vars_page': vars_page, 'table': table, 'form_filters': form_filters, 'data_user': data_user})