def template_run(request, pk): template = get_object_or_404(ExpenseTemplate, pk=pk, user=request.user) expense = Expense(vendor=template.vendor, category=template.category) if "date" in request.GET: expense.date = request.GET["date"] else: expense.date = today_date() if template.type == "count": if not request.GET.get("count"): count = decimal.Decimal(1) else: count = parse_amount_input(request.GET["count"]) if count is None: return HttpResponseBadRequest() expense.amount = round_money(template.amount * count) desc_lines = template.description.strip().split("\n") desc_possibilities = len(desc_lines) desc = desc_lines[0] if count % 1 != 0: # Is decimal, use last possibility desc = desc_lines[desc_possibilities - 1] elif desc_possibilities == 2: # 0 → 1, 1 → anything else (English) desc = desc_lines[int(count != 1)] elif desc_possibilities in {3, 4}: # Polish scheme if count == 1: desc = desc_lines[0] else: # Expression from gettext, simplified desc = desc_lines[1 if (2 <= count % 10 <= 4 and (count % 100 < 10 or count % 100 >= 20)) else 2] expense.description = desc.replace("!count!", str(count)) elif template.type == "description": expense.amount = template.amount expense.description = template.description.replace("!description!", request.GET["description"]) elif template.type == "desc_select": main_desc, *desc_options = template.description.strip().split("\n") desc_id = int(request.GET["desc_id"]) expense.amount = template.amount expense.description = main_desc.strip().replace("!description!", desc_options[desc_id].strip()) elif template.type == "menu": desc_id = int(request.GET["desc_id"]) desc_options = template.description.strip().split("\n") amount_str, desc = desc_options[desc_id].strip().split(" ", 1) expense.amount = parse_amount_input(amount_str.strip()) if expense.amount is None: return HttpResponseBadRequest() expense.description = desc.strip() else: expense.amount = template.amount expense.description = template.description expense.user = request.user expense.save() return HttpResponseRedirect(expense.get_absolute_url())
def handle(self, n, **options): for i in range(n): o = Expense() o.title = silly.a_thing() o.amount = "{}.{}".format(random.randint(1, 100), random.randint(0, 99)) o.date = silly.datetime().date() o.description = "\n".join( [silly.paragraph(), silly.paragraph(), silly.paragraph()]) o.save()
def handle(self, n, *args, **kwargs): Expense.objects.all().delete() for i in range(n): with transaction.atomic(): o = Expense() o.title = silly.a_thing() o.date = silly.datetime().date() o.amount = f"{random.uniform(1, 1000):.2f}" o.comment = "\n".join(silly.paragraph() for i in range(random.randrange(0, 3))) o.save() for j in range(random.randrange(5)): o.notes.create(content="\n".join( silly.paragraph() for i in range(random.randrange(1, 4))))
def create_random_expense(self): with transaction.atomic(): o = Expense() o.title = silly.a_thing() o.amount = "{}.{}".format(random.randint(1, 100), random.randint(0, 99)) o.date = silly.datetime().date() o.description = "\n".join( [silly.paragraph(), silly.paragraph(), silly.paragraph()]) o.save() for j in range(random.randint(0, 5)): text = "\n".join( [silly.paragraph(), silly.paragraph(), silly.paragraph()]) o.comments.create(content=text)
def post(self, request, *args, **kwargs): purchase_dict = ast.literal_eval(request.POST['purchase']) purchase, purchase_created = Purchase.objects.get_or_create(purchase_invoice_number=purchase_dict['purchase_invoice_number']) purchase.purchase_invoice_number = purchase_dict['purchase_invoice_number'] purchase.vendor_invoice_number = purchase_dict['vendor_invoice_number'] purchase.vendor_do_number = purchase_dict['vendor_do_number'] purchase.vendor_invoice_date = datetime.strptime(purchase_dict['vendor_invoice_date'], '%d/%m/%Y') purchase.purchase_invoice_date = datetime.strptime(purchase_dict['purchase_invoice_date'], '%d/%m/%Y') brand = Brand.objects.get(brand=purchase_dict['brand']) purchase.brand = brand vendor = Vendor.objects.get(user__first_name=purchase_dict['vendor_name']) transport = TransportationCompany.objects.get(company_name=purchase_dict['transport']) purchase.vendor = vendor purchase.transportation_company = transport if purchase_dict['discount']: purchase.discount = purchase_dict['discount'] else: purchase.discount = 0 purchase.net_total = purchase_dict['net_total'] purchase.purchase_expense = purchase_dict['purchase_expense'] purchase.grant_total = purchase_dict['grant_total'] vendor_account, vendor_account_created = VendorAccount.objects.get_or_create(vendor=vendor) if vendor_account_created: vendor_account.total_amount = purchase_dict['vendor_amount'] vendor_account.balance = purchase_dict['vendor_amount'] else: if purchase_created: vendor_account.total_amount = vendor_account.total_amount + purchase_dict['vendor_amount'] vendor_account.balance = vendor_account.balance + purchase_dict['vendor_amount'] else: vendor_account.total_amount = vendor_account.total_amount - purchase.vendor_amount + purchase_dict['vendor_amount'] vendor_account.balance = vendor_account.balance - purchase.vendor_amount + purchase_dict['vendor_amount'] vendor_account.save() purchase.vendor_amount = purchase_dict['vendor_amount'] purchase.save() # Save purchase_expense in Expense if Expense.objects.exists(): voucher_no = int(Expense.objects.aggregate(Max('voucher_no'))['voucher_no__max']) + 1 else: voucher_no = 1 if not voucher_no: voucher_no = 1 expense = Expense() expense.created_by = request.user expense.expense_head, created = ExpenseHead.objects.get_or_create(expense_head = 'purchase') expense.date = dt.datetime.now().date().strftime('%Y-%m-%d') expense.voucher_no = voucher_no expense.amount = purchase_dict['purchase_expense'] expense.payment_mode = 'cash' expense.narration = 'By purchase' expense.save() purchase_items = purchase_dict['purchase_items'] deleted_items = purchase_dict['deleted_items'] for p_item in deleted_items: item = Item.objects.get(code = p_item['item_code']) ps_item = PurchaseItem.objects.get(item=item) inventory = Inventory.objects.get(item=item) inventory.quantity = inventory.quantity + ps_item.quantity_purchased inventory.save() ps_item.delete() for purchase_item in purchase_items: item = Item.objects.get(code=purchase_item['item_code']) p_item, item_created = PurchaseItem.objects.get_or_create(item=item, purchase=purchase) inventory, created = Inventory.objects.get_or_create(item=item) if created: inventory.quantity = int(purchase_item['qty_purchased']) else: if purchase_created: inventory.quantity = inventory.quantity + int(purchase_item['qty_purchased']) else: inventory.quantity = inventory.quantity - p_item.quantity_purchased + int(purchase_item['qty_purchased']) inventory.selling_price = purchase_item['selling_price'] inventory.unit_price = purchase_item['unit_price'] inventory.discount_permit_percentage = purchase_item['permit_disc_percent'] inventory.discount_permit_amount = purchase_item['permit_disc_amt'] inventory.vendor = vendor inventory.save() p_item, item_created = PurchaseItem.objects.get_or_create(item=item, purchase=purchase) p_item.purchase = purchase p_item.item = item p_item.quantity_purchased = purchase_item['qty_purchased'] p_item.item_frieght = purchase_item['frieght'] p_item.frieght_per_unit = purchase_item['frieght_unit'] p_item.item_handling = purchase_item['handling'] p_item.handling_per_unit = purchase_item['handling_unit'] p_item.expense = purchase_item['expense'] p_item.expense_per_unit = purchase_item['expense_unit'] p_item.cost_price = purchase_item['cost_price'] p_item.net_amount = purchase_item['net_amount'] p_item.save() res = { 'result': 'Ok', } response = simplejson.dumps(res) status_code = 200 return HttpResponse(response, status = status_code, mimetype="application/json")