jafar
3 سال پیش توسط jafar مطرح شد
4 پاسخ

اعتبار سنجی ساعت شروع کاری و پایان کاری در یک شیفت در لاراول

با سلام به همه
به یه چالشی خوردم بابت اعتبارسنجی ساعت ها وارده ی کاربر بر اساس شیفت
فرض کنیم که 3 تا شیفت داریم
1- 7 صبح تا 15 عصر
2- 15عصر تا 23 شب
3- 23 شب تا 7 صبح روز بعد (اینجا توی دیتابیس یه flag داریم که کاربر ملزم هست مشخص کنه که شیفت در روز بعد میفته یا نه)
حالا کاربر میاد و ساعت شروع و پایان کار رو وارد میکنه .
واسه شیفت یک و دو که توی یک روز کاری هستن ، به راحتی میشه اعتبار سنجی کرد که آیا کاربر داده ی درستی وارد کرده یا نه .

if ($shift->next_day==0) {
                if ($time1<$timeShiftBegin || $time2 > $timeShiftEnd) {
                    return back()->with(['error2' => 'زمان شروع یا پایان وارد شده در شیفت مورد نظر نمی باشد'.$request->input('time_begin'). "    ".$request->input('time_end')]);
                }
                elseif ($time1>=$timeShiftBegin && $time2 <= $timeShiftEnd) {
                    $mins = ($time2 - $time1) / 60;
                    $productContent = ProductContent::create([
                        'shift_id' => $idShift,
                        'good_id' => $request->input('good_id'),
                        'quantity' => $request->input('quantity'),
                        'time_begin' => $request->input('time_begin'),
                        'time_end' => $request->input('time_end'),
                        'minute' => $mins,
                        'productheader_id' => $request->input('productheader_id'),
                    ]);
                    if ($productContent) {
                        return redirect()->back()->with(['success2' => 'رکورد جدید ایجاد شد']);
                    }
                }
            }

ولی شیفت 3 چون میفته توی روز بعد میفته نمیدونم واقعا چیکار باید بکنم که داده های کاربر رو اعتبار سنجی کنم .

elseif ($shift->next_day==1){
                if ($time1<$time2) {
                    $mins = ($time2 - $time1) / 60;
                    $productContent = ProductContent::create([
                        'shift_id' => $idShift,
                        'good_id' => $request->input('good_id'),
                        'quantity' => $request->input('quantity'),
                        'time_begin' => $request->input('time_begin'),
                        'time_end' => $request->input('time_end'),
                        'minute' => $mins,
                        'productheader_id' => $request->input('productheader_id'),
                    ]);
                    if ($productContent) {
                        return redirect()->back()->with(['success2' => 'رکورد جدید ایجاد شد']);
                    }

                }
                elseif ($time1>$time2){
                    $mins = ($time2 + 86400 - $time1) / 60;
                    $productContent = ProductContent::create([
                        'shift_id' => $idShift,
                        'good_id' => $request->input('good_id'),
                        'quantity' => $request->input('quantity'),
                        'time_begin' => $request->input('time_begin'),
                        'time_end' => $request->input('time_end'),
                        'minute' => $mins,
                        'productheader_id' => $request->input('productheader_id'),
                    ]);
                    if ($productContent) {
                        return redirect()->back()->with(['success2' => 'رکورد جدید ایجاد شد']);
                    }
                }

تصویری شیفتها
تصویر رکورد مورد نظر

دوستان میتونن کمک کنن ؟


ثبت پرسش جدید
حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
0

سلام
برای دریافت ساعت فقط یک فرم استاندارد قرار بدید حالا میتونید توی خود صفحه با جاواسکریپت یا جی کوئری هر ردیف رو بررسی کنید و اگر تایم شروع بزرگتر از پایان بود هم هشدار داده بشه و هم دیتای input خالی بشه.
سمت بک اند هم می تونید همین مورد رو برای time_begin و time_end انجام بدید که بهتره توی یک rule سفارشی انجام بشه.
در این حالت مثلا تعداد گزینه هایی که معرفی کردید نصف میشن.
نکته مهمی که نه فرمودید اینه که کاربر می بایست 23 تا 7 رو انتخاب کنه اما در توضیح بعدی 6 مورد رو به عنوان مثال معرفی کردید مگر این انتخاب ها محدود نشدن چرا کاربر باید بتونه بین این اعداد رو هم انتخاب کنه؟


حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
2

سلام
برای اعتبار سنجی سمت کاربر نیاز نیست که درگیر تغییر تاریخ بشید کافیه شیفت سوم رو در محدوده 23 تا 24 و از 00 تا 07 کنترل کنید و در ادامه همین مقادیر رو سمت بک اند به صورت کاملتر کنترل کنید یعنی در فاز اول یعنی 23 تا 24 در تاریخ جاری و از 00 تا 27 در تاریخ جاری بعلاوه یک بررسی کنید.
همچنین این اعتبار سنجی رو بهتره به صورت یک rule سفارشی انجام بدید.


jafar
@jafarpalideh 3 سال پیش مطرح شد
0

ممنون بابت پاسختون .
مشکل من دقیقا همین مورده دوست خوبم
کاربر توی شیفت ۳ میتونه به ۳ طریق طبق فرمی که توی عکس گذاشتم داده وارد کنه . من مثال میزنم چند مورد رو :
ساعت شروع ساعت پایان
۲۳:۰۰ تا ۲۳:۱۵
۲۳:۱۵ تا ۲۳:۰۰
۲۳:۰۰ تا ۰۷:۰۰
۰۷:۰۰ تا ۲۳:۰۰
۰۶:۰۰ تا ۰۷:۰۰
۰۷:۰۰ تا ۰۶:۰۰

مشکل من با اعتبار سنجی این حالتهاست .


حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
0

سلام
برای دریافت ساعت فقط یک فرم استاندارد قرار بدید حالا میتونید توی خود صفحه با جاواسکریپت یا جی کوئری هر ردیف رو بررسی کنید و اگر تایم شروع بزرگتر از پایان بود هم هشدار داده بشه و هم دیتای input خالی بشه.
سمت بک اند هم می تونید همین مورد رو برای time_begin و time_end انجام بدید که بهتره توی یک rule سفارشی انجام بشه.
در این حالت مثلا تعداد گزینه هایی که معرفی کردید نصف میشن.
نکته مهمی که نه فرمودید اینه که کاربر می بایست 23 تا 7 رو انتخاب کنه اما در توضیح بعدی 6 مورد رو به عنوان مثال معرفی کردید مگر این انتخاب ها محدود نشدن چرا کاربر باید بتونه بین این اعداد رو هم انتخاب کنه؟


jafar
@jafarpalideh 3 سال پیش مطرح شد
0

کاربر توی ساعت شروع و پایان که از نوع اینپوت تایم هست ، میتونه هر تایمی که دوست داره رو وارد کنه .
من در بالا به اشتباه گفتم 3 حالت 😅
من 3 تا صفحه دارم بابت گرفتن اطلاعات از کاربر ، صفحه ی اولم تاریخ و نام ماشین رو میگیرم . بعد از ثبت ، کاربر رو به صفحه ای که در شکل میبینین هدایت میکنم که شیفت و نام محصول و ساعت شروع و پایان تولید رو وارد کنه .
طبق شیفتهام ، واسه شیفتهایی که توی یک روز هستن ، هیچ مشکلی ندارم . و راحت تاریخ شیفت رو با ساعتش concate میکنم و تبدیلش میکنم به تایم استمپ و اعتبار سنجی میکنم .
ولی مشکلم توی شیفتهایی هست که میفته توی روز بعد
اون 3 مورد که خدمتتون عرض کردم متداول ترین هاش هست مثل مثلا شیفت 3 که از ساعت 23:00 امروز شروع میشه تا 07:00 روز بعد :
23:00 تا 23:50
23:50 تا 06:00
06:00 تا 07:00
مثلا الان من چطور تشخیص بدم این 06:00 تا 07:00 رو ؟


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام