POS छूट तकनीकी संदर्भ
यह पृष्ठ बताता है कि WCPOS कैशियर द्वारा लागू किए गए लाइन-आइटम मूल्य ओवरराइड को कैसे संभालता है — वे कैसे संग्रहीत होते हैं, वे WooCommerce कूपन के साथ कैसे काम करते हैं और कौन-से फ़िल्टर उपलब्ध हैं। उपयोगकर्ता-केंद्रित दस्तावेज़ के लिए कार्ट छूट और कूपन देखें।
POS मूल्य ओवरराइड कैसे संग्रहीत किए जाते हैं
जब कोई कैशियर POS में किसी लाइन-आइटम का मूल्य सेट या बदलता है, तो प्रति-इकाई मूल्य JSON के रूप में _woocommerce_pos_data लाइन-आइटम मेटा में संग्रहीत होते हैं:
{
"price": "16.00",
"regular_price": "18.00",
"tax_status": "taxable"
}
विविध (कस्टम) उत्पादों के लिए, इस मेटा में कूपन सत्यापन के दौरान उपयोग किए जाने वाले virtual, downloadable, और categories फ़ील्ड भी हो सकते हैं।
यह मेटा लाइन के प्रति-इकाई मूल्यों का आधिकारिक स्रोत है। लाइन-आइटम पर WooCommerce का संग्रहीत subtotal, price * qty से प्राप्त होता है (जिसमें कर निष्कर्षण और राउंडिंग लागू होती है)। कूपन छूट लागू होने पर संग्रहीत total कम हो सकता है, इसलिए प्रति-इकाई सटीकता के लिए हमेशा _woocommerce_pos_data.price और regular_price पढ़ें।
नए POS ऑर्डर निजी _woocommerce_pos_version ऑर्डर मेटा में सर्वर प्लगइन संस्करण भी रिकॉर्ड करते हैं। यह भविष्य की संगतता जाँच के लिए स्पष्ट संस्करण चिह्न प्रदान करता है। रसीद की गणनाएँ अब भी संग्रहीत लाइन-आइटम संरचना को आधिकारिक मानती हैं, क्योंकि ऑफ़लाइन ऑर्डर को उसे बनाने वाले ऐप से नए सर्वर द्वारा स्वीकार किया जा सकता है।
उप-योग मॉडल (v1.9.0+)
v1.9.0 से, WCPOS WooCommerce के मूल बिक्री-मूल्य व्यवहार के अनुरूप है:
line_item.subtotal = price * qty, जहाँprice, POS मूल्य है (किसी भी ओवरराइड के बाद)।line_item.total = subtotal - coupon_discount_for_line.order.discount_totalकेवल कूपन छूट दर्शाता है, POS मूल्य ओवरराइड नहीं।
यह उस तरीके के अनुरूप है जिससे WooCommerce बिक्री पर मौजूद उत्पाद को संभालता है: sale_price उप-योग बन जाता है और discount_total कूपन के लिए आरक्षित रहता है। ऑर्डर में अलग से कोई "POS छूट" पंक्ति नहीं होती।
पुराने संस्करण subtotal = regular_price * qty भेजते थे, जिसके कारण WooCommerce discount_total = subtotal - total की गणना करता था और POS मूल्य ओवरराइड को छूट के रूप में शामिल करता था। इसे बदला गया क्योंकि यह कूपन गणना से टकराता था: recalculate_coupons() आधार मूल्य के रूप में subtotal का उपयोग करता है, इसलिए कूपन मूल मूल्य के आधार पर गणना होकर गलत कुल राशि देते थे।
पिछला सर्वर-साइड उपाय — woocommerce_order_item_get_subtotal के दौरान सक्रिय recalculate_coupons() फ़िल्टर — v1.9.0 में हटा दिया गया था। पूरी जानकारी के लिए ADR देखें।
कूपन इंटरैक्शन व्यवहार
कूपन सहायता WCPOS Pro की सुविधा है। जब POS-छूट वाले आइटम शामिल किसी ऑर्डर पर कूपन लागू किया जाता है:
- कूपन POS-छूट वाले मूल्य (
_woocommerce_pos_data.priceमें मौजूद मान) के आधार पर गणना करता है, मूलregular_priceके आधार पर नहीं। - कूपन हटाने पर, लाइन आइटम अपने POS-छूट वाले मूल्य पर वापस आ जाता है।
exclude_sale_items का व्यवहार
जब _woocommerce_pos_data.price < regular_price होता है, तो WooCommerce POS-छूट वाले आइटम को "बिक्री पर" मानता है। exclude_sale_items सक्षम वाले कूपन इसलिए उन्हें छोड़ देंगे, जो WooCommerce के नियमित बिक्री मूल्यों के व्यवहार के अनुरूप है।
अलग व्यवहार की आवश्यकता होने पर नीचे दिया गया woocommerce_pos_item_is_on_sale फ़िल्टर देखें।
उपलब्ध फ़िल्टर
woocommerce_pos_item_is_on_sale
कूपन सत्यापन के लिए POS-छूट वाले आइटम को "बिक्री पर" माना जाए या नहीं, इसे निर्धारित करें।
add_filter( 'woocommerce_pos_item_is_on_sale', function ( $is_on_sale, $product, $item, $pos_data ) {
// Allow coupons with exclude_sale_items to apply to POS-discounted items
return false;
}, 10, 4 );
पैरामीटर:
| पैरामीटर | प्रकार | विवरण |
|---|---|---|
$is_on_sale | bool | क्या आइटम को बिक्री पर माना जाता है (डिफ़ॉल्ट: price < regular_price) |
$product | WC_Product | उत्पाद ऑब्जेक्ट |
$item | WC_Order_Item_Product | ऑर्डर लाइन आइटम |
$pos_data | array | डिकोड किया गया _woocommerce_pos_data JSON |
REST API एंडपॉइंट
कूपन REST एंडपॉइंट मुफ़्त प्लगइन में /wp-json/wcpos/v1/coupons पर उपलब्ध है, ताकि कूपन क्वेरी करते समय POS ऐप को कभी 404 न मिले — WCPOS Pro इंस्टॉल न होने वाली साइटों पर भी। हालाँकि, उपयोगकर्ता के लिए उपलब्ध कूपन सुविधा हेतु Pro आवश्यक है।
कंट्रोलर WC_REST_Coupons_Controller का विस्तार POS-विशिष्ट अतिरिक्त सुविधाओं के साथ करता है:
- ऑफ़लाइन-प्रथम सिंक के लिए UUID प्रबंधन
- अनुमति जाँच के लिए
access_woocommerce_posक्षमता - जब
posts_per_page=-1औरfields=id(याfields=id,date_modified_gmt) का अनुरोध किया जाता है, तब अनुकूलित बल्क-ID क्वेरी पथ
रसीद डेटा एक्सपोज़र
रसीद डेटा बिल्डर (Receipt_Data_Builder) निम्नलिखित को उपलब्ध कराता है:
lines[].discounts,lines[].discounts_incl,lines[].discounts_excl— प्रति-पंक्ति छूट राशि, जिसकी गणनाsubtotal - totalके रूप में होती है। v1.9.0 से, POS मूल्य ओवरराइड के लिए यह केवल कूपन छूट दर्शाता है, क्योंकि कूपन लागू न होने परsubtotal === totalहोता है।totals.discount_total,totals.discount_total_incl,totals.discount_total_excl—WC_Order::get_discount_total()से ऑर्डर-स्तरीय कूपन छूट कुल।totals.savings_total,totals.savings_total_incl,totals.savings_total_excl— उत्पाद पंक्तियों में दर्ज नियमित-मूल्य से विक्रय-मूल्य तक की कुल बचत, जिसमें कैटलॉग बिक्री मूल्य और काउंटर ओवरराइड शामिल हैं।totals.total_saved,totals.total_saved_incl,totals.total_saved_excl— संयुक्त WooCommerce छूट और नियमित-मूल्य बचत कुल। बिल्डर pre-v1.9.0 ऑर्डर के WooCommerce छूट कुल में पहले से दर्शाई गई पंक्ति बचत को शामिल नहीं करता।totals.total_saved_complete— जब किसी भी पंक्ति में विश्वसनीय समग्र मान के लिए पर्याप्त दर्ज मूल्य डेटा नहीं होता, तो false; इस स्थिति में null हो सकने वाले बचत कुलnullहोते हैं।discounts[]—label,code, औरtotalवाले कूपन लाइन आइटम का ऐरे।
लाइन आइटम का अंडरस्कोर-उपसर्ग वाला मेटा (जिसमें _woocommerce_pos_data शामिल है) lines[].meta द्वारा Receipt_Data_Builder::get_item_meta_pairs() से फ़िल्टर कर दिया जाता है। इसके बजाय Receipt Data v1.1 कैनोनिकल फ़ील्ड के माध्यम से दर्ज नियमित मूल्य, कूपन से पहले का विक्रय मूल्य, पंक्ति बचत और कुल बचत दिखाता है। टेम्पलेट उदाहरणों के लिए नियमित मूल्य और बचत प्रदर्शित करना और कुल देखें।