예제 #1
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        currency = settings.CURRENCY
        back_url = reverse('analysis:homepage')
        incomes = Income.filters_data(
            self.request, Income.objects.all()).order_by('date_expired')
        income_clean_value, income_taxes, income_value = 0, 0, 0
        if incomes.exists():
            income_clean_value = incomes.aggregate(
                Sum('clean_value'))['clean_value__sum']
            income_taxes = incomes.aggregate(Sum('taxes'))['taxes__sum']
            income_value = incomes.aggregate(
                Sum('final_value'))['final_value__sum']

        total_z = incomes.aggregate(
            Sum('sum_z'))['sum_z__sum'] if incomes.exists() else 0
        total_pos = incomes.aggregate(
            Sum('pos'))['pos__sum'] if incomes.exists() else 0
        total_cash = total_z - total_pos
        total_order = incomes.aggregate(
            Sum('order_cost'))['order_cost__sum'] if incomes.exists() else 0
        total = incomes.aggregate(
            Sum('value'))['value__sum'] if incomes.exists() else 0

        date_filter = True

        # outcomes
        vendor_payments = Payment.filters_data(self.request,
                                               Payment.objects.all())
        vendor_payments_total = vendor_payments.aggregate(
            Sum('value'))['value__sum'] if vendor_payments.exists() else 0

        payrolls = Payroll.filters_data(self.request,
                                        Payroll.objects.filter(is_paid=True))
        payrolls_total = payrolls.aggregate(
            Sum('final_value'))['final_value__sum'] if payrolls.exists() else 0

        bills = Bill.filters_data(self.request,
                                  Bill.objects.filter(is_paid=True))
        bills_total = bills.aggregate(
            Sum('final_value'))['final_value__sum'] if bills.exists() else 0

        generic_expenses = GeneralExpense.filters_data(
            self.request, GeneralExpense.objects.filter(is_paid=True))
        generic_expenses_total = generic_expenses.aggregate(
            Sum('value'))['value__sum'] if generic_expenses.exists() else 0

        total_expenses = vendor_payments_total + bills_total + payrolls_total + generic_expenses_total
        expenses_query = sorted(chain(bills, vendor_payments, payrolls,
                                      generic_expenses),
                                key=attrgetter('report_date'))
        diff = round(total - total_expenses, 2)
        context.update(locals())
        return context
예제 #2
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        currency, date_filter = settings.CURRENCY, True
        back_url = reverse('analysis:homepage')
        search_filter, paid_filter = [True] * 2
        # get the incomes
        incomes = CostumerPayment.filters_data(
            self.request, CostumerPayment.objects.all()).order_by('date')
        total = incomes.aggregate(
            Sum('value'))['value__sum'] if incomes.exists() else 0

        # vendor_payments
        vendor_payments = Payment.filters_data(self.request,
                                               Payment.objects.all())
        vendor_payments_total = vendor_payments.aggregate(
            Sum('value'))['value__sum'] if vendor_payments.exists() else 0

        payrolls = Payroll.filters_data(self.request,
                                        Payroll.objects.filter(is_paid=True))
        payrolls_total = payrolls.aggregate(
            Sum('final_value'))['final_value__sum'] if payrolls.exists() else 0

        bills = Bill.filters_data(self.request,
                                  Bill.objects.filter(is_paid=True))
        bills_total = bills.aggregate(
            Sum('final_value'))['final_value__sum'] if bills.exists() else 0

        generic_expenses = GenericExpense.filters_data(
            self.request, GenericExpense.objects.all())
        generic_total = generic_expenses.aggregate(
            Sum('final_value'))['final_value__sum'] if generic_expenses.exists(
            ) else 0

        total_expenses = vendor_payments_total + bills_total + payrolls_total + generic_total
        expenses_query = sorted(chain(bills, vendor_payments, payrolls,
                                      generic_expenses),
                                key=attrgetter('date'))
        diff = round(total - total_expenses, 2)
        context.update(locals())
        return context
예제 #3
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        currency = settings.CURRENCY
        back_url = reverse('analysis:homepage')
        date_filter = True
        bills = Bill.filters_data(self.request, Bill.objects.all())
        payrolls = Payroll.filters_data(self.request, Payroll.objects.all())
        invoices = Invoice.filters_data(self.request, Invoice.objects.all())
        generic_expenses = GeneralExpense.filters_data(
            self.request, GeneralExpense.objects.all())
        generic_expenses_analysis = generic_expenses.values(
            'category__title').annotate(total=Sum('value')).order_by('-total')
        generic_expenses_analysis_per_month = generic_expenses.annotate(month=TruncMonth('date')).values('month'). \
            annotate(total=Sum('value')).values('month', 'total').order_by('month')

        total_bills = bills.aggregate(
            Sum('final_value'))['final_value__sum'] if bills else 0
        analysis_bills = bills.values('category__title').annotate(
            total=Sum('final_value')).order_by('-total')
        analysis_bills_per_month = bills.annotate(
            month=TruncMonth('date_expired')).values('month').annotate(
                total=Sum('final_value')).values('month',
                                                 'total').order_by('month')

        total_payroll = payrolls.aggregate(
            Sum('final_value'))['final_value__sum'] if payrolls else 0
        total_invoices = invoices.aggregate(
            Sum('final_value'))['final_value__sum'] if invoices else 0
        total_generic = generic_expenses.aggregate(
            Sum('value'))['value__sum'] if generic_expenses else 0
        total_expenses = total_bills + total_payroll + total_invoices + total_generic
        analysis_invoices = invoices.values('vendor__title').annotate(
            total=Sum('final_value')).order_by('-total')
        analysis_invoices_per_month = invoices.annotate(
            month=TruncMonth('date')).values('month').annotate(
                total=Sum('final_value')).values('month',
                                                 'total').order_by('month')
        payroll_analysis = payrolls.values('person__title').annotate(
            total=Sum('final_value')).order_by('-total')
        payroll_analysis_per_month = payrolls.annotate(month=TruncMonth('date_expired')).values('month').\
            annotate(total=Sum('final_value')).values('month', 'total').order_by('month')

        # get unique months
        months = sort_months([
            analysis_invoices_per_month, analysis_bills_per_month,
            payroll_analysis_per_month, generic_expenses_analysis_per_month
        ])

        result_per_months = []
        for month in months:
            data = {'month': month, 'total': 0}
            # data['invoice'] = ele['total'] for ele in analysis_invoices_per_month if ele['month'] == month else 0
            for ele in analysis_invoices_per_month:
                if ele['month'] == month:
                    data['invoice'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            for ele in analysis_bills_per_month:
                if ele['month'] == month:
                    data['bills'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            for ele in payroll_analysis_per_month:
                if ele['month'] == month:
                    data['payroll'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            for ele in generic_expenses_analysis_per_month:
                if ele['month'] == month:
                    data['generic'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            data['invoice'] = data['invoice'] if 'invoice' in data.keys(
            ) else 0
            data['bills'] = data['bills'] if 'bills' in data.keys() else 0
            data['payroll'] = data['payroll'] if 'payroll' in data.keys(
            ) else 0
            data['generic'] = data['generic'] if 'generic' in data.keys(
            ) else 0
            result_per_months.append(data)

        context.update(locals())
        return context
예제 #4
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        date_filter, currency = True, settings.CURRENCY

        # incomes
        incomes = Income.filters_data(self.request, Income.objects.all())
        incomes_per_month = incomes.annotate(
            month=TruncMonth('date_expired')).values('month').annotate(
                total=Sum('logistic_value')).values('month',
                                                    'total').order_by('month')
        incomes_per_month_table = incomes.annotate(month=TruncMonth('date_expired')).values('month')\
            .annotate(total_z=Sum('sum_z'),
                      total_pos=Sum('pos'),
                      total_order=Sum('order_cost'),
                      total_cash=Sum('cash'),
                      total=Sum('logistic_value')
                      ).order_by('month')
        total_z = incomes.aggregate(
            Sum('sum_z'))['sum_z__sum'] if incomes.exists() else 0
        total_pos = incomes.aggregate(
            Sum('pos'))['pos__sum'] if incomes.exists() else 0
        total_cash = total_z - total_pos
        total_order = incomes.aggregate(
            Sum('order_cost'))['order_cost__sum'] if incomes.exists() else 0
        incomes_total = incomes.aggregate(
            Sum('value'))['value__sum'] if incomes.exists() else 0

        # vendors data

        invoices = Invoice.filters_data(self.request, Invoice.objects.all())
        invoices_per_month = invoices.annotate(
            month=TruncMonth('date')).values('month').annotate(
                total=Sum('final_value')).values('month',
                                                 'total').order_by('month')
        invoices_total = invoices.aggregate(
            Sum('final_value'))['final_value__sum'] if invoices.exists() else 0
        vendors = invoices.values('vendor__title', 'vendor__balance').annotate(
            total=Sum('final_value')).order_by('-total')[:15]

        # payments
        payments = Payment.filters_data(self.request, Payment.objects.all())
        payments_total = payments.aggregate(
            Sum('value'))['value__sum'] if payments.exists() else 0
        vendors_remaining = invoices_total - payments_total

        # bills
        bills = Bill.filters_data(self.request, Bill.objects.all())
        bills_per_month = bills.annotate(
            month=TruncMonth('date_expired')).values('month').annotate(
                total=Sum('final_value')).values('month',
                                                 'total').order_by('month')
        bills_total = bills.aggregate(
            Sum('final_value'))['final_value__sum'] if bills.exists() else 0
        bills_paid_total = bills.filter(is_paid=True).aggregate(
            Sum('final_value'))['final_value__sum'] if bills.filter(
                is_paid=True).exists() else 0
        bills_per_bill = bills.values('category__title').annotate(total_pay=Sum('final_value'),
                                                                  paid_value=Sum('paid_value'))\
            .order_by('category__title')

        # payrolls
        payrolls = Payroll.filters_data(self.request, Payroll.objects.all())
        payroll_per_month = payrolls.annotate(
            month=TruncMonth('date_expired')).values('month').annotate(
                total=Sum('final_value')).values('month',
                                                 'total').order_by('month')
        payrolls_total = payrolls.aggregate(
            Sum('final_value'))['final_value__sum'] if payrolls.exists() else 0
        payrolls_paid_total = payrolls.filter(is_paid=True).aggregate(
            Sum('final_value'))['final_value__sum'] if payrolls.filter(
                is_paid=True).exists() else 0
        payroll_per_person = payrolls.values('person__title').annotate(total_pay=Sum('final_value'),
                                                                       paid_value=Sum('paid_value'))\
            .order_by('person__title')

        # general Expenses
        general_expenses = GeneralExpense.filters_data(
            self.request, GeneralExpense.objects.all())
        general_per_month = general_expenses.annotate(month=TruncMonth('date')).values('month')\
            .annotate(total=Sum('value')).values('month', 'total').order_by('month')
        general_total = general_expenses.aggregate(
            Sum('value'))['value__sum'] if general_expenses.exists() else 0
        general_paid = general_expenses.filter(is_paid=True)
        general_paid_total = general_paid.aggregate(
            Sum('value'))['value__sum'] if general_paid.exists() else 0
        expenses_per_category = general_expenses.values('category__title').annotate(total_pay=Sum('value'),
                                                                                    paid_value=Sum('paid_value'))\
            .order_by('category__title')

        # diffs
        totals = bills_total + payrolls_total + invoices_total + general_total
        paid_totals = bills_paid_total + payrolls_paid_total + payments_total + general_paid_total

        diff_paid = incomes_total - paid_totals
        diff_obligations = incomes_total - totals

        # chart analysis
        months = sort_months([
            incomes_per_month, invoices_per_month, payroll_per_month,
            bills_per_month, general_per_month
        ])

        result_per_months = []
        for month in months:
            data = {'month': month, 'total': 0}
            for ele in incomes_per_month:
                if ele['month'] == month:
                    data['income'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            for ele in invoices_per_month:
                if ele['month'] == month:
                    data['invoice'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            for ele in bills_per_month:
                if ele['month'] == month:
                    data['bills'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            for ele in payroll_per_month:
                if ele['month'] == month:
                    data['payroll'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            for ele in general_per_month:
                if ele['month'] == month:
                    data['generic'] = ele['total']
                    data['total'] = data['total'] + ele['total']
            data['invoice'] = data['invoice'] if 'invoice' in data.keys(
            ) else 0
            data['bills'] = data['bills'] if 'bills' in data.keys() else 0
            data['payroll'] = data['payroll'] if 'payroll' in data.keys(
            ) else 0
            data['generic'] = data['generic'] if 'generic' in data.keys(
            ) else 0
            result_per_months.append(data)

        context.update(locals())
        return context
예제 #5
0
def save_payroll(request):
	if request.user.is_authenticated() and request.user.admin:
		if request.is_ajax():
			user_id = int(request.POST['id'])
			user_object = User.objects.all().filter(id=user_id)
			split_date = request.POST['date1'].split("/")
			correct_date =split_date[2] + "-" + split_date[0]+"-"+split_date[1]
			split_date2 = request.POST['date2'].split("/")
			correct_date2 =split_date2[2] + "-" + split_date2[0]+"-"+split_date2[1]
			worklog_time_list = Worklog.objects.filter(user=user_id ,time__range=[correct_date, correct_date2])
			
			hours= float(request.POST['hours'])
			cheque_amount = float(request.POST['cheque_amount'])
			company_taxes = json.loads(request.POST.get('company_taxes'))
			employee_taxes = json.loads(request.POST.get('employee_taxes'))
			#company_taxes = request.POST.get('company_taxes')
			#print(company_taxes)
			#employee_taxes = request.POST.get('employee_taxes')
			#print(employee_taxes)
			new_Payroll = Payroll()
			new_Payroll.user = user_object[0]
			new_Payroll.from_time = correct_date
			new_Payroll.to_time = correct_date2
			new_Payroll.hours = hours
			new_Payroll.amount_cheque = cheque_amount
			new_Payroll.employee_taxes = employee_taxes
			new_Payroll.company_taxes = company_taxes
			new_Payroll.save()
					
					

		payroll = [Payroll.objects.get(id=new_Payroll.id)]
		all_objects =list(user_object) + list(payroll)
		data = serializers.serialize('json', all_objects)
		return JsonResponse(data, safe=False, content_type='application/json')
	else:
		return redirect("/home/")
	return render(request, "payroll/information.html", {})