Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duplication of Sales Tax Invoice #18

Closed
darkmanst opened this issue Jun 15, 2024 · 10 comments
Closed

Duplication of Sales Tax Invoice #18

darkmanst opened this issue Jun 15, 2024 · 10 comments

Comments

@darkmanst
Copy link

First, thank you for such a wonderful package, It greatly helps us.

I did run into an issue, somehow sales tax invoice have a duplicate and it is created by an administrator account (assume the system create it)

image

Please Point me out how to find an issue about this.

@kittiu
Copy link
Owner

kittiu commented Jun 29, 2024

Sorry I just see this message. Can you explain steps to this problem in more detail? How can I replicate it.

Are you Thai by the way?

@darkmanst
Copy link
Author

Yes, I'm Thai.
I think I've found out why it happened but I don't know how to fix it.

This occur when I post back-date sales transaction for stock item. (Using FIFO and perpetual inventory, Update Stock is checked so that Stock Transaction will occur on Sale Invoice rather than Delivery Note).
ERPNext has a scheduled task called "repost_item_valuation.repost_entries"
It creates a Doctype "Repost Item Valuation" and New GL Entry Automatically.

When a new GL Entry is created old GL Entry is gone.
Somehow Sales Tax Invoices get created, hence the duplication.

@kittiu
Copy link
Owner

kittiu commented Jul 3, 2024

What I can say is the Sales and Purchase Tax Invoices is created when the related GL Entry to tax is created (and deleted when it is deleted but normall it will be reverted not deleted). Number skipping is not a good thing, I have to think of ways to avoid it, may be to keep it somewhere and reuse it.
So, I guess, the GL Entry is deleted when you repost the item. I will check. About the duplication, I am not sure why.

Thanks for reporting case, I will check.

@kittiu
Copy link
Owner

kittiu commented Jul 8, 2024

@darkmanst sorry, I still can't replicate the case. If it is not too difficult, can you write step by step instruction that guide me how to get the same error as you did? With picture will be cool.

@darkmanst
Copy link
Author

@kittiu Thank you for the follow-up.
This happens when creating a backdate sale invoice.

Suppose I have an Item A (Manufacture not buy and sell, using batch, also cost will be different each batch)
Let's say Batch A has 100 units, Batch B has 100 units.

There is a Sale Invoice (Update Stock check box is checked) on the date 26/1/2024
This invoice sells Item A and uses the cost of Batch A.

If I create a back-date sale invoice before 26/1/2024 and sell Item A. This invoice will use Batch A first and
screenshot-20240708-222703

this scheduled task will run and repost item valuation and will use the cost of Batch B instead on the invoice 26/1/2024
This caused GL to change.

I hope this makes sense to you.


ขออนุญาติอธิบายเป็นภาษาไทยอีกรอบนะครับ
Item A ถูกผลิตขึ้นมาเป็น Batch , การคิดต้นทุนสินค้า คิดตาม Batch
สมมุติมี Batch A, Batch B มีอย่างละ 100 ชิ้น
Sale Invoice วันที่ 26/1 ใช้ Batch A ขายไป 100 ชิ้น
หลังจากนั้น มีการสร้าง Sale Invoice ย้อนหลัง เช่น วันที่ 15/1 , ทำให้ ระบบคิดคำณวณต้นทุนใหม่ เนื่องจากวันที่ 15/1 เกิดก่อน 26/1 และระบบจำเป็นต้องใช้สินค้า Batch A ก่อน Batch B

ทำให้ Sale Invoice 15/1 ใช้ต้นทุน Batch A, และทำให้ Sale Invoice วันที่ 26/1 ถูกแก้ไปใช้ต้นทุน Batch B แทน ตอนนี้ทำให้ระบบสร้าง GL ขึ้นมาใหม่ โดยสามารถเช็คได้จาก Repost Item Valuation List ถ้าหากมีการ คำนวณต้นทุนของสินค้าใหม่ ระบบจะมีการสร้างเอกสารขึ้นที่หน้านี้

ต้องขออภัยด้วยนะครับ หาก อธิบายให้เข้าใจได้ดีกว่านี้ไม่ได้

@kittiu
Copy link
Owner

kittiu commented Jul 12, 2024

ขอบคุณครับ จากที่อธิบาย ผมเข้าใจว่า

  • Sales Tax Invoice ที่ถูกสร้างขึ้นคร้งแรก ยังค้างอยู่ และเมื่อมีการ repost_entries ก็สร้าง Sales Tax Invoice เพิ่มอีกอันทำให้ Duplicated ถูกไหมครับ
  • แล้วสมมุติว่าการ Repost ทำให้มีการสร้าง GL ใหม่ซึ่ง for some reason ใช้ Cost ไม่เท่าเดิม, เช่น ด้วยอะไรก็แล้วแต่ ทำให้ Tax Amont เปลี่ยนไป Sales Tax Invoice ควรเปลี่ยน Tax Amount ด้วย แค่คงเลข Running เดิมไว้ ถูกต้องไหมครับ (แต่ถ้าเราส่งภาษีไปแล้ว ก็จะมีปัญหาหรือไม่ครับ)

ผมอาจไปคิดถึงกรณีที่ไม่มีอยู่จริง ยังไงอธิบายเพิ่มได้นะครับ

@darkmanst
Copy link
Author

Sales Tax Invoice ที่ถูกสร้างขึ้นครั้งแรก ไม่ได้มีการเปลี่ยนแปลงยอด tax amount ครับ เพราะราคาขายสินค้าเท่าเดิม
คือกรณีที่เจอ ค่อนข้างพิเศษตรงที่ว่า

ตอนสร้าง Sale Invoice มีการกดเลือก update_stock ด้วย ทำให้มูลค่าต้นทุนของสินค้า ผูกอยู่กับ Sale Invoice นี้
ทีนี้ พอมีการสร้าง Sale Invoice อีกตัว (คนละตัวกัน แต่เป็นการสร้างแบบลงวันที่ย้อนหลัง) ให้วันที่เกิดก่อน Sale Invoice อันแรก
ระบบ มีการดึงสินค้ามาใช้ และ ทำให้ต้นทุน Sale Invoice ใบแรกเปลี่ยน ทำให้ระบบสร้าง GL ใหม่

ทีนี้พอระบบสร้าง GL ใหม่ทำให้ Sale Tax Invoice เกิดใหม่ขึ้นมาด้วยครับ (เกิดเองโดยที่ไม่มีใครไปกดสร้าง) และตัวที่เกิดขึ้นมาก็ซ้ำกับตัวแรก

@kittiu
Copy link
Owner

kittiu commented Sep 27, 2024

Note from @darkmanst

ผมไปไล่ดูมาคิดว่าเจอแล้วครับว่าตรงไหน

คือมี hook ที่ post เมื่อ gl มีการ post ลง ผังบช ภาษี

สถานการณ์ที่ผมเจอคือ เวลามี sales invoice ที่กด update stock ไว้
ที่ด้านในมี item ที่เกิดจากการผลิต แล้วต้นทุนมีการเปลี่ยน พอระบบมัน คิดต้นทุนใหม่ มันก็ post gl ใหม่ทั้งใบ รวมถึง ภาษีด้วย

ประมาณนี้นะครับ

@kittiu
Copy link
Owner

kittiu commented Oct 14, 2024

ผมคิดว่าเข้าใจเคสนะ แต่แก้โค้ดตามความเข้าใจโดยยังไม่ได้ replicate. การแก้ไขไม่ได้ harmful อะไรครับ เห็นว่ามันมี flags.from_repost อยู่แล้ว และน่าจะโดนผานต่อมายัง after_insert event ได้ (hopefully)

https://github.com/kittiu/thai_tax/pull/22/files

รบกวนทดสอบแทนผมหน่อยนะว่าใช้ได้ไหม ขอบคุณครับ

@darkmanst
Copy link
Author

flags.from_repost ผ่านต่อมายัง after_insert event ครับ
code ที่ check repost ทำงานได้ดี GL ที่ถูก Repost ไม่สร้าง เอกสาร Sales Tax Invoice ซ้ำแล้วครับ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants