Пример #1
0
    def test_pos_closing_voucher(self):
        old_user = dataent.session.user
        user = '******'
        test_user = dataent.get_doc('User', user)

        roles = ("Accounts Manager", "Accounts User", "Sales Manager")
        test_user.add_roles(*roles)
        dataent.set_user(user)

        pos_profile = make_pos_profile()
        pos_profile.append('applicable_for_users', {
            'default': 1,
            'user': user
        })

        pos_profile.save()

        si1 = create_sales_invoice(is_pos=1, rate=3500, do_not_submit=1)
        si1.append('payments', {
            'mode_of_payment': 'Cash',
            'account': 'Cash - _TC',
            'amount': 3500
        })
        si1.submit()

        si2 = create_sales_invoice(is_pos=1, rate=3200, do_not_submit=1)
        si2.append('payments', {
            'mode_of_payment': 'Cash',
            'account': 'Cash - _TC',
            'amount': 3200
        })
        si2.submit()

        pcv_doc = create_pos_closing_voucher(user=user,
                                             pos_profile=pos_profile.name,
                                             collected_amount=6700)

        pcv_doc.get_closing_voucher_details()

        self.assertEqual(pcv_doc.total_quantity, 2)
        self.assertEqual(pcv_doc.net_total, 6700)

        payment = pcv_doc.payment_reconciliation[0]
        self.assertEqual(payment.mode_of_payment, 'Cash')

        si1.load_from_db()
        si1.cancel()

        si2.load_from_db()
        si2.cancel()

        test_user.load_from_db()
        test_user.remove_roles(*roles)

        dataent.set_user(old_user)
        dataent.db.sql("delete from `tabPOS Profile`")
Пример #2
0
def make_credit_note(docname):
	create_sales_invoice(company="_Test Company 2",
			customer = '_Test Customer 2',
			currency = 'EUR',
			qty = -1,
			warehouse = 'Finished Goods - _TC2',
			debit_to = 'Debtors - _TC2',
			income_account = 'Sales - _TC2',
			expense_account = 'Cost of Goods Sold - _TC2',
			cost_center = '_Test Company 2 - _TC2',
			is_return = 1,
			return_against = docname)
Пример #3
0
	def test_payment_against_negative_sales_invoice(self):
		pe1 = dataent.new_doc("Payment Entry")
		pe1.payment_type = "Pay"
		pe1.company = "_Test Company"
		pe1.party_type = "Customer"
		pe1.party = "_Test Customer"
		pe1.paid_from = "_Test Cash - _TC"
		pe1.paid_amount = 100
		pe1.received_amount = 100

		self.assertRaises(InvalidPaymentEntry, pe1.validate)

		si1 = create_sales_invoice()

		# create full payment entry against si1
		pe2 = get_payment_entry("Sales Invoice", si1.name, bank_account="_Test Cash - _TC")
		pe2.insert()
		pe2.submit()

		# create return entry against si1
		create_sales_invoice(is_return=1, return_against=si1.name, qty=-1)
		si1_outstanding = dataent.db.get_value("Sales Invoice", si1.name, "outstanding_amount")
		self.assertEqual(si1_outstanding, -100)

		# pay more than outstanding against si1
		pe3 = get_payment_entry("Sales Invoice", si1.name, bank_account="_Test Cash - _TC")
		pe3.paid_amount = pe3.received_amount = 300
		self.assertRaises(InvalidPaymentEntry, pe3.validate)

		# pay negative outstanding against si1
		pe3.paid_to = "Debtors - _TC"
		pe3.paid_amount = pe3.received_amount = 100

		pe3.insert()
		pe3.submit()

		expected_gle = dict((d[0], d) for d in [
			["Debtors - _TC", 100, 0, si1.name],
			["_Test Cash - _TC", 0, 100, None]
		])

		self.validate_gl_entries(pe3.name, expected_gle)

		outstanding_amount = flt(dataent.db.get_value("Sales Invoice", si1.name, "outstanding_amount"))
		self.assertEqual(outstanding_amount, 0)

		pe3.cancel()
		self.assertFalse(self.get_gle(pe3.name))

		outstanding_amount = flt(dataent.db.get_value("Sales Invoice", si1.name, "outstanding_amount"))
		self.assertEqual(outstanding_amount, -100)
Пример #4
0
	def test_payment_entry_exchange_gain_loss(self):
		si =  create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC",
			currency="USD", conversion_rate=50)
		pe = get_payment_entry("Sales Invoice", si.name, bank_account="_Test Bank USD - _TC")
		pe.reference_no = "1"
		pe.reference_date = "2016-01-01"
		pe.target_exchange_rate = 55

		pe.append("deductions", {
			"account": "_Test Exchange Gain/Loss - _TC",
			"cost_center": "_Test Cost Center - _TC",
			"amount": -500
		})
		pe.save()

		self.assertEqual(pe.unallocated_amount, 0)
		self.assertEqual(pe.difference_amount, 0)

		pe.submit()

		expected_gle = dict((d[0], d) for d in [
			["_Test Receivable USD - _TC", 0, 5000, si.name],
			["_Test Bank USD - _TC", 5500, 0, None],
			["_Test Exchange Gain/Loss - _TC", 0, 500, None],
		])

		self.validate_gl_entries(pe.name, expected_gle)

		outstanding_amount = flt(dataent.db.get_value("Sales Invoice", si.name, "outstanding_amount"))
		self.assertEqual(outstanding_amount, 0)
Пример #5
0
	def test_payment_entry_write_off_difference(self):
		si =  create_sales_invoice()
		pe = get_payment_entry("Sales Invoice", si.name, bank_account="_Test Cash - _TC")
		pe.reference_no = "1"
		pe.reference_date = "2016-01-01"
		pe.received_amount = pe.paid_amount = 110
		pe.insert()

		self.assertEqual(pe.unallocated_amount, 10)

		pe.received_amount = pe.paid_amount = 95
		pe.append("deductions", {
			"account": "_Test Write Off - _TC",
			"cost_center": "_Test Cost Center - _TC",
			"amount": 5
		})
		pe.save()

		self.assertEqual(pe.unallocated_amount, 0)
		self.assertEqual(pe.difference_amount, 0)

		pe.submit()

		expected_gle = dict((d[0], d) for d in [
			["Debtors - _TC", 0, 100, si.name],
			["_Test Cash - _TC", 95, 0, None],
			["_Test Write Off - _TC", 5, 0, None]
		])

		self.validate_gl_entries(pe.name, expected_gle)
Пример #6
0
	def test_payment_entry_against_si_usd_to_inr(self):
		si = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC",
			currency="USD", conversion_rate=50)
		pe = get_payment_entry("Sales Invoice", si.name, party_amount=20,
			bank_account="_Test Bank - _TC", bank_amount=900)
		pe.reference_no = "1"
		pe.reference_date = "2016-01-01"

		self.assertEqual(pe.difference_amount, 100)

		pe.append("deductions", {
			"account": "_Test Exchange Gain/Loss - _TC",
			"cost_center": "_Test Cost Center - _TC",
			"amount": 100
		})
		pe.insert()
		pe.submit()

		expected_gle = dict((d[0], d) for d in [
			["_Test Receivable USD - _TC", 0, 1000, si.name],
			["_Test Bank - _TC", 900, 0, None],
			["_Test Exchange Gain/Loss - _TC", 100.0, 0, None],
		])

		self.validate_gl_entries(pe.name, expected_gle)

		outstanding_amount = flt(dataent.db.get_value("Sales Invoice", si.name, "outstanding_amount"))
		self.assertEqual(outstanding_amount, 80)
Пример #7
0
	def test_payment_entry_against_si_usd_to_usd(self):
		si = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC",
			currency="USD", conversion_rate=50)
		pe = get_payment_entry("Sales Invoice", si.name, bank_account="_Test Bank USD - _TC")
		pe.reference_no = "1"
		pe.reference_date = "2016-01-01"
		pe.target_exchange_rate = 50
		pe.insert()
		pe.submit()

		expected_gle = dict((d[0], d) for d in [
			["_Test Receivable USD - _TC", 0, 5000, si.name],
			["_Test Bank USD - _TC", 5000.0, 0, None]
		])

		self.validate_gl_entries(pe.name, expected_gle)

		outstanding_amount = flt(dataent.db.get_value("Sales Invoice", si.name, "outstanding_amount"))
		self.assertEqual(outstanding_amount, 0)

		pe.cancel()
		self.assertFalse(self.get_gle(pe.name))

		outstanding_amount = flt(dataent.db.get_value("Sales Invoice", si.name, "outstanding_amount"))
		self.assertEqual(outstanding_amount, 100)
Пример #8
0
    def test_timesheet_billing_based_on_project(self):
        timesheet = make_timesheet("_T-Employee-00001",
                                   simulate=True,
                                   billable=1,
                                   project='_Test Project',
                                   company='_Test Company')
        sales_invoice = create_sales_invoice(do_not_save=True)
        sales_invoice.project = '_Test Project'
        sales_invoice.submit()

        ts = dataent.get_doc('Timesheet', timesheet.name)
        self.assertEqual(ts.per_billed, 100)
        self.assertEqual(ts.time_logs[0].sales_invoice, sales_invoice.name)
Пример #9
0
    def test_pricing_rule_with_margin_and_discount(self):
        dataent.delete_doc_if_exists('Pricing Rule', '_Test Pricing Rule')
        make_pricing_rule(selling=1,
                          margin_type="Percentage",
                          margin_rate_or_amount=10,
                          discount_percentage=10)
        si = create_sales_invoice(do_not_save=True)
        si.items[0].price_list_rate = 1000
        si.payment_schedule = []
        si.insert(ignore_permissions=True)

        item = si.items[0]
        self.assertEquals(item.margin_rate_or_amount, 10)
        self.assertEquals(item.rate_with_margin, 1100)
        self.assertEqual(item.discount_percentage, 10)
        self.assertEquals(item.discount_amount, 110)
        self.assertEquals(item.rate, 990)
Пример #10
0
    def test_return_against_sales_order(self):
        so = make_sales_order()

        dn = create_dn_against_so(so.name, 6)

        so.load_from_db()
        self.assertEqual(so.get("items")[0].delivered_qty, 6)

        # Check delivered_qty after make_sales_invoice with update_stock checked
        si2 = make_sales_invoice(so.name)
        si2.set("update_stock", 1)
        si2.get("items")[0].qty = 3
        si2.insert()
        si2.submit()

        so.load_from_db()

        self.assertEqual(so.get("items")[0].delivered_qty, 9)

        # Make return deliver note, sales invoice and check quantity
        from epaas.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
        from epaas.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice

        dn1 = create_delivery_note(is_return=1,
                                   return_against=dn.name,
                                   qty=-3,
                                   do_not_submit=True)
        dn1.items[0].against_sales_order = so.name
        dn1.items[0].so_detail = so.items[0].name
        dn1.submit()

        si1 = create_sales_invoice(is_return=1,
                                   return_against=si2.name,
                                   qty=-1,
                                   update_stock=1,
                                   do_not_submit=True)
        si1.items[0].sales_order = so.name
        si1.items[0].so_detail = so.items[0].name
        si1.submit()

        so.load_from_db()
        self.assertEqual(so.get("items")[0].delivered_qty, 5)
Пример #11
0
def make_sales_invoice():
	dataent.set_user("Administrator")

	si = create_sales_invoice(company="_Test Company 2",
			customer = '_Test Customer 2',
			currency = 'EUR',
			warehouse = 'Finished Goods - _TC2',
			debit_to = 'Debtors - _TC2',
			income_account = 'Sales - _TC2',
			expense_account = 'Cost of Goods Sold - _TC2',
			cost_center = '_Test Company 2 - _TC2',
			do_not_save=1)

	si.append('payment_schedule', dict(due_date=getdate(add_days(today(), 30)), invoice_portion=30.00, payment_amount=30))
	si.append('payment_schedule', dict(due_date=getdate(add_days(today(), 60)), invoice_portion=50.00, payment_amount=50))
	si.append('payment_schedule', dict(due_date=getdate(add_days(today(), 90)), invoice_portion=20.00, payment_amount=20))

	si.submit()

	return si.name
Пример #12
0
    def test_customer_credit_limit(self):
        from epaas.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
        from epaas.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
        from epaas.selling.doctype.sales_order.test_sales_order import make_sales_order
        from epaas.selling.doctype.sales_order.sales_order import make_sales_invoice

        outstanding_amt = self.get_customer_outstanding_amount()
        credit_limit = get_credit_limit('_Test Customer', '_Test Company')

        if outstanding_amt <= 0.0:
            item_qty = int((abs(outstanding_amt) + 200) / 100)
            make_sales_order(qty=item_qty)

        if credit_limit == 0.0:
            dataent.db.set_value("Customer", '_Test Customer', 'credit_limit',
                                 outstanding_amt - 50.0)

        # Sales Order
        so = make_sales_order(do_not_submit=True)
        self.assertRaises(dataent.ValidationError, so.submit)

        # Delivery Note
        dn = create_delivery_note(do_not_submit=True)
        self.assertRaises(dataent.ValidationError, dn.submit)

        # Sales Invoice
        si = create_sales_invoice(do_not_submit=True)
        self.assertRaises(dataent.ValidationError, si.submit)

        if credit_limit > outstanding_amt:
            dataent.db.set_value("Customer", '_Test Customer', 'credit_limit',
                                 credit_limit)

        # Makes Sales invoice from Sales Order
        so.save(ignore_permissions=True)
        si = make_sales_invoice(so.name)
        si.save(ignore_permissions=True)
        self.assertRaises(dataent.ValidationError, make_sales_order)
Пример #13
0
	def test_payment_entry_against_sales_invoice_for_disable_allow_cost_center_in_entry_of_bs_account(self):
		accounts_settings = dataent.get_doc('Accounts Settings', 'Accounts Settings')
		accounts_settings.allow_cost_center_in_entry_of_bs_account = 0
		accounts_settings.save()
		si =  create_sales_invoice(debit_to="Debtors - _TC")

		pe = get_payment_entry("Sales Invoice", si.name, bank_account="_Test Bank - _TC")

		pe.reference_no = "112211-2"
		pe.reference_date = nowdate()
		pe.paid_to = "_Test Bank - _TC"
		pe.paid_amount = si.grand_total
		pe.insert()
		pe.submit()

		gl_entries = dataent.db.sql("""select account, cost_center, account_currency, debit, credit,
			debit_in_account_currency, credit_in_account_currency
			from `tabGL Entry` where voucher_type='Payment Entry' and voucher_no=%s
			order by account asc""", pe.name, as_dict=1)

		self.assertTrue(gl_entries)

		for gle in gl_entries:
			self.assertEqual(gle.cost_center, None)