Exemplo n.º 1
0
    def post(self, req):

        form = ReportForm(req.POST)

        # Verifica validacao
        if form.is_valid():
            dados_form = form.data
            report = Report.objects.create(condition=dados_form['condition'],
                                           name=dados_form['name'],
                                           command=dados_form['command'])
            report.save()

            # Valores para tabela na pagina principal
            commands = Command.objects.all()
            computers = Computer.objects.all()

            return render(
                req, 'pagina_principal.html', {
                    "computers": computers,
                    "commands": commands,
                    "event": 1,
                    "msg": "Report editado com sucesso."
                })

        return render(req, self.template_name, {'form': form})
Exemplo n.º 2
0
def edit_report(request, lot_number):
    report = Report.objects.get(lot_number=lot_number) 
    if request.method == 'POST':
        reportform = ReportForm(request.POST, instance=report)
        if reportform.is_valid():
            report = reportform.save()
            action.send(request.user, verb='edited lot number', target=report)
            return HttpResponseRedirect(report.get_absolute_url())
    else:
        reportform = ReportForm(instance=report)
    return render_to_response('reports/new_report.html',
                              {'reportform': reportform,},
                              context_instance=RequestContext(request))
Exemplo n.º 3
0
def new_report(request):

    if request.method == 'POST':
        reportform = ReportForm(request.POST)
        if reportform.is_valid():
            report = reportform.save()
            report.created_by = request.user
            report.save()
            action.send(request.user,
                        verb='created lot number',
                        action_object=report,
                        target=report)
            return HttpResponseRedirect(report.get_absolute_url())
    else:
        copy = request.GET.get('copy', None)
        if copy:
            report = Report.objects.get(lot_number=copy)
            reportform = ReportForm(instance=report)
        else:
            reportform = ReportForm(
                initial={'receiving_date': time.strftime("%Y-%m-%d")})
    return render_to_response('reports/new_report.html', {
        'reportform': reportform,
    },
                              context_instance=RequestContext(request))
Exemplo n.º 4
0
def create_report_view(request):
    form = ReportForm(request.POST or None)
    if request.is_ajax():
        image = request.POST.get('image')
        img = get_report_image(image)
        author_profile = Profile.objects.get(user=request.user)

        if form.is_valid():
            instance = form.save(commit=False)
            instance.image = img
            instance.author = author_profile
        instance.save()

        return JsonResponse({'msg': 'success'})
    return JsonResponse({})
Exemplo n.º 5
0
def home_view(request):
    sale_form = SaleSearchForm(request.POST or None)
    report_form = ReportForm()
    data_all = by_id = by_date = chart = None

    # allow to user search data for time periods
    if request.method == 'POST':
        date_from = request.POST.get('date_from')
        date_to = request.POST.get('date_to')
        chart_type = request.POST.get('chart_type')
        result_by = request.POST.get('result_by')

        # all logic in util.py file
        logic_util = sales_and_positions(date_from, date_to, chart_type,
                                         result_by, request)
        if logic_util:
            data_all, by_id, by_date, chart = logic_util

    context = {
        'title': 'Sales Home',
        'sale_form': sale_form,
        'report_form': report_form,
        'data': data_all,
        "by_id": by_id,
        "by_date": by_date,
        "chart": chart
    }

    return render(request, 'sales/home.html', context)
Exemplo n.º 6
0
 def get_context_data(self, **kwargs):
     context = super().get_context_data(**kwargs)
     context['title'] = 'Reporte de Salidas'
     context['entity'] = 'Reportes'
     context['list_url'] = reverse_lazy('sale_report')
     context['form'] = ReportForm()
     return context
Exemplo n.º 7
0
def home_view(request):
    sales_df = None
    positions_df = None
    merged_df = None
    df = None
    chart = None
    no_data = None

    search_form = SalesSearchForm(request.POST or None)
    reportform = ReportForm()


    if request.method == 'POST':
        date_from = request.POST.get('date_from')
        date_to = request.POST.get('date_to')
        chart_type = request.POST.get('chart_type')
        results_by = request.POST.get('results_by')
        sales_qs = Sale.objects.filter(created__date__gte=date_from,created__date__lte=date_to) 
        if len(sales_qs)>0:
            sales_df = pd.DataFrame(sales_qs.values())
            sales_df['customer_id'] = sales_df['customer_id'].apply(get_customer_from_id)
            sales_df['salesman_id'] = sales_df['salesman_id'].apply(get_salesman_from_id)
            sales_df = sales_df.rename({'customer_id':'customer','salesman_id':'salesman','id':'sales_id'},axis=1)
            sales_df['created'] = sales_df['created'].apply(lambda x:x.strftime('%y-%m-%d'))
            sales_df['updated'] = sales_df['updated'].apply(lambda x:x.strftime('%y-%m-%d'))
            # sales_df['sales_id'] = sales_df['id']
            positions_data = []
            #there will be multiple sales in sales_qs
            for sale in sales_qs:
                #there will be multiple positions in 1 sale
                for pos in sale.get_positions():
                    obj = {'position_id':pos.pk,
                           'product':pos.product.name,
                           'quantity':pos.quantity,
                           'price':pos.price,
                           'sales_id':pos.get_sales_id(),}

                    positions_data.append(obj)    
            positions_df = pd.DataFrame(positions_data)
            merged_df = pd.merge(sales_df,positions_df,on='sales_id')
            df = merged_df.groupby('transaction_id',as_index=False)['price'].agg('sum')
            print('v1',df['transaction_id'].values)

            chart = get_chart(chart_type,sales_df,results_by)

            sales_df = sales_df.to_html()
            positions_df = positions_df.to_html()  
            merged_df = merged_df.to_html()
            df = df.to_html()      
       
        else:
            no_data = 'no data is available in this date range'

    context={'search_form':search_form,'reportform':reportform,
             'sales_df':sales_df,'positions_df':positions_df,'merged_df':merged_df,
             'df':df,'chart':chart,'no_data':no_data}
    return render(request,'sales/home.html',context)
Exemplo n.º 8
0
def report_view(request, production_line):
    r_form = ReportForm(request.POST or None)
    p_form = ProblemReportedForm(request.POST or None)
    queryset = Report.objects.filter(production_line__name=production_line)

    if p_form.is_valid():
        print(request.POST)

    context = {'r_form': r_form, 'p_form': p_form, 'object_list': queryset}
    return render(request, 'reports/report.html', context)
Exemplo n.º 9
0
def list_file(request):
    '''
    :param request:
    :return:a response
    '''

    report_form = ReportForm(request.POST or None)
    file_form = FileForm(request.POST or None, request.FILES or None)

    if file_form.is_valid():
        collection_name = create_collection(request, file_form)
        instance = file_form.save(commit=False)
        instance.collection = collection_name
        instance.save()
        collection_obj = get_collection(request, collection_name)
        field_list, _ = get_fields_and_data_from_collection(collection_obj)
        field_instance_list = []
        for turn in field_list:
            field_instance_list.append(
                Field.objects.create(name=turn[0], type=turn[1],
                                     file=instance))
        print(Field.objects.all())
        return redirect(reverse('files:list'))

    elif report_form.is_valid():
        instance = report_form.save()
        narrative_instance = Narrative.objects.create(report=instance)
        narrative_instance.segments.create(index=0)
        print(instance.name, instance.file)
        return redirect(reverse('reports:editor', kwargs={'id': instance.id}))

    else:
        file_qs = File.objects.all()
        collection_list = []
        for turn in file_qs:
            collection_list.append(get_summary_of_collection(request, turn))
        context = {
            'collection_list': collection_list,
            'file_form': file_form,
            'report_form': report_form,
        }
        return render(request, 'files/list.html', context)
Exemplo n.º 10
0
def new_report(request):

    if request.method == 'POST':
        reportform = ReportForm(request.POST)
        if reportform.is_valid():
            report = reportform.save()
            report.created_by = request.user
            report.save()
            action.send(request.user, verb='created lot number', action_object=report, target=report)
            return HttpResponseRedirect(report.get_absolute_url())
    else:
        copy = request.GET.get('copy', None)
        if copy:
            report = Report.objects.get(lot_number=copy)
            reportform = ReportForm(instance=report)
        else:
            reportform = ReportForm(initial={'receiving_date': time.strftime("%Y-%m-%d")})
    return render_to_response('reports/new_report.html',
                              {'reportform': reportform,},
                              context_instance=RequestContext(request))
Exemplo n.º 11
0
def report(request):
    if request.method == "POST":
        form = ReportForm(request.POST)
        if form.is_valid():
            model_instance = form.save(commit=False)
            model_instance.save()
            return redirect(reverse("reportdone"))
    else:
        form = ReportForm()
    return render(request, 'reports/report.html', {'form': form})
Exemplo n.º 12
0
def edit_report(request, lot_number):
    report = Report.objects.get(lot_number=lot_number)
    if request.method == 'POST':
        reportform = ReportForm(request.POST, instance=report)
        if reportform.is_valid():
            report = reportform.save()
            action.send(request.user, verb='edited lot number', target=report)
            return HttpResponseRedirect(report.get_absolute_url())
    else:
        reportform = ReportForm(instance=report)
    return render_to_response('reports/new_report.html', {
        'reportform': reportform,
    },
                              context_instance=RequestContext(request))
Exemplo n.º 13
0
def index(request):
    if request.user.is_authenticated:
        if request.method == 'GET':
            form = ReportForm(data=request.POST,
                              user_from=request.user.username)
            context = {'form': form}
            return render(request, 'reports/report.html', context)
        if request.method == 'POST':
            form = ReportForm(data=request.POST,
                              user_from=request.user.username)
            if form.is_valid():
                instance = form.save()
                report_reverse = instance.pk
                return redirect(
                    reverse('reports:status',
                            kwargs={'report_id': str(report_reverse)}))
    else:
        return redirect(reverse('user:login'))
Exemplo n.º 14
0
def report(request, id):
    try:
        reported_elem = Node.objects.get(id=id)
    except:
        reported_elem = Edge.objects.get(id=id)

    if request.method == "POST":
        form = ReportForm(request.POST)
        if form.is_valid():
            model_instance = form.save(commit=False)
            model_instance.save()
            return redirect(reverse("reportdone"))
    else:
        form = ReportForm()
    return render(request, 'reports/report.html', {
        'form': form,
        "element": reported_elem
    })
Exemplo n.º 15
0
Arquivo: views.py Projeto: elkhouri/ck
def view_reports(request):
    formset = ReportForm()
    if request.method == 'POST':
        if request.POST.get('report'):
            report = get_object_or_404(Report, pk=request.POST.get('report'))
            form = ReportForm(request.POST, instance=report)
            if form.is_valid():
                report = form.save()
                report.save()
                return render_to_response('reports/reports.html',{
                                          'success': "success",
                                          'form': formset,
                                          'reports': Report.objects.all()},
                                          context_instance=RequestContext(request))
            else:
                return render_to_response('reports/reports.html',{
                                          'error': form.errors,
                                          'form': formset,
                                          'reports': Report.objects.all()},
                                          context_instance=RequestContext(request))
        else:
            form = ReportForm(request.POST)
            if form.is_valid():
                new_report= form.save()
                return render_to_response('reports/reports.html',{
                                          'success': "success",
                                          'form': formset,
                                          'reports': Report.objects.all()},
                                          context_instance=RequestContext(request))
            else:
                return render_to_response('reports/reports.html',{
                                          'error': form.errors,
                                          'form': formset,
                                          'reports': Report.objects.all()},
                                          context_instance=RequestContext(request))
    else:
        return render_to_response('reports/reports.html',{
                                  'form': formset,
                                  'reports': Report.objects.all()},
                                  context_instance=RequestContext(request))
Exemplo n.º 16
0
def home_view(request):

    search_form = SalesSearchForm(request.POST or None)
    report_form = ReportForm()

    sales_df = None
    position_df = None
    merged_df = None
    df = None
    chart = None
    no_data = None

    if request.method == 'POST':
        date_from = request.POST.get('date_from')
        date_to = request.POST.get('date_to')
        chart_type = request.POST.get('chart_type')
        results_by = request.POST.get('results_by')

        sale_qs = Sale.objects.filter(created__date__gte=date_from,
                                      created__date__lte=date_to)
        if len(sale_qs) > 0:
            sales_df = pd.DataFrame(sale_qs.values())

            sales_df['customer_id'] = sales_df['customer_id'].apply(
                get_customer_from_id)
            sales_df['salesman_id'] = sales_df['salesman_id'].apply(
                get_salesman_from_id)
            sales_df['created'] = sales_df['created'].apply(
                lambda x: x.strftime('%Y-%m-%d'))

            sales_df.rename(
                {
                    'customer_id': 'customer',
                    'salesman_id': 'salesman',
                    'id': 'sales_id'
                },
                axis=1,
                inplace=True)
            positions_data = []

            for sale in sale_qs:
                for pos in sale.get_positions():
                    obj = {
                        'position_id': pos.id,
                        'product': pos.product,
                        'quantity': pos.quantity,
                        'price': pos.price,
                        'sales_id': pos.get_sale_id()
                    }
                    positions_data.append(obj)
            position_df = pd.DataFrame(positions_data)
            merged_df = pd.merge(sales_df, position_df, on='sales_id')
            df = merged_df.groupby('transaction_id',
                                   as_index=False)['price'].agg('sum')

            chart = get_chart(chart_type, sales_df, results_by)

            sales_df = sales_df.to_html()
            position_df = position_df.to_html()
            merged_df = merged_df.to_html()
            df = df.to_html()

        else:
            no_data = "Sorry! 😔 No Data Available."

    context = {
        'search_form': search_form,
        'report_form': report_form,
        'sales_df': sales_df,
        'position_df': position_df,
        'merged_df': merged_df,
        'df': df,
        'chart': chart,
        'no_data': no_data,
    }
    return render(request, 'sales/home.html', context=context)
Exemplo n.º 17
0
def reports_edit(request, **kwargs):
    # Get id
    report_id = kwargs.get('id')

    # Get current user's reports
    user_reports = request.user.report_set.all()
    # Check if the `report_id` is correct
    try:
        report_to_edit = user_reports.get(id=report_id)
    except:
        return render(request,
                      'error_page.html',
                      context={
                          'error_message':
                          "No report with id:" + str(report_id) + " was found!"
                      })

    # Create the formset, specifying the form and formset we want to use
    ReportElementFormSet = formset_factory(ReportElementForm,
                                           formset=BaseFormSet,
                                           extra=0)

    # Get our data for. This is used as initial data.
    report_elements = ReportElement.objects.filter(
        report=report_to_edit).order_by("element_order")
    report_elements_count = report_elements.count()

    if request.method == 'POST':
        if request.POST.get('delete'):
            return redirect('reports_delete', id=report_id)

        report_form = ReportForm(request.POST)
        report_element_formset = ReportElementFormSet(
            request.POST, form_kwargs={'user': request.user})

        if report_form.is_valid() and report_element_formset.is_valid():
            report_new_data = report_form.cleaned_data
            # Update `report` object
            for attr, value in report_new_data.items():
                # print('{} = {}'.format(attr, value))
                setattr(report_to_edit, attr, value)
            report_to_edit.save()

            # Now save the data for each form in the formset
            new_elements = []

            for form in report_element_formset:
                new_data = form.cleaned_data
                new_element = ReportElement(report=report_to_edit)

                for attr, value in new_data.items():
                    # print('{} = {}'.format(attr, value))
                    setattr(new_element, attr, value)
                new_elements.append(new_element)

            try:
                with transaction.atomic():
                    #Replace the old with the new
                    ReportElement.objects.filter(
                        report=report_to_edit).delete()
                    ReportElement.objects.bulk_create(new_elements)

                    # And notify our users that it worked
                    messages.success(
                        request,
                        '<i class="uk-icon-floppy-o"></i> Report saved!',
                        extra_tags='safe')

            except IntegrityError:  #If the transaction failed
                messages.error(
                    request,
                    '<i class="uk-icon-ban"></i> There was an error saving your report.',
                    extra_tags='safe')

        if request.POST.get('add'):
            return redirect('reports_add_element', id=report_id)

    else:
        report_form = ReportForm(
            initial={
                'report_name': report_to_edit.report_name,
                'report_description': report_to_edit.report_description,
            })

        report_element_formset = ReportElementFormSet(
            initial=[{
                'id': el.id,
                'element_name': el.element_name,
                'element_order': el.element_order,
                'element_type': el.element_type,
                'text': el.text,
                'caption': el.caption,
                'style': el.style,
                'spreadsheet': el.spreadsheet,
                'plot': el.plot,
                'embedded_raport': el.embedded_raport,
                'element_start': el.element_start,
                'element_end': el.element_end,
            } for el in report_elements],
            form_kwargs={'user': request.user})
    return render(request,
                  'reports_edit.html',
                  context={
                      'report': report_to_edit,
                      'report_form': report_form,
                      'report_element_formset': report_element_formset,
                      'report_elements_count': report_elements_count,
                  })
Exemplo n.º 18
0
    def get(self, request):
        success_message = ''
        form = ReportForm()
        context = {'form': form, 'success_message': success_message}

        return render(request, 'reports/new_report.html', context)
Exemplo n.º 19
0
def report_list(request):
    # If we have an account_id provided via URI, using it as inital
    # value for the form.
    language = get_language()
    decimal_separator = get_format("DECIMAL_SEPARATOR", language, True)

    context = {"account": None, 'user': request.user}

    if not request.user.accounts.real_ib().exists():
        return {"TEMPLATE": "reports/403.html"}

    excluded_for_user = set(
        AccountGroup.objects.excluded_for_user(request.user))

    if request.method == "POST":
        form = ReportForm(data=request.POST or None, **context)

        if form.is_valid():
            error_context = {
                "form":
                form,
                'DECIMAL_SEPARATOR':
                decimal_separator,
                'should_show_form':
                True,
                "reports":
                SavedReport.objects.filter(
                    for_user=request.user).order_by('-creation_ts')
            }
            error_context.update(context)

            def error():
                messages.error(
                    request,
                    _("You aren't allowed to view reports of that type for account"
                      ))
                return error_context

            codename = form.cleaned_data.get("report_type")

            if not codename:
                return error()

            report = settings.REPORTS.get(codename)

            if not report:
                return error()

            account = None
            groups_to_include = None
            groups_to_exclude = None
            if report["type"] == reports.ACCOUNT_GROUP:
                groups_to_include = form.cleaned_data.get(
                    "account_group_include")
                # мы хотим проверить, есть ли указанные пользователем группы среди доступных ему
                # - если в форме указаны группы, то проверяем их вхождения
                # - если они в форме не были указаны (для групп включения это означает использовать все счета),
                #   то если юзер имеет разрешение reports.can_use_any_account - ему это разрешено, иначе нет.
                # так как set([None]) не является подмножеством ни пустого сета, ни реального,
                # то он покажет ошибку при проверке вхождений множеств.
                # set() является подмножеством любого сета и гарантированно пройдет проверку вхождения
                if groups_to_include:
                    groups_to_include = set(groups_to_include)
                else:
                    groups_to_include = set() if request.user.has_perm("reports.can_use_any_account") \
                        else set([None])

                groups_to_exclude = form.cleaned_data.get(
                    "account_group_exclude")
                groups_to_exclude = set(
                    groups_to_exclude) if groups_to_exclude else set()

                available_inclusion_groups = set(
                    AccountGroup.objects.for_user(request.user))
                available_exclusion_groups = available_inclusion_groups | excluded_for_user

                if (groups_to_include and not groups_to_include.issubset(available_inclusion_groups)) or \
                        (groups_to_exclude and not groups_to_exclude.issubset(available_exclusion_groups)):
                    return error()
            elif report["type"] == reports.GLOBAL:
                if not request.user.has_perm("reports.can_use_any_account"):
                    return error()
            elif report["type"] == reports.PRIVATE_OFFICE:
                pass  # No checks are required
            else:
                if not request.user.has_perm("reports.can_use_any_account"):
                    account = form.cleaned_data.get("account")
                    if account and account.user != request.user:
                        return error()
                else:
                    account = TradingAccount(
                        mt4_id=int(request.POST.get("account")))

            if not request.user.has_perm("reports.can_generate_%s" % codename):
                return error()

            template = report.get(
                'template_name') or "reports/%s.html" % codename

            report = SavedReport()
            report.for_user = request.user

            report.name = unicode(form) % settings.REPORTS[codename]["name"]
            report.save()

            form_data = {
                'account_group_include': groups_to_include or [],
                'account_group_exclude': groups_to_exclude or [],
                'account': account,
                'report_type': codename,
                'start': form.cleaned_data['start'],
                'end': form.cleaned_data['end'],
            }

            task = generate_report.delay(form_data, template,
                                         decimal_separator, report, language,
                                         request.user)
            report.celery_task_id = task.pk
            report.save()
            messages.success(
                request,
                _("Your report order has been received and is now being processed. \
                      You will receive an email when the processing finishes.")
            )
            return redirect("reports_report_list")
    else:
        today = date.today()
        form = ReportForm(initial={
            "start":
            today + relativedelta(day=1),
            "end":
            today + relativedelta(day=1, days=-1, months=1)
        },
                          **context)

    context["form"] = form
    context["reports"] = SavedReport.objects.filter(
        for_user=request.user).order_by('-creation_ts')
    context['DECIMAL_SEPARATOR'] = decimal_separator
    context['should_show_form'] = True
    context['excluded_for_user'] = excluded_for_user

    return context
Exemplo n.º 20
0
def home_view(request):
    ## function views
    search_form = SalesSearchForm(request.POST or None)
    report_form = ReportForm()
    sales_df, position_df, merged_df, gdf = None, None, None, None
    chart = None
    no_data = None

    if request.method == 'POST':
        date_from = request.POST.get('date_from')
        date_to = request.POST.get('date_to')
        chart_type = request.POST.get('chart_type')
        result_by = request.POST.get('results_by')
        sales_qs = Sale.objects.filter(
            created_at__date__lte=date_to,
            created_at__date__gte=date_from)  # queryset
        if len(sales_qs) > 0:
            sales_df = pd.DataFrame(sales_qs.values())
            sales_df['salesman_id'] = sales_df['salesman_id'].apply(
                get_salesman_from_id)
            sales_df['customer_id'] = sales_df['customer_id'].apply(
                get_customer_from_id)
            sales_df.rename(
                {
                    'customer_id': 'customer',
                    'salesman_id': 'salesman',
                    'id': 'sales_id'
                },
                axis=1,
                inplace=True)
            sales_df['created_at'] = sales_df['created_at'].apply(
                lambda dt: dt.strftime("%d-%m-%Y"))
            position_data = [{
                'position_id': pos.id,
                'product': pos.product.name,
                'quantity': pos.quantity,
                'price': pos.price,
                'sales_id': pos.get_sales_id(),
            } for sale in sales_qs for pos in sale.get_positions()]
            position_df = pd.DataFrame(position_data)
            merged_df = pd.merge(sales_df, position_df, on='sales_id')
            gdf = merged_df.groupby('transaction_id',
                                    as_index=False)['price'].agg('sum')
            chart = get_chart(
                chart_type, sales_df,
                result_by)  # labels=gdf['transaction_id'].values)

            sales_df = sales_df.to_html()
            position_df = position_df.to_html()
            merged_df = merged_df.to_html()
            gdf = gdf.to_html()
        else:
            no_data = 'No data is available in this date range'

    ctxt = {
        'search_form': search_form,
        'report_form': report_form,
        'sales_df': sales_df,
        'position_df': position_df,
        'merged_df': merged_df,
        'gdf': gdf,
        'chart': chart,
        'no_data': no_data,
    }
    return render(request, 'sales/home.html', ctxt)
Exemplo n.º 21
0
def home_view(request):
    sales_df = None
    positions_df = None
    merged_df = None
    df = None
    chart = None
    no_data = None
    search_form = SalesSearchForm(request.POST or None)
    report_form = ReportForm()
    if request.method == 'POST':
        date_from = request.POST.get('date_from')
        date_to = request.POST.get('date_to')
        chart_type = request.POST.get('chart_type')
        results_by = request.POST.get('results_by')

        #print(date_from, date_to, chart_type)
        sale_qs = Sale.objects.filter(created__date__lte=date_to, created__date__gte=date_from)
        if len(sale_qs) > 0:
            sales_df = pd.DataFrame(sale_qs.values())
            sales_df['customer_id'] = sales_df['customer_id'].apply(get_customer_from_id) # returns
            sales_df['salesman_id'] = sales_df['salesman_id'].apply(get_salesman_from_id)
            sales_df['created'] = sales_df['created'].apply(lambda x: x.strftime('%y-%m-%d'))
            sales_df['updated'] = sales_df['updated'].apply(lambda x: x.strftime('%y-%m-%d'))
            sales_df.rename({'customer_id': 'Customer', 'salesman_id':'Salesperson', 'id': 'sales_id'}, axis=1, inplace=True)
            #sales_df['sales_id'] = sales_df['id']
            # need to set dataframe to HTML to display
            positions_data = []
            for sale in sale_qs:
                for pos in sale.get_positions():
                    obj = {
                        'position_id': pos.id,
                        'product': pos.product.name,
                        'quantity': pos.quantity,
                        'price': pos.price,
                        'sales_id': pos.get_sales_id(),
                    }
                    positions_data.append(obj)

            positions_df = pd.DataFrame(positions_data)

            #combining sales and positions df
            merged_df = pd.merge(sales_df, positions_df, on='sales_id')

            df = merged_df.groupby('transaction_id', as_index=False)['price'].agg('sum')

            chart = get_chart(chart_type, sales_df, results_by)

            positions_df = positions_df.to_html()
            sales_df = sales_df.to_html()
            merged_df = merged_df.to_html()
            df = df.to_html()

        else:
            no_data = 'No data is available in this date range.'

    context = {
        'search_form': search_form,
        'sales_df': sales_df,
        'positions_df': positions_df,
        'merged_df': merged_df,
        'df': df,
        'chart': chart,
        'report_form': report_form,
        'no_data': no_data,
    }
    return render(request, 'sales/home.html', context) # with dictionary can specify what you want to pass to template