예제 #1
0
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())
예제 #2
0
 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()
예제 #3
0
    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))))
예제 #4
0
    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)
예제 #5
0
    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")