Hỏi Đáp

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

0

Tính lương dựa trên kiểu hợp đồng.

-Mình tận dụng Kiểu hợp đồng trong module nhân sự để tính lương.
Vd:
- Kiểu hợp đồng "Chính thức" thì có Bảo hiểm XH và thuế TNCN
- Kiểu hợp đồng "Thời vụ" thì không có bảo hiểm.
- Kiểu hợp đồng "Thử việc" thì lương chỉ bằng 80% lương chính thức.
- Kiểu hợp đồng "Thuê ngoài" thì thuế TNCN không được khấu trừ mà tính trên lương hợp đồng…….

Gắn được thế này đỡ phải làm các cấu trúc lương khác nhau.

- Vấn đề là mình gắn quy tắc lương đi kèm với các kiểu hợp đồng này không đc.
Nhờ các bác kiểm tra code có vấn đề gì không nhé.

Vd. Mình tính cho 1 quy tắc lương (AAA) như sau

if (contract.type_id == "hr_contract.hr_contract_type_emp"):
    result = 3745000            # tương ứng với kiểu hợp đồng "chính thức"
elif (contract.type_id == "__export__.hr_contract_type_4"): 
    result = 3100000            # tương ứng với kiểu hợp đồng "Thời vụ"
else:
    result = 0


Kết quả: Dù cho kiểu hợp đồng là "chính thức" hay "thời vụ" hay gì gì đi nữa thì AAA cũng ra bằng 0.
Code trên có sai gì không ah.
Ảnh đại diện
Huỷ bỏ
7 Trả lời
1
Ảnh đại diện
Trần Ngọc Tuấn
Best Answer
Lê Ngọc Ngân viết:
Muốn nghiên cứu sâu hơn để làm chủ tốt hơn odoo thì theo bác nên nghiên cứu tài liệu gì nhỉ.

:D :) :o
Như bác bây giờ thì không phải dân ngoại đạo nữa rồi :)

Để làm chủ Odoo, trước mắt bác cần nghiên cứu cách ứng dụng gần 300 module trong phần core của Odoo, kết hợp với việc nghiên cứu các kiến thức quản trị mà Odoo tích hợp trong nó. Xong cái này và tự tay bác triển khai được 3~4 mô hình DN thì bác đã có thể trở thành chuyên viên tư vấn Odoo rồi.

Để đi xa hơn nữa thì bắt đầu là đến phần tìm hiểu kỹ thuật để bác có thể thuần hoá Odoo đến tận gốc rễ của nó. Các bước để làm việc này rất khó với người mà nghe đến chữ lập trình đã thấy sợ. Nhưng bác đã code đơn giản được ở các quy tắc lương thì chắc không thành vấn đề với bác. Nếu bác không sợ thành chuyên gia thì có thể đi theo các bước sau:
  1. Tìm tài liệu học Python cho người mới. Không cần học quá kỹ, chỉ cần đọc để rồi quên. Lúc bắt tay vào làm thì có thể tra cứu sau. Khoá học cho người chưa biết gì về lập trình thì sẽ khoảng 100 giờ là tạm ổn để nhìn vào code Odoo có thể biết nó làm gì. Tài liệu học Python trên mạng rất nhiều. Nếu bác đọc được tiếng Anh thì nên theo các tài liệu tiếng Anh. Còn không thì để nhanh tiếp cận có thể đọc tài liệu tiếng Việt. Xem link cuối bài này.
  2. Hệ quản trị cơ sở dữ liệu PostgreSQL: trước mắt bác chỉ cần học để cài được nó. Còn sau này thi học cú pháp SQL để truy vấn dữ liệu. Với Odoo, việc này chỉ cần thiết khi thiết kế các loại báo cáo. Còn lại thì bác có khi chẳng cần biết cú pháp SQL vì không phải dùng đến nó.
  3. Tìm cách cài đặt Odoo (từ mã nguồn, download ở cuối trang web này) trên máy tính cá nhân của bác.
  4. Cài Eclipse
  5. Cài Pydev, một plugin cho Eclipse để giúp bác lập trình Python trong Eclipse
  6. Bắt tay vào viết module đầu tiên cho Odoo theo hướng dẫn ở đây: https://www.odoo.com/documentation/9.0/howtos/backend.html
Nếu bác cứ túc tắc làm theo các bước trên đều đặn mỗi ngày 2 tiếng, 5 ngày / tuần thì sau 6 tháng bác có thể bổ sung vào hồ sơ của bác là một Nhà tư vấn và phát triển Odoo. :)

http://www.vithon.org/tutorial/2.5/tut.html

Ảnh đại diện
Huỷ bỏ
0
Best Answer

Hơ. Hoạt động rồi nè. Cảm ơn David Tran nhé, bác đúng là chuyên gia.
Muốn nghiên cứu sâu hơn để làm chủ tốt hơn odoo thì theo bác nên nghiên cứu tài liệu gì nhỉ.

:D :) :o

Ảnh đại diện
Huỷ bỏ
0
Ảnh đại diện
Trần Ngọc Tuấn
Best Answer

Em bị nhầm. Trường type_id trên contract là trường many2one, có nghĩa là nó link đến một đối tượng. Do đó, code chỗ này sẽ phải kiểu như sau

if (contract.type_id.id == 1):
    result = 100000000
elif (contract.type_id.id == 2) :
    result = 50000000
elif (contract.type_id.id == 3) :
    result = 10
else:
    result = 0


Sorry bác, nhiều khi cũng lẩm cẩm ^_^
Ảnh đại diện
Huỷ bỏ
0
Best Answer

Tình hình là mình có vào bản demo của các bác, lập một quy tắc lương theo ý đồ như trên:

Quy tắc lương WAGE:

if (contract.type_id == 1):
    result = 100000000
elif (contract.type_id == 2) :
    result = 50000000
elif (contract.type_id == 3) :
    result = 10
else:
    result = 0


Kết quả là luôn luôn bằng 0 ạ, dù cho là kiểu hợp đồng gì. Vậy có nghĩa là không phải do bản odoo của riêng mình.

>>> Có vẻ như không truyền được giá trị của contract.type_id vào biểu thức lương.
>>> Hoặc giá trị của contract.type_id không phải là 1, 2, 3

Sai ở đâu???

P/S: Mà sửa thế này thì hoạt động nhé:
if (contract.type_id != 1):
    result = 100000000
elif (contract.type_id == 2) :
    result = 50000000
elif (contract.type_id == 3) :
    result = 10
else:
    result = 0

Lương của Leo Tran 100.000.000 luôn. Hic!
;) ;) ;) ;) ;) ;)
Ảnh đại diện
Huỷ bỏ
0
Best Answer

Cảm ơn David Tran đã động viên, mình thấy làm cái này rất thú vị. Khi cài đặt và hoạt động đúng ý thì rất sướng, nhưng khi lỗi thì he mũi lắm, xoay đủ kiểu để fix cho bằng được lỗi. Mình thấy tương lai của ERP đang rất rộng, các doanh nghiệp của mình hầu như chưa biết lợi ích của ERP gì cả. Hầu hết đang dùng những phần mềm manh mún lắm. ERPonline có nhiều lợi thế và đang khai thác đúng hướng.
- Về cái code của mình vậy là cú pháp sai.
- Về cái id=xx trên trình duyệt đó, mình cũng đã thử rồi, cái AAA của mình sẽ luôn luôn là 0 cho dù với kiểu hợp đồng là gì đi nữa.
Test thế này cũng không được nhé.
Helppppppppp!

if (contract.type_id == "1"):
    result = 3745000            # tương ứng với kiểu hợp đồng "chính thức"
elif (contract.type_id == "3"): 
    result = 3100000            # tương ứng với kiểu hợp đồng "Thời vụ"
else:
    result = 0
2 Bình luận
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Trần Ngọc Tuấn
-

Bác so sánh với 1 chứ đừng so sánh với "1"

Ảnh đại diện
ViindooBot
-

Cả 2 cách mà không được bác ah. Với 1 cũng không được. Mình làm với "1" là để kiểm tra thêm một khả năng khác thôi.

0
Ảnh đại diện
Trần Ngọc Tuấn
Best Answer

Chỗ contract.type_id là ID cơ sở dữ liệu chứ không phải External ID (hay còn gọi là XML ID).
Bác muốn so sánh thì bác vào cái contract type đó và nhìn lên địa chỉ trình duyệt sẽ thấy có id=xx. Do đó, code của bác sẽ phải viết lại thế này

if (contract.type_id == 1):
    result = 3745000            # tương ứng với kiểu hợp đồng "chính thức"
elif (contract.type_id == 3): 
    result = 3100000            # tương ứng với kiểu hợp đồng "Thời vụ"
else:
    result = 0

Còn cái đoạn code
if (contract.type_id == "hr_contract.hr_contract_type_emp" or ";lkjojdsfj//.,"):

thì có thể diễn giải thành lời là: Hoặc contract.type_id == "hr_contract.hr_contract_type_emp" Hoặc ";lkjojdsfj//.,". Trong trường hợp này thì giá trị trả về luôn là True vì ";lkjojdsfj//.," được coi là True trong biểu thức điều kiện kia.
Nếu ý của bác là contract.type_id == a hoặc contract.type_id == b thì bác phải code là
if (contract.type_id == "hr_contract.hr_contract_type_emp" or contract.type_id == ";lkjojdsfj//.,"):


P/s: Em bắt đầu ngưỡng bộ bác về khả năng tiếp cận môn Python này rồi đấy :D
Ảnh đại diện
Huỷ bỏ
0
Best Answer

Đến phần này mới ly kỳ nhé:

Các bác có thể bảo em đặt if giá trị cho contract.type_id là sai, em chỉ chỉnh code đi một tý thế này, thì AAA luôn luôn là 37450000 nhé. Dù cho kiểu hợp đồng có là gì đi nữa. Rất là confused!!!!

if (contract.type_id == "hr_contract.hr_contract_type_emp" or ";lkjojdsfj//.,"):
    result = 3745000            # tương ứng với kiểu hợp đồng "chính thức"
elif (contract.type_id == "__export__.hr_contract_type_4"): 
    result = 3100000            # tương ứng với kiểu hợp đồng "Thời vụ"
else:
    result = 0
1 Bình luận
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
ViindooBot
-

Mình thấy cái trường type_id nêu trên, kiểu dữ liệu của nó là many2one,
thì sao nhỉ????

Trả lời của Bạn

Vui lòng đảm bảo câu trả lời của bạn có liên quan và giải đáp đúng nội dung câu hỏi. Nếu muốn bình luận về câu hỏi hoặc câu trả lời, hãy sử dụng công cụ Bình luận. Lưu ý, bạn có thể thay đổi nội dung trả lời thay vì trả lời lại 02 lần cho cùng một câu hỏi. Đồng thời bạn có thể nhấn nút để bầu chọn câu hỏi / câu trả lời tốt nhất.