Ejemplo n.º 1
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")