From 3a525e68e06366880b92ac1118d83526ffdbe638 Mon Sep 17 00:00:00 2001 From: cimenmus Date: Sun, 4 Aug 2019 18:59:42 +0300 Subject: [PATCH] new store delivery time service --- .../pizzamaxx/android/api/ApiEndPoints.java | 2 +- .../CreateOrderSummaryFragment.java | 273 +++++++++++++----- .../android/model/StoreShiftModel.java | 87 ++---- 3 files changed, 232 insertions(+), 130 deletions(-) diff --git a/app/src/main/java/ch/pizzamaxx/android/api/ApiEndPoints.java b/app/src/main/java/ch/pizzamaxx/android/api/ApiEndPoints.java index ef47ed3..3a7e651 100644 --- a/app/src/main/java/ch/pizzamaxx/android/api/ApiEndPoints.java +++ b/app/src/main/java/ch/pizzamaxx/android/api/ApiEndPoints.java @@ -29,7 +29,7 @@ public class ApiEndPoints { public static final String API_GET_STORE_INFO = PREFIX + "getStoreInfo" + SUFFIX; public static final String API_CHECK_CAMPAIGN_PIZZAPASS = PREFIX + "detectPizzaPassCampaign" + SUFFIX + "&token="; public static final String API_CHECK_CAMPAIGN_KEBAPPASS = PREFIX + "detectKebapPassCampaign" + SUFFIX + "&token="; - public static final String API_CHECK_DELIVERY_TIME = PREFIX + "checkDeliveryTimeService" + SUFFIX; + public static final String API_CHECK_DELIVERY_TIME = PREFIX + "checkDeliveryTimeServiceNew" + SUFFIX; public static final String API_GET_DELIVERY_TIME_OF_STORE = PREFIX + "getDeliveryTimeForStore" + SUFFIX; diff --git a/app/src/main/java/ch/pizzamaxx/android/fragment/createOrder/CreateOrderSummaryFragment.java b/app/src/main/java/ch/pizzamaxx/android/fragment/createOrder/CreateOrderSummaryFragment.java index 2b0b66d..3be76ed 100644 --- a/app/src/main/java/ch/pizzamaxx/android/fragment/createOrder/CreateOrderSummaryFragment.java +++ b/app/src/main/java/ch/pizzamaxx/android/fragment/createOrder/CreateOrderSummaryFragment.java @@ -21,8 +21,11 @@ import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import com.wdullaer.materialdatetimepicker.time.Timepoint; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Date; import java.util.HashMap; import butterknife.BindString; @@ -389,13 +392,9 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { private void showDatePickerDialog() { Calendar nowDate = Calendar.getInstance(); - Calendar maxdate = Calendar.getInstance(); - maxdate.add(Calendar.DAY_OF_YEAR, 7); - //maxdate.add(Calendar.MONTH, 1); - - int nowYear = nowDate.get(Calendar.YEAR); - int nowMonth = nowDate.get(Calendar.MONTH); - int nowDay = nowDate.get(Calendar.DAY_OF_MONTH); + final int nowYear = nowDate.get(Calendar.YEAR); + final int nowMonth = nowDate.get(Calendar.MONTH); + final int nowDay = nowDate.get(Calendar.DAY_OF_MONTH); DatePickerDialog datePickerDialog = DatePickerDialog.newInstance( new DatePickerDialog.OnDateSetListener() { @@ -426,9 +425,10 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { nowDay ); + datePickerDialog.setSelectableDays(generateEnabledDays()); + datePickerDialog.vibrate(false); datePickerDialog.setMinDate(nowDate); - datePickerDialog.setMaxDate(maxdate); //datePickerDialog.autoDismiss(true); datePickerDialog.show(BaseActivity.currentActivity.getFragmentManager(), choosetext); } @@ -436,36 +436,57 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { private void showTimePickerDialog(){ Calendar nowDate = Calendar.getInstance(); + + int orderYear = dateOfOrder.get(Calendar.YEAR); + int orderMonth = dateOfOrder.get(Calendar.MONTH); + int orderDay = dateOfOrder.get(Calendar.DAY_OF_MONTH); + + int nowYear = nowDate.get(Calendar.YEAR); + int nowMonth = nowDate.get(Calendar.MONTH); + int nowDay = nowDate.get(Calendar.DAY_OF_MONTH); + int nowHour = nowDate.get(Calendar.HOUR_OF_DAY); int nowMinute = nowDate.get(Calendar.MINUTE); int nowSecond = nowDate.get(Calendar.SECOND); int selectedDayIndex = dateOfOrder.get(Calendar.DAY_OF_WEEK); - StoreWorkDayModel storeWorkDayModelOfSelectedDay = new StoreWorkDayModel(); + ArrayList workingParts = new ArrayList<>(); switch (selectedDayIndex){ case 1: - storeWorkDayModelOfSelectedDay = storeShiftModel.getSundayShift(); + workingParts = storeShiftModel.getSundayShift(); break; case 2: - storeWorkDayModelOfSelectedDay = storeShiftModel.getMondayShift(); + workingParts = storeShiftModel.getMondayShift(); break; case 3: - storeWorkDayModelOfSelectedDay = storeShiftModel.getTuesdayShift(); + workingParts = storeShiftModel.getTuesdayShift(); break; case 4: - storeWorkDayModelOfSelectedDay = storeShiftModel.getWednesdayShift(); + workingParts = storeShiftModel.getWednesdayShift(); break; case 5: - storeWorkDayModelOfSelectedDay = storeShiftModel.getThursdayShift(); + workingParts = storeShiftModel.getThursdayShift(); break; case 6: - storeWorkDayModelOfSelectedDay = storeShiftModel.getFridayShift(); + workingParts = storeShiftModel.getFridayShift(); break; case 7: - storeWorkDayModelOfSelectedDay = storeShiftModel.getSaturdayShift(); + workingParts = storeShiftModel.getSaturdayShift(); break; } + if(orderYear == nowYear && orderMonth == nowMonth && orderDay == nowDay){ + ArrayList realPartsOfToday = new ArrayList<>(); + for(String part : workingParts){ + if(isPartAvailable(part)){ + realPartsOfToday.add(part); + } + } + if(!realPartsOfToday.isEmpty()){ + workingParts.clear(); + workingParts.addAll(realPartsOfToday); + } + } TimePickerDialog timePickerDialog = TimePickerDialog.newInstance( @@ -494,17 +515,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { true ); - - - int shiftStartHour = Integer.valueOf(storeWorkDayModelOfSelectedDay.getShiftStartTime().substring(0,2)); - int shiftStartMinute = Integer.valueOf(storeWorkDayModelOfSelectedDay.getShiftStartTime().substring(3, 5)); - int shiftEndHour = Integer.valueOf(storeWorkDayModelOfSelectedDay.getShiftEndTime().substring(0,2)); - int shiftEndMinute = Integer.valueOf(storeWorkDayModelOfSelectedDay.getShiftEndTime().substring(3, 5)); - - //timePickerDialog.setMinTime(new Timepoint(shiftStartHour, shiftStartMinute)); - //timePickerDialog.setMaxTime(new Timepoint(shiftEndHour, shiftEndMinute)); - timePickerDialog.setSelectableTimes(generateEnabledTimePoints(storeWorkDayModelOfSelectedDay)); - + timePickerDialog.setSelectableTimes(generateEnabledTimePoints(workingParts)); timePickerDialog.vibrate(false); //timePickerDialog.setMinTime(nowHour, nowMinute, nowSecond); timePickerDialog.show(BaseActivity.currentActivity.getFragmentManager(), choosetext); @@ -937,61 +948,179 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { } */ - private Timepoint[] generateEnabledTimePoints(StoreWorkDayModel storeWorkDayModelOfSelectedDay){ + private Calendar[] generateEnabledDays(){ - int shiftStartHour = Integer.valueOf(storeWorkDayModelOfSelectedDay.getShiftStartTime().substring(0,2)); - int shiftStartMinute = Integer.valueOf(storeWorkDayModelOfSelectedDay.getShiftStartTime().substring(3, 5)); - int shiftEndHour = Integer.valueOf(storeWorkDayModelOfSelectedDay.getShiftEndTime().substring(0,2)); - int shiftEndMinute = Integer.valueOf(storeWorkDayModelOfSelectedDay.getShiftEndTime().substring(3, 5)); + ArrayList enabledDayList = new ArrayList<>(); - int breakStartHour = Integer.valueOf(storeWorkDayModelOfSelectedDay.getBreakStartTime().substring(0,2)); - int breakStartMinute = Integer.valueOf(storeWorkDayModelOfSelectedDay.getBreakStartTime().substring(3, 5)); - int breakEndHour = Integer.valueOf(storeWorkDayModelOfSelectedDay.getBreakEndTime().substring(0,2)); - int breakEndMinute = Integer.valueOf(storeWorkDayModelOfSelectedDay.getBreakEndTime().substring(3, 5)); + for(int i = 1; i < 8; i++){ - int hour = shiftStartHour; - int minute = shiftStartMinute; + Calendar calendar = Calendar.getInstance(); + ArrayList dayParts = new ArrayList<>(); + + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + + switch ((dayOfWeek + i) % 7){ + case 0: + dayParts = storeShiftModel.getSaturdayShift(); + break; + case 1: + dayParts = storeShiftModel.getSundayShift(); + break; + case 2: + dayParts = storeShiftModel.getMondayShift(); + break; + case 3: + dayParts = storeShiftModel.getTuesdayShift(); + break; + case 4: + dayParts = storeShiftModel.getWednesdayShift(); + break; + case 5: + dayParts = storeShiftModel.getThursdayShift(); + break; + case 6: + dayParts = storeShiftModel.getFridayShift(); + break; + } + + if(!dayParts.isEmpty()){ + calendar.add(Calendar.DAY_OF_YEAR, i); + enabledDayList.add(calendar); + } + } + + Calendar calendar = Calendar.getInstance(); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + ArrayList todayParts = new ArrayList<>(); + switch (dayOfWeek){ + case 1: + todayParts = storeShiftModel.getSundayShift(); + break; + case 2: + todayParts = storeShiftModel.getMondayShift(); + break; + case 3: + todayParts = storeShiftModel.getTuesdayShift(); + break; + case 4: + todayParts = storeShiftModel.getWednesdayShift(); + break; + case 5: + todayParts = storeShiftModel.getThursdayShift(); + break; + case 6: + todayParts = storeShiftModel.getFridayShift(); + break; + case 7: + todayParts = storeShiftModel.getSaturdayShift(); + break; + } + if(isDayAvailable(todayParts)){ + enabledDayList.add(Calendar.getInstance()); + } + return enabledDayList.toArray(new Calendar[enabledDayList.size()]); + + } + + private Timepoint[] generateEnabledTimePoints(ArrayList workingParts){ ArrayList enabledTimePointList = new ArrayList<>(); - // öğleden tatilinden önceki kısım - while (hour <= breakStartHour){ - enabledTimePointList.add(new Timepoint(hour, minute)); - minute++; - if(minute == 60){ - minute = 0; - hour += 1; - } + try { + for(String part : workingParts){ + part = part.replace(" ", ""); + String[] array = part.split("-"); + String partStart = array[0]; + String partEnd = array[1]; - if(hour == breakStartHour && minute == breakStartMinute){ - break; + int partStartHour = Integer.valueOf(partStart.substring(0,2)); + int partStartMinute = Integer.valueOf(partStart.substring(3, 5)); + int partEndHour = Integer.valueOf(partEnd.substring(0,2)); + int partEndMinute = Integer.valueOf(partEnd.substring(3, 5)); + + int hour = partStartHour; + int minute = partStartMinute; + + while (hour <= partEndHour){ + enabledTimePointList.add(new Timepoint(hour, minute)); + minute++; + if(minute == 60){ + minute = 0; + hour += 1; + } + + if(hour == partEndHour && minute > partEndMinute){ + break; + } + } } + }catch (Exception e){ + return enabledTimePointList.toArray(new Timepoint[enabledTimePointList.size()]); + } - - // öğle tatilinden sonraki kısım - if(breakEndMinute == 59){ - breakEndMinute = 0; - breakEndHour += 1; - } - - hour = breakEndHour; - minute = breakEndMinute; - - - while (hour <= shiftEndHour){ - enabledTimePointList.add(new Timepoint(hour, minute)); - minute++; - if(minute == 60){ - minute = 0; - hour += 1; - } - - if(hour == shiftEndHour && minute == shiftEndMinute){ - break; - } - } - return enabledTimePointList.toArray(new Timepoint[enabledTimePointList.size()]); } + private boolean isDayAvailable(ArrayList parts){ + if(parts.size() < 2){ + return false; + } + for(String part : parts){ + if(isPartAvailable(part)){ + return true; + } + } + return false; + } + + private boolean isPartAvailable(String part){ + try { + Date nowDate = Calendar.getInstance().getTime(); + DateFormat dateFormat = new SimpleDateFormat("HH:mm"); + String nowTimeString = dateFormat.format(nowDate); + part = part.replace(" ", ""); + String[] array = part.split("-"); + String partStart = array[0]; + String partEnd = array[1]; + + int partStartHour = Integer.valueOf(partStart.substring(0,2)); + int partStartMinute = Integer.valueOf(partStart.substring(3, 5)); + int partEndHour = Integer.valueOf(partEnd.substring(0,2)); + int partEndMinute = Integer.valueOf(partEnd.substring(3, 5)); + + Calendar partStartCalendar = Calendar.getInstance(); + partStartCalendar.set(Calendar.HOUR_OF_DAY, partStartHour); + partStartCalendar.set(Calendar.MINUTE, partStartMinute); + partStartCalendar.set(Calendar.SECOND, 0); + Date partStartDate = partStartCalendar.getTime(); + + Calendar partEndCalendar = Calendar.getInstance(); + partEndCalendar.set(Calendar.HOUR_OF_DAY, partEndHour); + partEndCalendar.set(Calendar.MINUTE, partEndMinute); + partEndCalendar.set(Calendar.SECOND, 0); + Date partEndDate = partEndCalendar.getTime(); + + if(partStartDate.after(nowDate) && partEndDate.after(nowDate)){ + return true; + } + else { + return false; + } + + /* + String[] array2 = nowTimeString.split(":"); + String nowHourString = array2[0]; + String nowMinuteString = array2[1]; + + int nowHour = Integer.valueOf(nowHourString); + int nowMinute = Integer.valueOf(nowMinuteString); + + return nowHour >= partStartHour && nowHour <= partEndHour && + nowMinute >= partStartMinute && nowMinute <= partEndMinute; + */ + }catch (Exception e){ + return false; + } + } + } diff --git a/app/src/main/java/ch/pizzamaxx/android/model/StoreShiftModel.java b/app/src/main/java/ch/pizzamaxx/android/model/StoreShiftModel.java index 38c1eb0..ce4894e 100644 --- a/app/src/main/java/ch/pizzamaxx/android/model/StoreShiftModel.java +++ b/app/src/main/java/ch/pizzamaxx/android/model/StoreShiftModel.java @@ -2,83 +2,56 @@ package ch.pizzamaxx.android.model; import com.google.gson.annotations.SerializedName; +import java.util.ArrayList; + public class StoreShiftModel { - @SerializedName("1") - private StoreWorkDayModel mondayShift; + @SerializedName("monday") + private ArrayList mondayShift; - @SerializedName("2") - private StoreWorkDayModel tuesdayShift; + @SerializedName("tuesday") + private ArrayList tuesdayShift; - @SerializedName("3") - private StoreWorkDayModel wednesdayShift; + @SerializedName("wednesday") + private ArrayList wednesdayShift; - @SerializedName("4") - private StoreWorkDayModel thursdayShift; + @SerializedName("thursday") + private ArrayList thursdayShift; - @SerializedName("5") - private StoreWorkDayModel fridayShift; + @SerializedName("friday") + private ArrayList fridayShift; - @SerializedName("6") - private StoreWorkDayModel saturdayShift; + @SerializedName("saturday") + private ArrayList saturdayShift; - @SerializedName("7") - private StoreWorkDayModel sundayShift; + @SerializedName("sunday") + private ArrayList sundayShift; - public StoreWorkDayModel getMondayShift() { - return mondayShift; + public ArrayList getMondayShift() { + return mondayShift != null ? mondayShift : new ArrayList(); } - public void setMondayShift(StoreWorkDayModel mondayShift) { - this.mondayShift = mondayShift; + public ArrayList getTuesdayShift() { + return tuesdayShift != null ? tuesdayShift : new ArrayList(); } - public StoreWorkDayModel getTuesdayShift() { - return tuesdayShift; + public ArrayList getWednesdayShift() { + return wednesdayShift != null ? wednesdayShift : new ArrayList(); } - public void setTuesdayShift(StoreWorkDayModel tuesdayShift) { - this.tuesdayShift = tuesdayShift; + public ArrayList getThursdayShift() { + return thursdayShift != null ? thursdayShift : new ArrayList(); } - public StoreWorkDayModel getWednesdayShift() { - return wednesdayShift; + public ArrayList getFridayShift() { + return fridayShift != null ? fridayShift : new ArrayList(); } - public void setWednesdayShift(StoreWorkDayModel wednesdayShift) { - this.wednesdayShift = wednesdayShift; + public ArrayList getSaturdayShift() { + return saturdayShift != null ? saturdayShift : new ArrayList(); } - public StoreWorkDayModel getThursdayShift() { - return thursdayShift; + public ArrayList getSundayShift() { + return sundayShift != null ? sundayShift : new ArrayList(); } - - public void setThursdayShift(StoreWorkDayModel thursdayShift) { - this.thursdayShift = thursdayShift; - } - - public StoreWorkDayModel getFridayShift() { - return fridayShift; - } - - public void setFridayShift(StoreWorkDayModel fridayShift) { - this.fridayShift = fridayShift; - } - - public StoreWorkDayModel getSaturdayShift() { - return saturdayShift; - } - - public void setSaturdayShift(StoreWorkDayModel saturdayShift) { - this.saturdayShift = saturdayShift; - } - - public StoreWorkDayModel getSundayShift() { - return sundayShift; - } - - public void setSundayShift(StoreWorkDayModel sundayShift) { - this.sundayShift = sundayShift; - } - }