def create(self, validated_data):
            new_value = validated_data.get('amount')

            # General Operation

            expend_obj = self.base_user_model().all_expenditure_records.all().filter(is_deleted=False)
            credit_obj = self.base_user_model().credit_funds.filter(is_deleted=False)

            all_credit_amounts = [obj.amount for obj in credit_obj]
            all_expend_amounts = [obj.amount for obj in expend_obj]

            total_pre_credit_amount = utils.sum_int_of_array(all_credit_amounts)
            total_pre_expend_amount = utils.sum_int_of_array(all_expend_amounts)

            full_balance = total_pre_credit_amount - (total_pre_expend_amount + new_value)

            if full_balance >= 0:
                obj = ExpenditureRecordModel.objects.create(
                    added_by=self.logged_in_user(),
                    base_user=self.base_user_model(),
                    uuid=uuid.uuid4(),
                    is_for_return=True,
                    **validated_data
                )
                return obj
            raise serializers.ValidationError(detail='Add: Credit Fund will be exceed! So you cannot add any more records. After authority add more Credit Fund in Database you can entry more records.')
Exemplo n.º 2
0
    def get_remaining_credit_fund_amount(self, date_from, date_to):

        expend_obj = self.get_expend_records().filter(
            Q(is_verified=True),
            Q(added__date__lte=date_to),
            Q(added__date__gte=date_from)
            )
        credit_obj = self.get_credit_funds().filter(
            Q(added__date__lte=date_to),
            Q(added__date__gte=date_from)
        )

        all_expend_obj_amounts = [obj.amount for obj in expend_obj]
        all_credit_obj_amounts = [obj.amount for obj in credit_obj]

        total_expend_amount = utils.sum_int_of_array(all_expend_obj_amounts)
        total_credit_amount = utils.sum_int_of_array(all_credit_obj_amounts)

        remaining_credit_fund_amount = total_credit_amount - total_expend_amount

        return remaining_credit_fund_amount

        all_expend_amounts = [obj.amount for obj in expend_obj_ref_or_ret]
        all_credit_amounts = [obj.amount for obj in credit_obj]

        total_expend_amount = utils.sum_int_of_array(all_expend_amounts)
        total_credit_amount = utils.sum_int_of_array(all_credit_amounts)

        todays_open_credit_fund = total_credit_amount - total_expend_amount

        return todays_open_credit_fund
Exemplo n.º 3
0
    def create(self, validated_data):
        new_value = validated_data.get('amount')

        # General Operation

        expend_obj = self.base_user_model().all_expenditure_records.all(
        ).filter(is_deleted=False)
        credit_obj = self.base_user_model().credit_funds.filter(
            is_deleted=False)

        all_credit_amounts = [obj.amount for obj in credit_obj]
        all_expend_amounts = [obj.amount for obj in expend_obj]

        total_pre_credit_amount = utils.sum_int_of_array(all_credit_amounts)
        total_pre_expend_amount = utils.sum_int_of_array(all_expend_amounts)

        full_balance = total_pre_credit_amount - (total_pre_expend_amount +
                                                  new_value)

        # Specific Operation

        expend_obj_ref = self.base_user_model().all_expenditure_records.all(
        ).filter(
            is_deleted=False,
            is_for_return=False,
            is_for_refund=True,
        )
        credit_obj_ref = self.base_user_model().credit_funds.filter(
            is_deleted=False,
            is_returnable=False,
            is_refundable=True,
        )

        all_credit_amounts_ref = [obj.amount for obj in credit_obj_ref]
        all_expend_amounts_ref = [obj.amount for obj in expend_obj_ref]

        total_pre_credit_amount_ref = utils.sum_int_of_array(
            all_credit_amounts_ref)
        total_pre_expend_amount_ref = utils.sum_int_of_array(
            all_expend_amounts_ref)

        ref_balance = total_pre_credit_amount_ref - (
            total_pre_expend_amount_ref + new_value)

        if full_balance >= 0 and ref_balance >= 0:
            obj = expend_models.ExpenditureRecordModel.objects.create(
                added_by=self.logged_in_user(),
                base_user=self.base_user_model(),
                uuid=uuid.uuid4(),
                is_for_refund=True,
                **validated_data)
            loan_models.ExpenditureRecordOnLoanModel.objects.create(
                base_user=self.base_user_model(), expenditure_record_model=obj)
            return obj
        raise serializers.ValidationError(
            detail='''Credit Loan will be exceed! So you cannot add 
        any more records. After authority add more Credit Loan in Database you can entry more records.'''
        )
Exemplo n.º 4
0
    def get_remaining_credit_fund_amount(self):

        expend_obj = self.get_expend_records().filter(Q(is_verified=True))
        credit_obj = self.get_credit_funds().filter()

        all_expend_obj_amounts = [obj.amount for obj in expend_obj]
        all_credit_obj_amounts = [obj.amount for obj in credit_obj]

        total_expend_amount = utils.sum_int_of_array(all_expend_obj_amounts)
        total_credit_amount = utils.sum_int_of_array(all_credit_obj_amounts)

        remaining_credit_fund_amount = total_credit_amount - total_expend_amount

        return remaining_credit_fund_amount
Exemplo n.º 5
0
 def get(self, request, *args, **kwargs):
     items = self.filter_queryset(queryset=self.get_queryset())
     row_values = [[obj.__getattribute__(name) for name in self.attributes]
                   for obj in items]
     amounts = [obj.amount for obj in items]
     context = {
         'headings':
         self.headings,
         'row_values':
         row_values,
         'attributes':
         self.attributes,
         'pdf_name':
         f'Credit_Report_{self.today}',
         'company':
         CompanyInfoModel.objects.get(base_user=items.first().base_user),
         'sum':
         utils.sum_int_of_array(amounts),
         'date':
         datetime.datetime.now(),
         'page_unique_id':
         uuid.uuid4()
     }
     response = utils.django_render_to_pdf(
         'credit_report_pdf_template.html', context)
     return response
Exemplo n.º 6
0
    def get_last_remaining_credit_fund_amount(self):

        expend_obj = self.get_expend_records().filter(
            Q(is_verified=True), Q(added__date__lt=datetime.date.today()))
        credit_obj = self.get_credit_funds().filter(
            Q(added__date__lt=datetime.date.today()))

        all_expend_obj_amounts = [obj.amount for obj in expend_obj]
        all_credit_obj_amounts = [obj.amount for obj in credit_obj]

        total_expend_amount = utils.sum_int_of_array(all_expend_obj_amounts)
        total_credit_amount = utils.sum_int_of_array(all_credit_obj_amounts)

        last_remaining_credit_fund_amount = total_credit_amount - total_expend_amount

        return last_remaining_credit_fund_amount
Exemplo n.º 7
0
    def get_today_credit_fund(self):
        expend_obj_ref_or_ret = self.get_expend_records().filter(
            Q(is_verified=True), Q(added__date=datetime.date.today()),
            Q(is_for_refund=True) | Q(is_for_return=True))

        credit_obj = self.get_credit_funds().filter(
            Q(added__date=datetime.date.today()))

        all_expend_amounts = [obj.amount for obj in expend_obj_ref_or_ret]
        all_credit_amounts = [obj.amount for obj in credit_obj]

        total_expend_amount = utils.sum_int_of_array(all_expend_amounts)
        total_credit_amount = utils.sum_int_of_array(all_credit_amounts)

        today_credit_fund = total_credit_amount - total_expend_amount

        return today_credit_fund
 def get_total(obj):
     expend = ExpenditureRecordModel.objects.filter(
         is_deleted=False,
         is_verified=True,
         expend_heading=obj
     )
     total = utils.sum_int_of_array([data.amount for data in expend])
     return total
 def get_total_this_year(obj):
     expend = ExpenditureRecordModel.objects.filter(
         is_deleted=False,
         is_verified=True,
         expend_heading=obj,
         expend_date__year=datetime.date.today().year
     )
     total = utils.sum_int_of_array([data.amount for data in expend])
     return total
Exemplo n.º 10
0
    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        all_amounts = []

        for instance in queryset:
            all_amounts.append(instance.amount)

        total = utils.sum_int_of_array(all_amounts)

        return Response({'total_fund_amount': total})
Exemplo n.º 11
0
    def get_total_credit_fund_amount(self):

        # Todo: Check if this algorithm has a mathmetical error in total credit amount

        expend_obj_ref_or_ret = self.get_expend_records().filter(
            Q(is_verified=True),
            Q(is_for_refund=True) | Q(is_for_return=True))

        credit_obj = self.get_credit_funds().filter(
            Q(fund_added__year=datetime.datetime.now().year))
        all_expend_amounts = [obj.amount for obj in expend_obj_ref_or_ret]
        all_credit_amounts = [obj.amount for obj in credit_obj]

        total_expend_amount = utils.sum_int_of_array(all_expend_amounts)
        total_credit_amount = utils.sum_int_of_array(all_credit_amounts)

        total_credit_fund_amount = total_credit_amount - total_expend_amount

        return total_credit_fund_amount
Exemplo n.º 12
0
    def get_this_year_total_unauthorized_expend_amount(self):
        unauthorized_expend_records = self.get_expend_records().filter(
            Q(expend_date__year=datetime.datetime.now().year),
            Q(is_verified=False))
        unauthorized_expend_records_amounts = [
            obj.amount for obj in unauthorized_expend_records
        ]
        this_year_total_unauthorized_expend_amount = utils.sum_int_of_array(
            unauthorized_expend_records_amounts)

        return this_year_total_unauthorized_expend_amount
Exemplo n.º 13
0
    def get_today_debit_amount(self):
        expend_obj_non_ref_and_non_ret = self.get_expend_records().filter(
            Q(is_verified=True), Q(added__date=datetime.date.today()),
            Q(is_for_refund=False), Q(is_for_return=False))
        all_expend_amounts = [
            obj.amount for obj in expend_obj_non_ref_and_non_ret
        ]

        todays_open_debit_amount = utils.sum_int_of_array(all_expend_amounts)

        return todays_open_debit_amount
Exemplo n.º 14
0
    def get_total_expend_amount(self):
        expend_obj_non_ref_and_non_ret = self.get_expend_records().filter(
            Q(is_verified=True), Q(is_for_refund=False),
            Q(is_for_return=False))
        all_expend_amounts = [
            obj.amount for obj in expend_obj_non_ref_and_non_ret
        ]

        today_total_expend_amount = utils.sum_int_of_array(all_expend_amounts)

        return today_total_expend_amount
Exemplo n.º 15
0
    def get_total_credit_amount(self):  # OK

        # Todo: Check if this algorithm has a mathmetical error in total credit amount

        expend_obj_ref_or_ret = self.get_expend_records().filter(
            Q(is_verified=True),
            Q(is_for_refund=True) | Q(is_for_return=True))

        credit_obj = self.get_credit_funds()
        all_expend_amounts = [obj.amount for obj in expend_obj_ref_or_ret]
        all_credit_amounts = [obj.amount for obj in credit_obj]

        this_year_total_expend_amount = utils.sum_int_of_array(
            all_expend_amounts)
        this_year_total_credit_amount = utils.sum_int_of_array(
            all_credit_amounts)

        today_total_credit_fund_amount = this_year_total_credit_amount - this_year_total_expend_amount
        print(today_total_credit_fund_amount)

        return today_total_credit_fund_amount
Exemplo n.º 16
0
    def get_total_unauthorized_expend_amount(self):

        unauthorized_expend_records = self.get_expend_records().filter(
            Q(is_verified=False))

        unauthorized_expend_records_amounts = [
            obj.amount for obj in unauthorized_expend_records
        ]
        total_unauthorized_expend_amount = utils.sum_int_of_array(
            unauthorized_expend_records_amounts)

        return total_unauthorized_expend_amount
Exemplo n.º 17
0
    def get_this_month_total_expend_amount(self):
        expend_obj_non_ref_and_non_ret = self.get_expend_records().filter(
            Q(is_verified=True),
            Q(expend_date__year=datetime.datetime.now().year),
            Q(expend_date__month=datetime.datetime.now().month),
            Q(is_for_refund=False), Q(is_for_return=False))
        all_expend_amounts = [
            obj.amount for obj in expend_obj_non_ref_and_non_ret
        ]

        this_month_total_expend_amount = utils.sum_int_of_array(
            all_expend_amounts)

        return this_month_total_expend_amount
Exemplo n.º 18
0
    def get_this_year_total_expend_amount(self):

        # Todo: Check if this algorithm has a mathmetical error in total credit amount

        expend_obj_non_ref_and_non_ret = self.get_expend_records().filter(
            Q(is_verified=True),
            Q(expend_date__year=datetime.datetime.now().year),
            Q(is_for_refund=False), Q(is_for_return=False))

        all_expend_amounts = [
            obj.amount for obj in expend_obj_non_ref_and_non_ret
        ]

        this_year_total_expend_amount = utils.sum_int_of_array(
            all_expend_amounts)

        return this_year_total_expend_amount
Exemplo n.º 19
0
    def update(self, instance, validated_data):

        if instance.is_verified is False and instance.is_verified_once is False and validated_data.get(
                'is_verified') is True:
            instance.is_verified_once = True
            instance.is_verified = validated_data.get('is_verified',
                                                      instance.is_verified)
            instance.save()
            return instance

        # Todo: this will wrap in else block
        if instance.is_deleted is False and validated_data.get(
                'is_deleted') is True:
            instance.is_deleted = True
            # Todo: add history with is_deleted = True
            expend_models.ExpenditureRecordHistoryModel.objects.create(
                action_by=self.logged_in_user(),
                base_user=self.base_user_model(),
                related_records=instance,
                old_expend_heading=instance.expend_heading,
                new_expend_heading=instance.expend_heading,
                old_expend_by=instance.expend_by,
                new_expend_by=instance.expend_by,
                old_description=instance.description,
                new_description=instance.description,
                old_amount=instance.amount,
                new_amount=instance.amount,
                old_is_verified=instance.is_verified,
                new_is_verified=instance.is_verified,
                old_expend_date=instance.expend_date,
                new_expend_date=instance.expend_date,
                old_uuid=instance.uuid,
                is_updated=False,
                is_deleted=True,
                is_restored=False,
                description=validated_data.get('extra_description'),
            )
            instance.save()
            return instance
        if instance.is_deleted is True and validated_data.get(
                'is_deleted') is False:
            # Todo: add history with is_restore = True
            raw_value = instance.amount

            # General Operation

            expend_obj = self.base_user_model().all_expenditure_records.all(
            ).filter(is_deleted=False)
            credit_obj = self.base_user_model().credit_funds.filter(
                is_deleted=False)

            all_credit_amounts = [obj.amount for obj in credit_obj]
            all_expend_amounts = [obj.amount for obj in expend_obj]

            total_pre_credit_amount = utils.sum_int_of_array(
                all_credit_amounts)
            total_pre_expend_amount = utils.sum_int_of_array(
                all_expend_amounts)

            full_balance = total_pre_credit_amount - (total_pre_expend_amount +
                                                      raw_value)

            # Specific Operation

            expend_obj_ref = self.base_user_model(
            ).all_expenditure_records.all().filter(
                is_deleted=False,
                is_for_return=False,
                is_for_refund=True,
            )
            credit_obj_ref = self.base_user_model().credit_funds.filter(
                is_deleted=False,
                is_returnable=False,
                is_refundable=True,
            )

            all_credit_amounts_ref = [obj.amount for obj in credit_obj_ref]
            all_expend_amounts_ref = [obj.amount for obj in expend_obj_ref]

            total_pre_credit_amount_ref = utils.sum_int_of_array(
                all_credit_amounts_ref)
            total_pre_expend_amount_ref = utils.sum_int_of_array(
                all_expend_amounts_ref)

            ref_balance = total_pre_credit_amount_ref - (
                total_pre_expend_amount_ref + raw_value)

            if full_balance >= 0 and ref_balance >= 0:
                instance.is_deleted = False
                expend_models.ExpenditureRecordHistoryModel.objects.create(
                    action_by=self.logged_in_user(),
                    base_user=self.base_user_model(),
                    related_records=instance,
                    old_expend_heading=instance.expend_heading,
                    new_expend_heading=instance.expend_heading,
                    old_expend_by=instance.expend_by,
                    new_expend_by=instance.expend_by,
                    old_description=instance.description,
                    new_description=instance.description,
                    old_amount=instance.amount,
                    new_amount=instance.amount,
                    old_is_verified=instance.is_verified,
                    new_is_verified=instance.is_verified,
                    old_expend_date=instance.expend_date,
                    new_expend_date=instance.expend_date,
                    old_uuid=instance.uuid,
                    is_updated=False,
                    is_deleted=False,
                    is_restored=True,
                    description=validated_data.get('extra_description'),
                )
                instance.save()
                return instance
            raise serializers.ValidationError(
                detail=
                'Credit Fund will be exceede! So you cannot add any more records. After authority add more Credit Fund in Database you can entry more records.'
            )
        if instance.is_verified is True and validated_data.get(
                'is_verified') is False:
            # Todo: add history with is_updated = True
            expend_models.ExpenditureRecordHistoryModel.objects.create(
                action_by=self.logged_in_user(),
                base_user=self.base_user_model(),
                related_records=instance,
                old_expend_heading=instance.expend_heading,
                new_expend_heading=validated_data.get('expend_heading'),
                old_expend_by=instance.expend_by,
                new_expend_by=validated_data.get('expend_by'),
                old_description=instance.description,
                new_description=validated_data.get('description'),
                old_amount=instance.amount,
                new_amount=validated_data.get('amount'),
                old_is_verified=instance.is_verified,
                new_is_verified=validated_data.get('is_verified'),
                old_expend_date=instance.expend_date,
                new_expend_date=validated_data.get('expend_date'),
                old_uuid=instance.uuid,
                is_updated=True,
                is_deleted=False,
                is_restored=False,
                description=validated_data.get('extra_description'),
            )
            instance.expend_heading = validated_data.get(
                'expend_heading', instance.expend_heading)
            instance.expend_by = validated_data.get('expend_by',
                                                    instance.expend_by)
            instance.description = validated_data.get('description',
                                                      instance.description)
            instance.amount = validated_data.get('amount', instance.amount)
            instance.expend_date = validated_data.get('expend_date',
                                                      instance.expend_date)
            instance.is_verified = validated_data.get('is_verified',
                                                      instance.is_verified)

            instance.save()

            return instance
        raw_value = instance.amount
        new_value = validated_data.get('amount', raw_value)

        # General Operation

        expend_obj = self.base_user_model().all_expenditure_records.all(
        ).filter(is_deleted=False)
        credit_obj = self.base_user_model().credit_funds.filter(
            is_deleted=False)

        all_credit_amounts = [obj.amount for obj in credit_obj]
        all_expend_amounts = [obj.amount for obj in expend_obj]

        total_pre_credit_amount = utils.sum_int_of_array(all_credit_amounts)
        total_pre_expend_amount = utils.sum_int_of_array(all_expend_amounts)

        full_balance = total_pre_credit_amount - (total_pre_expend_amount -
                                                  raw_value + new_value)

        # Specific Operation

        expend_obj_ref = self.base_user_model().all_expenditure_records.all(
        ).filter(
            is_deleted=False,
            is_for_return=False,
            is_for_refund=True,
        )
        credit_obj_ref = self.base_user_model().credit_funds.filter(
            is_deleted=False,
            is_returnable=False,
            is_refundable=True,
        )

        all_credit_amounts_ref = [obj.amount for obj in credit_obj_ref]
        all_expend_amounts_ref = [obj.amount for obj in expend_obj_ref]

        total_pre_credit_amount_ref = utils.sum_int_of_array(
            all_credit_amounts_ref)
        total_pre_expend_amount_ref = utils.sum_int_of_array(
            all_expend_amounts_ref)

        ref_balance = total_pre_credit_amount_ref - (
            total_pre_expend_amount_ref - raw_value + new_value)

        if full_balance >= 0 and ref_balance >= 0:
            # Todo: add history with is_updated = True
            expend_models.ExpenditureRecordHistoryModel.objects.create(
                action_by=self.logged_in_user(),
                base_user=self.base_user_model(),
                related_records=instance,
                old_expend_heading=instance.expend_heading,
                new_expend_heading=validated_data.get('expend_heading'),
                old_expend_by=instance.expend_by,
                new_expend_by=validated_data.get('expend_by'),
                old_description=instance.description,
                new_description=validated_data.get('description'),
                old_amount=instance.amount,
                new_amount=validated_data.get('amount'),
                old_is_verified=instance.is_verified,
                new_is_verified=validated_data.get('is_verified'),
                old_expend_date=instance.expend_date,
                new_expend_date=validated_data.get('expend_date'),
                old_uuid=instance.uuid,
                is_updated=True,
                is_deleted=False,
                is_restored=False,
                description=validated_data.get('extra_description'),
            )
            instance.expend_heading = validated_data.get(
                'expend_heading', instance.expend_heading)
            instance.expend_by = validated_data.get('expend_by',
                                                    instance.expend_by)
            instance.description = validated_data.get('description',
                                                      instance.description)
            instance.amount = validated_data.get('amount', instance.amount)
            instance.expend_date = validated_data.get('expend_date',
                                                      instance.expend_date)
            instance.is_verified = validated_data.get('is_verified',
                                                      instance.is_verified)

            instance.save()

            return instance
        raise serializers.ValidationError(
            detail=
            'Credit Fund will be exceede! So you cannot add any more records. After authority add more Credit Fund in Database you can entry more records.'
        )
Exemplo n.º 20
0
    def update(self, instance, validated_data):

        if instance.is_deleted is True and validated_data.get(
                'is_deleted') is False:
            # Todo: add history with is_restored = True
            credit_models.CreditFundHistoryModel.objects.create(
                action_by=self.logged_in_user(),
                base_user=self.base_user_model(),
                credit_fund=instance,
                is_deleted=False,
                is_updated=False,
                is_restored=True,
                old_source=instance.source,
                new_source=validated_data.get('source'),
                old_description=instance.description,
                new_description=validated_data.get('description'),
                old_fund_added=instance.fund_added,
                new_fund_added=validated_data.get('fund_added'),
                old_amount=instance.amount,
                new_amount=validated_data.get('amount'),
                description=validated_data.get('extra_description'),
                old_uuid=instance.uuid,
            )
            instance.is_deleted = False
            instance.save()
            return instance

        if instance.is_deleted is False and validated_data.get(
                'is_deleted') is True:
            # Todo: add history with is_deleted = True
            raw_value = instance.amount

            # General Operation

            expend_obj = self.base_user_model().all_expenditure_records.all(
            ).filter(is_deleted=False)
            credit_obj = self.base_user_model().credit_funds.filter(
                is_deleted=False)

            all_credit_amounts = [obj.amount for obj in credit_obj]
            all_expend_amounts = [obj.amount for obj in expend_obj]

            total_pre_credit_amount = utils.sum_int_of_array(
                all_credit_amounts)
            total_pre_expend_amount = utils.sum_int_of_array(
                all_expend_amounts)

            full_balance = (total_pre_credit_amount -
                            raw_value) - total_pre_expend_amount

            # Specific Operation

            expend_obj_ref = self.base_user_model(
            ).all_expenditure_records.all().filter(
                is_deleted=False,
                is_for_return=False,
                is_for_refund=True,
            )
            credit_obj_ref = self.base_user_model().credit_funds.filter(
                is_deleted=False,
                is_returnable=False,
                is_refundable=True,
            )

            all_credit_amounts_ref = [obj.amount for obj in credit_obj_ref]
            all_expend_amounts_ref = [obj.amount for obj in expend_obj_ref]

            total_pre_credit_amount_ref = utils.sum_int_of_array(
                all_credit_amounts_ref)
            total_pre_expend_amount_ref = utils.sum_int_of_array(
                all_expend_amounts_ref)

            ref_balance = (total_pre_credit_amount_ref -
                           raw_value) - total_pre_expend_amount_ref

            if full_balance >= 0 and ref_balance >= 0:
                credit_models.CreditFundHistoryModel.objects.create(
                    action_by=self.logged_in_user(),
                    base_user=self.base_user_model(),
                    credit_fund=instance,
                    is_deleted=True,
                    is_updated=False,
                    is_restored=False,
                    old_source=instance.source,
                    new_source=validated_data.get('source'),
                    old_description=instance.description,
                    new_description=validated_data.get('description'),
                    old_fund_added=instance.fund_added,
                    new_fund_added=validated_data.get('fund_added'),
                    old_amount=instance.amount,
                    new_amount=validated_data.get('amount'),
                    description=validated_data.get('extra_description'),
                    old_uuid=instance.uuid,
                )
                instance.is_deleted = True
                instance.save()

                if instance:
                    return instance
                raise serializers.ValidationError("Not found!")
            raise serializers.ValidationError(
                "Credits will be lower than your debits!")
        raw_value = instance.amount
        new_value = validated_data.get('amount', raw_value)

        # General Operation

        expend_obj = self.base_user_model().all_expenditure_records.all(
        ).filter(is_deleted=False)
        credit_obj = self.base_user_model().credit_funds.filter(
            is_deleted=False)

        all_credit_amounts = [obj.amount for obj in credit_obj]
        all_expend_amounts = [obj.amount for obj in expend_obj]

        total_pre_credit_amount = utils.sum_int_of_array(all_credit_amounts)
        total_pre_expend_amount = utils.sum_int_of_array(all_expend_amounts)

        full_balance = (total_pre_credit_amount - raw_value +
                        new_value) - total_pre_expend_amount

        # Specific Operation

        expend_obj_ref = self.base_user_model().all_expenditure_records.all(
        ).filter(
            is_deleted=False,
            is_for_return=False,
            is_for_refund=True,
        )
        credit_obj_ref = self.base_user_model().credit_funds.filter(
            is_deleted=False,
            is_returnable=False,
            is_refundable=True,
        )

        all_credit_amounts_ref = [obj.amount for obj in credit_obj_ref]
        all_expend_amounts_ref = [obj.amount for obj in expend_obj_ref]

        total_pre_credit_amount_ref = utils.sum_int_of_array(
            all_credit_amounts_ref)
        total_pre_expend_amount_ref = utils.sum_int_of_array(
            all_expend_amounts_ref)

        ref_balance = (total_pre_credit_amount_ref - raw_value +
                       new_value) - total_pre_expend_amount_ref

        if full_balance >= 0 and ref_balance >= 0:
            # Todo: add history with is_updated = True
            credit_models.CreditFundHistoryModel.objects.create(
                action_by=self.logged_in_user(),
                base_user=self.base_user_model(),
                credit_fund=instance,
                is_deleted=False,
                is_updated=True,
                is_restored=False,
                old_source=instance.source,
                new_source=validated_data.get('source'),
                old_description=instance.description,
                new_description=validated_data.get('description'),
                old_fund_added=instance.fund_added,
                new_fund_added=validated_data.get('fund_added'),
                old_amount=instance.amount,
                new_amount=validated_data.get('amount'),
                description=validated_data.get('extra_description'),
                old_uuid=instance.uuid,
            )
            instance.source = validated_data.get('source', instance.source)
            instance.description = validated_data.get('description',
                                                      instance.description)
            instance.amount = validated_data.get('amount', instance.amount)
            instance.fund_added = validated_data.get('fund_added',
                                                     instance.fund_added)

            instance.save()

            return instance

        raise serializers.ValidationError(
            detail="Total credit will be lower than total debit!")
Exemplo n.º 21
0
def debug2():
    month = '2'
    month = int(month)
    days = utils.get_all_days_of_a_month(datetime.date.today().year, month)
    data = [
        InsightCreditDebitMonthlyModel(
            days[n],
            on_date_filter_balance({'fund_added__year__lt': 2019},
                                   {'expend_date__year__lt': 2019},
                                   base_user=1) +
            utils.sum_int_of_array([
                obj.amount
                for obj in credit.filter(fund_added__lte=datetime.date(
                    year=datetime.date.today().year, month=month, day=(n + 1)))
            ]) - utils.sum_int_of_array([
                obj.amount for obj in expenditure.filter(
                    Q(is_for_return=True) | Q(is_for_refund=True),
                    expend_date__lte=datetime.date(
                        year=datetime.date.today().year,
                        month=month,
                        day=(n + 1)))
            ]),
            utils.sum_int_of_array([
                obj.amount
                for obj in expenditure.filter(expend_date__lte=datetime.date(
                    year=datetime.date.today().year, month=month, day=(n + 1)),
                                              is_for_return=False,
                                              is_for_refund=False)
            ]),
            utils.sum_int_of_array([
                obj.amount
                for obj in credit.filter(fund_added__lte=datetime.date(
                    year=datetime.date.today().year, month=month, day=(n + 1)))
            ]) - utils.sum_int_of_array([
                obj.amount
                for obj in expenditure.filter(expend_date__lte=datetime.date(
                    year=datetime.date.today().year, month=month, day=(n + 1)))
            ]),
            utils.sum_int_of_array([
                obj.amount for obj in credit.filter(fund_added=datetime.date(
                    year=datetime.date.today().year, month=month, day=(n + 1)))
            ]) - utils.sum_int_of_array([
                obj.amount for obj in expenditure.filter(
                    Q(is_for_return=True) | Q(is_for_refund=True),
                    expend_date=datetime.date(year=datetime.date.today().year,
                                              month=month,
                                              day=(n + 1)))
            ]),
            utils.sum_int_of_array([
                obj.amount
                for obj in expenditure.filter(expend_date=datetime.date(
                    year=datetime.date.today().year, month=month, day=(n + 1)),
                                              is_for_return=False,
                                              is_for_refund=False)
            ])) for n in range(len(days))
    ]
    pprint.pprint(
        pprint.pformat([{
            'day': obj.day,
            'credit': obj.credit,
            'debit': obj.debit,
            'credit_individual': obj.credit_individual,
            'balance': obj.balance,
            'debit_individual': obj.debit_individual
        } for obj in data]))
Exemplo n.º 22
0
        def update(self, instance, validated_data):

            if instance.is_verified is False and instance.is_verified_once is False and validated_data.get('is_verified') is True:
                instance.is_verified_once = True
                instance.is_verified = validated_data.get('is_verified', instance.is_verified)
                instance.save()
                return instance

            # Todo: this will wrap in else block
            if instance.is_deleted is False and validated_data.get('is_deleted') is True:

                expend_obj_ret = self.base_user_model().all_expenditure_records.all().filter(
                    is_deleted=False,
                    is_for_return=True,
                    is_for_refund=False,
                    )
                credit_obj_ret = self.base_user_model().credit_funds.filter(
                    is_deleted=False,
                    is_returnable=True,
                    is_refundable=False,
                    )

                all_credit_amounts_ret = [obj.amount for obj in credit_obj_ret]
                all_expend_amounts_ret = [obj.amount for obj in expend_obj_ret]

                total_pre_credit_amount_ret = utils.sum_int_of_array(all_credit_amounts_ret)
                total_pre_expend_amount_ret = utils.sum_int_of_array(all_expend_amounts_ret)

                balance_after_delete = total_pre_expend_amount_ret - total_pre_credit_amount_ret - instance.amount
                if balance_after_delete >= 0:
                    instance.is_deleted = True
                    # Todo: add history with is_deleted = True
                    ExpenditureRecordHistoryModel.objects.create(
                        action_by=self.logged_in_user(),
                        base_user=self.base_user_model(),
                        related_records=instance,
                        old_expend_heading=instance.expend_heading,
                        new_expend_heading=instance.expend_heading,
                        old_expend_by=instance.expend_by,
                        new_expend_by=instance.expend_by,
                        old_description=instance.description,
                        new_description=instance.description,
                        old_amount=instance.amount,
                        new_amount=instance.amount,
                        old_is_verified=instance.is_verified,
                        new_is_verified=instance.is_verified,
                        old_expend_date=instance.expend_date,
                        new_expend_date=instance.expend_date,
                        old_uuid=instance.uuid,
                        is_updated=False,
                        is_deleted=True,
                        is_restored=False,
                        description=validated_data.get('extra_description'),
                    )
                    instance.save()
                    return instance
                else:
                    raise serializers.ValidationError("Delete: Retrurn cash will be higher than given loan.")
            if instance.is_deleted is True and validated_data.get('is_deleted') is False:
                # Todo: add history with is_restore = True
                raw_amount = instance.amount

                expend_obj = self.base_user_model().all_expenditure_records.all().filter(is_deleted=False)
                credit_obj = self.base_user_model().credit_funds.filter(is_deleted=False)

                all_credit_amounts = [obj.amount for obj in credit_obj]
                all_expend_amounts = [obj.amount for obj in expend_obj]

                total_pre_credit_amount = utils.sum_int_of_array(all_credit_amounts)
                total_pre_expend_amount = utils.sum_int_of_array(all_expend_amounts)

                full_balance = total_pre_credit_amount - (total_pre_expend_amount + raw_amount)

                if full_balance >= 0:
                    instance.is_deleted = False
                    ExpenditureRecordHistoryModel.objects.create(
                        action_by=self.logged_in_user(),
                        base_user=self.base_user_model(),
                        related_records=instance,
                        old_expend_heading=instance.expend_heading,
                        new_expend_heading=instance.expend_heading,
                        old_expend_by=instance.expend_by,
                        new_expend_by=instance.expend_by,
                        old_description=instance.description,
                        new_description=instance.description,
                        old_amount=instance.amount,
                        new_amount=instance.amount,
                        old_is_verified=instance.is_verified,
                        new_is_verified=instance.is_verified,
                        old_expend_date=instance.expend_date,
                        new_expend_date=instance.expend_date,
                        old_uuid=instance.uuid,
                        is_updated=False,
                        is_deleted=False,
                        is_restored=True,
                        description=validated_data.get('extra_description'),
                    )
                    instance.save()
                    return instance
                raise serializers.ValidationError(
                    detail='Restore: Credit Fund will be exceede! So you cannot add any more records. After authority add more Credit Fund in Database you can entry more records.')

            raw_amount = instance.amount
            new_amount = validated_data.get('amount', instance.amount)

            expend_obj_ret = self.base_user_model().all_expenditure_records.all().filter(
                is_deleted=False,
                is_for_return=True,
                is_for_refund=False
                )
            credit_obj_ret = self.base_user_model().credit_funds.filter(
                is_deleted=False,
                is_returnable=True,
                is_refundable=False
                )

            all_credit_amounts_ret = [obj.amount for obj in credit_obj_ret]
            all_expend_amounts_ret = [obj.amount for obj in expend_obj_ret]

            total_pre_credit_amount_ret = utils.sum_int_of_array(all_credit_amounts_ret)
            total_pre_expend_amount_ret = utils.sum_int_of_array(all_expend_amounts_ret)

            ret_balance = (total_pre_expend_amount_ret - raw_amount + new_amount) - total_pre_credit_amount_ret

            expend_obj = self.base_user_model().all_expenditure_records.all().filter(is_deleted=False)
            credit_obj = self.base_user_model().credit_funds.filter(is_deleted=False)

            all_credit_amounts = [obj.amount for obj in credit_obj]
            all_expend_amounts = [obj.amount for obj in expend_obj]

            total_pre_credit_amount = utils.sum_int_of_array(all_credit_amounts)
            total_pre_expend_amount = utils.sum_int_of_array(all_expend_amounts)

            full_balance = total_pre_credit_amount - (total_pre_expend_amount - raw_amount + new_amount)
            print(full_balance, ret_balance)

            if full_balance >= 0 and ret_balance >=0:
                # Todo: add history with is_updated = True
                ExpenditureRecordHistoryModel.objects.create(
                    action_by=self.logged_in_user(),
                    base_user=self.base_user_model(),
                    related_records=instance,
                    old_expend_heading=instance.expend_heading,
                    new_expend_heading=validated_data.get('expend_heading'),
                    old_expend_by=instance.expend_by,
                    new_expend_by=validated_data.get('expend_by'),
                    old_description=instance.description,
                    new_description=validated_data.get('description'),
                    old_amount=instance.amount,
                    new_amount=validated_data.get('amount'),
                    old_is_verified=instance.is_verified,
                    new_is_verified=validated_data.get('is_verified'),
                    old_expend_date=instance.expend_date,
                    new_expend_date=validated_data.get('expend_date'),
                    old_uuid=instance.uuid,
                    is_updated=True,
                    is_deleted=False,
                    is_restored=False,
                    description=validated_data.get('extra_description'),
                )
                instance.expend_heading = validated_data.get('expend_heading', instance.expend_heading)
                instance.expend_by = validated_data.get('expend_by', instance.expend_by)
                instance.description = validated_data.get('description', instance.description)
                instance.amount = validated_data.get('amount', instance.amount)
                instance.expend_date = validated_data.get('expend_date', instance.expend_date)
                instance.is_verified = validated_data.get('is_verified', instance.is_verified)

                instance.save()

                return instance
            raise serializers.ValidationError(detail='Update: Credit Fund will be exceede! So you cannot add any more records. After authority add more Credit Fund in Database you can entry more records.')