توسعه Odoo

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

دکمه هایی که برای پرداخت در اودوو قسمت پرتال هست چطوری نمایش داده میشوند؟

من چندتا گزینه در پرتال اودوو برای پرداخت و سفارش دوباره و ... دیدم میخواستم ببینم شرایطی که باعث میشه این دکمه ها نمایش داده بشوند چه چیزهایی هست.

آواتار
رها کردن
1 پاسخ
0
آواتار
فردین مردانی
بهترین پاسخ

. تابع _has_to_be_signed (امضا لازم است)

مکان: ماژول sale.order

نمایش دکمه: دکمه Sign & Pay

کد تابع

def _has_to_be_signed(self, include_draft=False):
    return (self.state == 'sent' or (self.state == 'draft' and include_draft)) and \
           not self.is_expired and \
           self.require_signature and \
           not self.signature

توضیح عملکرد

این تابع بررسی می‌کند که آیا سفارش فروش باید امضا شود یا خیر. این بررسی بر اساس شرایط زیر انجام می‌شود:

  • وضعیت سفارش باید ارسال‌شده (sent) باشد، یا پیش‌نویس (draft) باشد و پارامتر include_draft برابر True باشد.
  • سفارش نباید منقضی شده باشد (not self.is_expired).
  • سفارش باید نیاز به امضا داشته باشد (self.require_signature).
  • سفارش هنوز امضا نشده باشد (not self.signature).

این تابع باعث میشود که دکمه ای در پرتال به صورت Sign & Pay نمایش داده شود.

۲. تابع _has_to_be_paid (پرداخت لازم است)

مکان: ماژول sale.order

نمایش دکمه: دکمه Accept & Pay

کد تابع:

def _has_to_be_paid(self, include_draft=False):
    transaction = self.get_portal_last_transaction()
    return (self.state == 'sent' or (self.state == 'draft' and include_draft)) and \
           not self.is_expired and \
           self.require_payment and \
           transaction.state != 'done' and \
           self.amount_total

توضیح عملکرد:

این تابع بررسی می‌کند که آیا سفارش فروش باید پرداخت شود یا خیر. شرایط به این صورت است:

  1. وضعیت سفارش باید یکی از موارد زیر باشد:
    • ارسال‌شده (sent)
    • پیش‌نویس (draft) در صورتی که پارامتر include_draft برابر True باشد.
  2. سفارش نباید منقضی شده باشد (not self.is_expired).
  3. سفارش باید نیاز به پرداخت داشته باشد (self.require_payment).
  4. آخرین تراکنش مالی مرتبط با سفارش نباید در وضعیت موفقیت‌آمیز باشد (transaction.state != 'done).
  5. مبلغ کل سفارش (self.amount_total) باید بزرگتر از صفر باشد.

این تابع باعث میشود که دکمه Accept & Pay در پرتال در ساید بار نمایش داده شود.

۳. تابع _is_reorder_allowed (اجازه سفارش مجدد)

مکان: ماژول sale.order

نمایش دکمه: دکمه Order Again

کد تابع در sale.order:

def _is_reorder_allowed(self):
    self.ensure_one()
    return self.state == 'sale' and \
           any(line._is_reorder_allowed() for line in self.order_line if not line.display_type)

توضیح عملکرد:

این تابع بررسی می‌کند که آیا امکان ثبت سفارش مجدد برای سفارش فعلی وجود دارد یا خیر. شرایط شامل موارد زیر است:

  1. وضعیت سفارش باید sale باشد.
  2. حداقل یکی از خطوط سفارش (خطوطی که فیلد display_type آن‌ها مقداردهی نشده باشد) باید شرایط لازم برای سفارش مجدد را داشته باشد. این شرایط از طریق فراخوانی تابع line._is_reorder_allowed بررسی می‌شود.

توابع کمکی:

۳.۱. تابع _is_reorder_allowed در sale.order.line:

کد تابع:

def _is_reorder_allowed(self):
    self.ensure_one()
    return self.product_id._is_add_to_cart_allowed()

توضیح:

این تابع بررسی می‌کند که آیا خط سفارش مربوطه اجازه سفارش مجدد دارد یا خیر. برای این کار، تابع product.product._is_add_to_cart_allowed را برای محصول این خط (از طریق self.product_id) فراخوانی می‌کند.

این تابع باعث میشود که دکمه Order Again در ساید بار پرتال نمایش داده شود.

۳.۲. تابع _is_add_to_cart_allowed در product.product:

کد تابع:

def _is_add_to_cart_allowed(self):
    self.ensure_one()
    return self.user_has_groups('base.group_system') or \
           (self.active and self.sale_ok and self.website_published)

توضیح:

این تابع بررسی می‌کند که آیا یک محصول اجازه اضافه شدن به سبد خرید را دارد یا خیر. شرایط بررسی عبارتند از:

  1. کاربر فعلی باید عضو گروه سیستم (ادمین) باشد (self.user_has_groups('base.group_system')) یا:
    • محصول فعال باشد (self.active).
    • محصول برای فروش تنظیم شده باشد (self.sale_ok).
    • محصول در وب‌سایت منتشر شده باشد (self.website_published).

خلاصه کدها و روابط بین توابع:

  • Sign & Pay:
    تابع _has_to_be_signed وضعیت سفارش، نیاز به امضا، و انقضا را بررسی می‌کند.
  • Accept & Pay:
    تابع _has_to_be_paid وضعیت سفارش، نیاز به پرداخت، و وضعیت آخرین تراکنش را بررسی می‌کند.
  • Order Again:
    تابع _is_reorder_allowed بررسی می‌کند که آیا سفارش مجدد برای محصولات سفارش داده شده امکان‌پذیر است یا خیر.
    این تابع وابسته به توابع کمکی _is_reorder_allowed در sale.order.line و _is_add_to_cart_allowed در product.product است.
آواتار
رها کردن