improve bazdid 3
This commit is contained in:
1 parent
f8d768a724
commit
f86d060e4d
6 files changed
+337
-121
No files matched your search
@@ -91,21 +91,26 @@ def _action_payload_from_request(request):
|
||||
}
|
||||
|
||||
|
||||
def _apply_visit_hold(customer_obj, payload, *, status):
|
||||
def _apply_visit_hold(customer_obj, payload, *, status, is_new):
|
||||
"""همراستاکردن «قرار بعدی» با اقدام ثبت/ویرایششده.
|
||||
|
||||
قواعد (یکسان برای ایجاد و ویرایش — قبلاً ایجاد این را انجام نمیداد):
|
||||
قواعد:
|
||||
|
||||
* فقط برای اقدام نوع «هماهنگی» معنا دارد؛
|
||||
- اگر تاریخ قرار داده شده باشد ⇒ ``set_visit_hold`` (فقط رو به جلو)
|
||||
- اگر «انجام شد» تیک خورده و تاریخ خالی است ⇒ پیشفرض ۱۴ روز
|
||||
- اگر هماهنگی لغو شده باشد ⇒ قرار پاک میشود
|
||||
* **هر اقدام دیگری** (از جمله «بازدید») ⇒ قرار دستی پاک میشود؛ چون هدفِ
|
||||
قرار (پیگیری در آینده) با انجام/برنامهریزی بازدید منتفی است.
|
||||
* برای اقدام نوع «هماهنگی»:
|
||||
- تاریخ قرار داده شده ⇒ ``set_visit_hold`` (فقط رو به جلو)
|
||||
- «انجام شد» تیک خورده و تاریخ خالی ⇒ پیشفرض ۱۴ روز
|
||||
- لغو شده ⇒ (در ایجاد) پاک میشود
|
||||
* برای **هر اقدام دیگری** (از جمله «بازدید»):
|
||||
- در حالت **ایجاد**، این اقدام آخرین فعالیت مشتری است ⇒ قرار دستی پاک
|
||||
میشود (سناریوی گزارششده: ثبت بازدید پس از هماهنگی).
|
||||
- در حالت **ویرایش**، رکوردی تاریخی است و ممکن است قرارِ فعلی از یک
|
||||
هماهنگیِ *جدیدتر* آمده باشد؛ پس دست نمیزنیم. اعتبارسنجی
|
||||
:func:`manual_holds_map` (شرط «آخرین فعالیت = هماهنگی») خودش تصمیم
|
||||
میگیرد. بدون این تفکیک، ویرایش یک اقدام قدیمی قرار معتبر را پاک میکرد.
|
||||
"""
|
||||
is_coordination = payload['actionType'] == Action.ActionType.HAMAHANGI
|
||||
if not is_coordination or status == Action.Status.CANCELL:
|
||||
return clear_visit_hold(customer_obj)
|
||||
return clear_visit_hold(customer_obj) if is_new else True
|
||||
|
||||
raw = payload.get('holdRaw')
|
||||
if raw is not None:
|
||||
@@ -152,7 +157,7 @@ def customerNewAction(request ,c_id):
|
||||
# last_bazdid_dt فقط از تابع واحد بازمحاسبه میشود؛ نه از finishDateTime.
|
||||
refresh_last_bazdid(customer_obj, reason=REASON_CREATE, user=request.user)
|
||||
# «قرار بعدی» فقط برای هماهنگی.
|
||||
_apply_visit_hold(customer_obj, payload, status=newAction.status)
|
||||
_apply_visit_hold(customer_obj, payload, status=newAction.status, is_new=True)
|
||||
|
||||
# پیامک «بازدید شما برای تاریخ … ثبت شد» فقط برای اقدام از نوع بازدید.
|
||||
if newAction.actionType == Action.ActionType.BAZDID:
|
||||
@@ -210,9 +215,10 @@ def customerEditAction(request ,c_id, action_id):
|
||||
# (تا مقداری که این رکورد ساخته بود با منبع حقیقت همراستا شود).
|
||||
reason = REASON_CANCEL if (was_done and not payload['is_done']) else REASON_EDIT
|
||||
refresh_last_bazdid(customer_obj, reason=reason, user=request.user)
|
||||
# «قرار بعدی»: با ویرایش همراستا میشود؛ اگر اقدام دیگر هماهنگی نباشد یا
|
||||
# هماهنگی لغو شود، قرار دستی پاک میشود.
|
||||
_apply_visit_hold(customer_obj, payload, status=newAction.status)
|
||||
# «قرار بعدی»: با ویرایش همراستا میشود. برای اقدام غیرهماهنگی عمداً
|
||||
# پاک نمیکنیم؛ رکورد ویرایششده ممکن است قدیمیتر از یک هماهنگیِ جدیدتر
|
||||
# باشد و پاککردن، قرار معتبر را از بین ببرد.
|
||||
_apply_visit_hold(customer_obj, payload, status=newAction.status, is_new=False)
|
||||
|
||||
#return redirect('/panel/customer/'+str(c_id)+'/action')
|
||||
return redirect(request.META.get('HTTP_REFERER', 'redirect_if_referer_not_found'))
|
||||
|
||||
Reference in new issue
Block a user