Ali Mohamed

منع البيع بأقل من التكلفة في أوامر البيع

أمر البيع ميتأكدش لو السعر أقل من تكلفة الصنف.

نسخة مجانية الكاملة 750 ج.م
  • بيشتغل على أودو 19 و20
  • محتاج Sales + Inventory + Automation Rules
  • حجم الكود 324 سطر

المجاني ولا الكامل؟

بيعمل إيهالمجانيالكامل
زرار تفعيل وإيقاف لكل شركة
كل سطر لازم سعره يغطي تكلفته
السعر والتكلفة ظاهرين في الرسالة
التشييك على السطر، أو إجمالي الأمر، أو الاتنين
أقل هامش ربح %
إخفاء التكلفة عن البياع في الرسالة
فئات ومخازن بعينها
مستخدمين مسموح لهم يأكدوا عادي
حمّل750 ج.م

الكامل بيعمل إيه بالتفصيل

مكان الإعداد: المبيعات ← الإعدادات ← «البيع بأقل من التكلفة» ← «منع البيع بأقل من التكلفة». الإعداد لكل شركة لوحدها.

المنع: تأكيد أمر البيع بيترفض لو السعر أقل من التكلفة.

  • السعر = إجمالي السطر بعد الخصم وقبل الضريبة، بعملة الشركة.
  • التكلفة = تكلفة الصنف (المتوسط أو الحالية) × الكمية بوحدة الصنف.

الاختيارات:

  • التشييك على:
    • كل سطر لوحده: كل صنف لازم سعره يغطي تكلفته. ده الافتراضي.
    • إجمالي الأمر: الأمر كله بس، فسطر رخيص ممكن يعوّضه سطر غالي.
    • الاتنين.
  • أقل هامش ربح %: صفر يعني السعر ميقلش عن التكلفة. 10 يعني السعر لازم يبقى على الأقل التكلفة × 1.10.
  • إظهار التكلفة: لو مقفول، الرسالة بتقول أسماء الأصناف بس، فالبياع مبيشوفش التكلفة. ده الافتراضي.
  • الفئات والمخازن: لو سبتها فاضية تبقى على الكل. الفئات اللي تحت الفئة داخلة معاها، والمخزن بيتشيك على مخزن الأمر.
  • مسموح لهم: المستخدمين دول يقدروا يأكدوا عادي.

اللي مش بيتأثر:

  • نقطة البيع.
  • طلبات المتجر الإلكتروني والبوابة.
  • الأصناف اللي من غير تكلفة، زي الخدمات اللي تكلفتها صفر والكِت: مش بتتشيك لوحدها. بس على مستوى الإجمالي سعرها بيتحسب في الإيراد.

شكل الرسالة (مع إظهار التكلفة وهامش 10%):

مينفعش تأكيد S01027: سعر البيع أقل من التكلفة + هامش 10%.
- PRODUCT1: السعر / Price 50.00 LE · الحد الأدنى / Minimum 109.99 LE (التكلفة / Cost 99.99 LE)
- إجمالي الأمر / Order total: 620.00 LE · الحد الأدنى / Minimum 770.54 LE (التكلفة / Cost 700.49 LE)

التسطيب

  1. فعّل وضع المطوّر (الإعدادات ← تفعيل وضع المطوّر).
  2. ادخل التطبيقات ← «استيراد وحدة» (Import Module)، ارفع الملف، واضغط تثبيت.
  3. المبيعات ← الإعدادات ← «البيع بأقل من التكلفة»: فعّل المنع، واختار السطر أو الإجمالي، والهامش والفئات والمخازن والمستخدمين لو محتاج، واحفظ.

ملحوظة: لو أودو أونلاين لازم تكون على باقة Custom.

تبنيها بنفسك من غير ملف

الكود والخطوات (نفس النسخة المجانية)

قاعدة أتمتة واحدة بتمنع أي سطر سعره أقل من تكلفته، في كل الأصناف، والرسالة فيها السعر والتكلفة. مفيهاش إجمالي ولا هامش ولا فئات ولا مخازن ولا مستخدمين.

  1. الإعدادات ← تقنية ← قواعد الأتمتة ← جديد.
  2. الموديل: أمر البيع (Sales Order).
  3. المشغّل: عند التحديث (On save)، والحقل الحالة (Status).
  4. قبل التحديث: الحالة ≠ أمر بيع. بعد التحديث: الحالة = أمر بيع.
  5. الإجراء: تنفيذ كود (Execute Code)، والصق الكود.
# النسخة المجانية: قاعدة أتمتة على أمر البيع بتمنع أي سطر سعره (بعد الخصم وقبل الضريبة) أقل من تكلفة الصنف، من غير إعدادات.
# Free version: one automation rule, refuses any line priced below the product cost, no settings.
for order in records:
    if env.user.share:  # website and portal orders are never blocked
        continue
    company = order.company_id
    low = []
    for line in order.order_line:
        product = line.product_id
        if line.display_type or not product or line.product_qty <= 0:
            continue
        net = order.currency_id._convert(line.price_subtotal, company.currency_id, company, order.date_order)
        cost = product.with_company(company).standard_price * line.product_qty
        if cost > 0 and company.currency_id.compare_amounts(net, cost) < 0:
            low.append('- %s: السعر %.2f · التكلفة %.2f' % (product.display_name, net / line.product_qty, cost / line.product_qty))
    if low:
        raise UserError('مينفعش تأكيد %s: سعر البيع أقل من التكلفة.\n\n%s' % (order.name, '\n'.join(low)))

اطلب النسخة الكاملة

750 ج.م

لو إنت من بره مصر، اكتب بلدك في الطلب ونتفق على السعر بالدولار وطريقة الدفع على واتساب.