Skip to content

Instantly share code, notes, and snippets.

@hiendinhngoc
Created November 29, 2022 08:24
Show Gist options
  • Save hiendinhngoc/0914e12af64cb3f7e032e152d202bdd4 to your computer and use it in GitHub Desktop.
Save hiendinhngoc/0914e12af64cb3f7e032e152d202bdd4 to your computer and use it in GitHub Desktop.
Gift campaignn progress

Overview

  • Thành tích cộng dồn của các chương trình quà tặng type B được lưu vào table gift_campaign_progresses. Mỗi record sẽ tương ứng với 1 chương trình và 1 khách hàng và bao gồm các data field liên quan tới số lượng, doanh số của các mã hàng liên quan đến chương trình (các mã hàng trong gift_condition_items của variant_gift) và số giải thưởng ở các trạng thái khác nhau.

  • Thành tích về doanh số (revenue) sẽ được tính dựa trên giá sau chiết khấu bao gồm thuế của mã hàng mua.

  • Mỗi gift_campaign_progress sẽ có nhiều gift_campaign_progress_items, tương ứng với từng gift_condition_item của chương trình mà KH đã chọn mua. Ví dụ chương trình yeu cầu mua 100c A, B, C để đạt quà. Khách đã mua 200A và 50B, thì sẽ có 2 gift_campaign_progress_items cho A và B, ghi nhận SL và DS đã mua cho 2 mã này. Vì mã C chưa đặt mua, nên sẽ ko có record tương ứng ==> chỉ tạo progress items khi khách đặt mua (hoặc đặt mã hàng vào giỏ hàng) để tránh tình trạng hàng loạt progress items được tạo nhưng ko dc sử dụng (đặc biệt là cho các chương trình với số condition items lên tới hàng trăm)

Quantity and revenue data fields

  • quantityrevenue: doanh số và số lượng đã đặt mua của các mã hàng liên quan. Đã đặt mua ở đây có nghĩa là nằm trong các đơn hàng đã đươc checkout (đã trải qua trạng thái checked_out và có timestamp checked_out_at) và KHÔNG ở trạng thái hủy (canceled) hay yêu cầu hủy (pending_cancellation). Giá trị field này tương đương với tổng giá trị field quantityrevenue của các gift_campaign_progress_items liên quan. Khi các progress items bị thay đổi SL/DS, sẽ có callback để cập nhật quantityrevenue của progress tương ứng. Ví dụ, chương trình mua 100A tặng 5B. Khách đã đặt mua 50A trong đơn hàng 1, và đơn hàng này đã được checkout, thì quantity của gift_campaign_progress tương ứng sẽ là 50. Revenue tương ứng cũng sẽ được cập nhật.

  • confirmed_quantityconfirmed_revenue: doanh số và số lượng đã xác nhận của các mã hàng mua liên quan. Đã xác nhận đây có nghĩa là các đơn hàng liên quan đã được xác nhận (đã trải qua trạng thái confirmed và có timestamp confirmed_at) và KHÔNG ở trạng thái hủy hay yêu cầu hủy. Giá trị field này tương đương với tổng giá trị field confirmed_quantityconfirmd_revenue của các gift_campaign_progress_items liên quan. Khi các progress items bị thay đổi SL/DS, sẽ có callback để cập nhật confirmed_quantityconfirmed_revenue của progress tương ứng. Tiếp tục ví dụ trên, khách hàng mua tiếp 100A trong đơn hàng 2, thì quantity sẽ là 150, nhưng confirmed_quantity là 0 vì chưa đơn nào được xác nhận. Nếu đơn 1 được xác nhận, thì quantity sẽ là 150, và confirmed_quantity là 50.

Rewards data fields

  • reward_times: Số giải thưởng đã đạt được dựa trên quantityrevenue. Tiếp tục ví dụ trên, reward_times đây sẽ là 1, vì đã mua 150c, và chương trình yêu cầu mua 100c chô mỗi giải thưởng. Field này sẽ được tính toán dựa trên quantity hay revenue tùy vào chương trình yêu cầu về SL hay DS.

  • confirmed_rewards: Số giải thưởng đã xác nhận dựa trên confirmed_quantityconfirmed_revenue. Tiếp tục ví dụ trên, confirmed_rewards sẽ là 0, vì chỉ mới có 50c đã được xác nhận, nên chưa đủ yêu cầu 100c của chương trinh. Field này dùng để xuất quà tăng riêng, nếu field này > 0 và số lần quà tặng đã chọn chưa đủ, thì chương trình sẽ được hiển thị ở tab Quản lý quà tặng -> Đã đạt chưa xuất cho khách xuất quà.

  • checked_out_rewards: Số giải thưởng đã được xuất, tương đương với tổng field checked_out_rewards của các selected_gifts nằm ở trạng thái finalized. Nghĩa là các gói quà được chọn, sau khi được xuất thành công, sẽ được phản ánh ở field này trong gift_campaign_progress. Nếu field này bằng với confirmed_rewards, nghĩa là KH đã xuất hết các gói quà đã đạt được.

Noncombinable data

  • Các field unconfirmed_noncombinable_dataconfirmed_noncombinable_data dùng để ghi nhận thành tích đã được sử dụng để xuất quà của các chương trình trong nhóm loại trừ (noncombinable). Khi tính toán reward_timesconfirmed_rewards, sẽ trừ unconfirmed_noncombinable_dataconfirmed_noncombinable_data ra khỏi tổng SL/DS tương ứng.

Noncombinable campaigns overview

  • Nhóm các chương trình noncombinable là các chương trình có chung 1 internal order (hay gọi tắt là IO, và trong table variant_gift sẽ là field sap_internal_order), nhưng khác nhau về yêu cầu SL, doanh số, và quà tặng. Chẳng hạn

    • Chương trình với ID là 1, IO 1234, yêu cầu mua 100c A, B, C được tăng 10D
    • Chương trình với ID là 2, IO 1234, yêu cầu mua 200c A, B, C được tặng 30D
    • Chương trình với ID là 3, IO 1234, yêu cầu mua 500c A, B, C được tặng 100D
  • 3 chương trình này sẽ thuộc nhóm noncombinable với nhau, với field noncombinabletrue. Trong đó, ctr ID 1 sẽ là parent, vì có yêu cầu nhỏ nhất, và noncombinable_parent_id của ctr này sẽ là nil. Chương trình với ID 2 và 3 sẽ có noncombinable_parent_id là 1.

  • Đối với các chương trình loại trừ, thành tích dùng để xuất quà của 1 chương trình sẽ không được tính vào các ctr còn lại. Ví dụ, theo như nhớm noncombinable trên, nếu KH mua dc 1000c, KH sẽ đạt dc 10 gói quà ID 1, 5 gói quà ID 2, và 2 gói quà ID 3. Nhưng nếu khách xuất 1 gói quà của chương trình thứ 3, tương ứng với sử dụng 500c hàng mua để đổi quà, thì các chương trình còn lại sẽ chỉ có thể lấy 500c còn lại chưa dùng đến để đổi quà. Như vậy, KH dc 5 gói quà ID 1, và 2 lần gói quà ID 2, và 1 gói quà ID 3 sau khi xuất 1 gói quà 500c.

Gift campaign progress for noncombinable campaigns

  • Thành tích của các chương trình chung 1 nhóm noncombinable sẽ gióng nhau về mặt SL và DS, nhưng để đảm bảo tính loại trừ nói trên, thì phần thành tích đã được sử dụng để xuất quà sẽ được tính vào các field noncombinable_data như sau:

    • confirmed_noncombinable_data: Thành tích chòn quà đã xác nhận. Đây được dùng để tính toán thành tích trong modal chọn quà trên web. Tiếp tục ví dụ nhóm noncombinable ở trên, với trường hợp là khách đã mua 1000c, khi trong tab quà tặng đã đạt chưa xuât trên AMPO, khi mở modal chọn quà lên và chọn gói quà 500c (ID 3), thì progress của chương trình ID 1 và 2 sẽ cập nhật field confirmed_noncombinable_data là 500. Như vậy, reward_timesconfirmed_reward_times của ctr 1 và 2, khi tính toán số giải thưởng đạt được, sẽ trừ giá trị ở field confirmed_noncombinable_data này (tức 500) ra khỏi tổng SL/DS đã mua/ đã xác nhận.

    • unconfirmed_noncombinable_data: Thành tích chọn quà chưa xác nhận, dùng để ghi nhận SL/DS được dùng để chọn quà tặng kèm đơn mua cho các đơn mua chưa được xác nhận. Nếu field này có giá trị, thì reward_times sẽ trừ giá trị này ra khi tính toán số gói quà đạt dc (nhưng chưa xác nhận).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment