def create(self, validated_data): rows_data = validated_data.pop('rows') sales = Sales.objects.create(**validated_data) for row_data in rows_data: data = dict(row_data) row = SalesRow() row.sn = data.get('sn') row.item = data.get('item') row.unit = data.get('unit','Pieces') row.quantity = data.get('quantity',0.0) row.is_vatable = data.get('is_vatable',True) row.rate = data.get('rate', 0.0) row.discount = data.get('discount',0.0) row.sales = sales row.save() iv_account, status = InventoryAccount.objects.get_or_create( name=row.item.name, site_id=DEFAULT_PROJECT_ID, account_no=row.item.account.account_no) set_transactions(row, row.sales.date, ['cr', iv_account, row.quantity]) if not row.is_vatable: row_amount = row.quantity*row.rate-row.discount else: row_amount = row.quantity*row.rate*1.13-row.discount set_ledger_transactions(row, row.sales.date, ['cr', row.item.ledger, row_amount]) if sales.credit: set_ledger_transactions(row, row.sales.date, ['dr', sales.party.account, row_amount]) else: set_ledger_transactions(row, row.sales.date, ['dr', Account.objects.get_or_create(name='Cash')[0], row_amount]) return sales
def update(self, instance, validated_data): rows_data = validated_data.pop('rows') demand = Demand.objects.get(pk=instance.id) demand.date = validated_data.pop('date',None) demand.purpose = validated_data.pop('purpose','') demand.site = validated_data.pop('site') demand.save() for row_data in rows_data: data = dict(row_data) id = data.get('id', '') if id: row = DemandRow.objects.get(pk=id) else: row = DemandRow() row.item = data.get('item') row.unit = data.get('unit', 'Pieces') row.purpose = data.get('purpose', '') row.status = data.get('status', False) row.quantity = data.get('quantity', 0.0) row.fulfilled_quantity = data.get('fulfilled_quantity', 0) row.demand = demand row.save() if row.fulfilled_quantity: set_transactions(row, row.demand.date, ['dr', InventoryAccount.objects.get_or_create( site=row.demand.site, name=row.item.name, account_no=row.item.account.account_no)[0], row.fulfilled_quantity]) set_transactions(row, row.demand.date, ['cr', row.item.account, row.fulfilled_quantity]) return demand
def save_entry_report(request): params = json.loads(request.body) dct = {'rows': {}} if params.get('type') == 'handover': source = Handover.objects.get(id=params.get('source_id')) else: source = PurchaseOrder.objects.get(id=params.get('source_id')) object_values = { 'entry_report_no': empty_to_none(params.get('entry_report_no')), 'fiscal_year': request.setting.fiscal_year, 'source': source } if params.get('id'): obj = EntryReport.objects.get(id=params.get('id')) else: obj = EntryReport() try: obj = save_model(obj, object_values) except Exception as e: if hasattr(e, 'messages'): dct['error_message'] = '; '.join(e.messages) elif str(e) != '': dct['error_message'] = str(e) else: dct['error_message'] = 'Error in form data!' dct['id'] = obj.id model = EntryReportRow for index, row in enumerate(params.get('table_view').get('rows')): if invalid(row, ['quantity', 'unit', 'item_id', 'rate']): continue if row.get('other_expenses') == '': other_expenses = 0 else: other_expenses = row.get('other_expenses') values = { 'sn': index + 1, 'item_id': row.get('item_id'), 'specification': row.get('specification'), 'quantity': row.get('quantity'), 'unit': row.get('unit'), 'rate': row.get('rate'), 'remarks': row.get('remarks'), 'other_expenses': other_expenses, 'entry_report': obj } submodel, created = model.objects.get_or_create(id=row.get('id'), defaults=values) if not created: submodel = save_model(submodel, values) dct['rows'][index] = submodel.id set_transactions( submodel, obj.source.date, ['dr', submodel.item.account, submodel.quantity], ) delete_rows(params.get('table_view').get('deleted_rows'), model) return JsonResponse(dct)
def update(self, instance, validated_data): rows_data = validated_data.pop('rows') sales = Sales.objects.get(pk=instance.id) sales.date = validated_data.pop('date',None) sales.credit = validated_data.pop('credit',False) sales.voucher_no = validated_data.pop('voucher_no') sales.party = validated_data.pop('party') sales.save() for row_data in rows_data: data = dict(row_data) row_id = data.get('id', '') if row_id: row = SalesRow.objects.get(pk=row_id) # if not row.item == data.get('item'): # iv_account, status = InventoryAccount.objects.get_or_create( # name=row.item.name, site_id=DEFAULT_PROJECT_ID, account_no=row.item.account.account_no) # set_transactions(row, row.purchase.date, ['cr', iv_account, row.quantity]) # set_ledger_transactions(row, row.purchase.date, ['cr', row.item.ledger, # row.quantity*row.rate-row.discount]) else: row = SalesRow() row.sn = data.get('sn') row.item = data.get('item') row.unit = data.get('unit','Pieces') row.quantity = data.get('quantity',0.0) row.is_vatable = data.get('is_vatable',True) row.rate = data.get('rate', 0.0) row.discount = data.get('discount',0.0) row.sales = sales row.save() iv_account, status = InventoryAccount.objects.get_or_create( name=row.item.name, site_id=DEFAULT_PROJECT_ID, account_no=row.item.account.account_no) set_transactions(row, row.sales.date, ['cr', iv_account, row.quantity]) if not row.is_vatable: row_amount = row.quantity*row.rate-row.discount else: row_amount = row.quantity*row.rate*1.13-row.discount set_ledger_transactions(row, row.sales.date, ['cr', row.item.ledger, row_amount]) if sales.credit: set_ledger_transactions(row, row.sales.date, ['dr', sales.party.account, row_amount]) else: set_ledger_transactions(row, row.sales.date, ['dr', Account.objects.get_or_create(name='Cash')[0], row_amount]) return sales
def fulfill_demand(request): params = json.loads(request.body) dct = {} if params.get('id'): row = DemandRow.objects.get(id=params.get('id')) else: dct['error_message'] = 'Row needs to be saved before being fulfilled!' return JsonResponse(dct) if params['status'] == 'Requested': dct['error_message'] = 'Row needs to be approved before being fulfilled!' return JsonResponse(dct) set_transactions(row, row.demand.date, ['cr', row.item.account, row.release_quantity], ) row.status = 'Fulfilled' row.save() return JsonResponse(dct)
def save_entry_report(request): params = json.loads(request.body) dct = {'rows': {}} if params.get('type') == 'handover': source = Handover.objects.get(id=params.get('source_id')) else: source = PurchaseOrder.objects.get(id=params.get('source_id')) object_values = {'entry_report_no': empty_to_none(params.get('entry_report_no')), 'fiscal_year': request.setting.fiscal_year, 'source': source} if params.get('id'): obj = EntryReport.objects.get(id=params.get('id')) else: obj = EntryReport() try: obj = save_model(obj, object_values) except Exception as e: if hasattr(e, 'messages'): dct['error_message'] = '; '.join(e.messages) elif str(e) != '': dct['error_message'] = str(e) else: dct['error_message'] = 'Error in form data!' dct['id'] = obj.id model = EntryReportRow for index, row in enumerate(params.get('table_view').get('rows')): if invalid(row, ['quantity', 'unit', 'item_id', 'rate']): continue if row.get('other_expenses') == '': other_expenses = 0 else: other_expenses = row.get('other_expenses') values = {'sn': index + 1, 'item_id': row.get('item_id'), 'specification': row.get('specification'), 'quantity': row.get('quantity'), 'unit': row.get('unit'), 'rate': row.get('rate'), 'remarks': row.get('remarks'), 'other_expenses': other_expenses, 'entry_report': obj} submodel, created = model.objects.get_or_create(id=row.get('id'), defaults=values) if not created: submodel = save_model(submodel, values) dct['rows'][index] = submodel.id set_transactions(submodel, obj.source.date, ['dr', submodel.item.account, submodel.quantity], ) delete_rows(params.get('table_view').get('deleted_rows'), model) return JsonResponse(dct)
def fulfill_demand(request): params = json.loads(request.body) dct = {} if params.get('id'): row = DemandRow.objects.get(id=params.get('id')) else: dct['error_message'] = 'Row needs to be saved before being fulfilled!' return JsonResponse(dct) if params['status'] == 'Requested': dct['error_message'] = 'Row needs to be approved before being fulfilled!' return JsonResponse(dct) set_transactions( row, row.demand.date, ['cr', row.item.account, row.release_quantity], ) row.status = 'Fulfilled' row.save() return JsonResponse(dct)