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.')
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
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.''' )
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
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
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
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
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})
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
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
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
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
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
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
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
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
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.' )
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!")
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]))
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.')