forked from MapComplete/MapComplete
		
	Fix: fix #1675
This commit is contained in:
		
							parent
							
								
									aa5422b34e
								
							
						
					
					
						commit
						65250d77be
					
				
					 2 changed files with 64 additions and 19 deletions
				
			
		| 
						 | 
					@ -289,6 +289,14 @@ export class OH {
 | 
				
			||||||
     * rules[0].startHour // => 11
 | 
					     * rules[0].startHour // => 11
 | 
				
			||||||
     * rules[3].endHour // => 19
 | 
					     * rules[3].endHour // => 19
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * const rules = OH.ParseRule("Mo 20:00-02:00");
 | 
				
			||||||
 | 
					     * rules.length // => 2
 | 
				
			||||||
 | 
					     * rules[0].weekday // => 0
 | 
				
			||||||
 | 
					     * rules[0].startHour // => 20
 | 
				
			||||||
 | 
					     * rules[0].endHour // => 0
 | 
				
			||||||
 | 
					     * rules[1].weekday // => 1
 | 
				
			||||||
 | 
					     * rules[1].startHour // => 0
 | 
				
			||||||
 | 
					     * rules[1].endHour // => 2
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static ParseRule(rule: string): OpeningHour[] {
 | 
					    public static ParseRule(rule: string): OpeningHour[] {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
| 
						 | 
					@ -414,14 +422,14 @@ export class OH {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
 This function converts a number of ranges (generated by OpeningHours.js) into all the hours of day that a change occurs.
 | 
					This function converts a number of ranges (generated by OpeningHours.js) into all the hours of day that a change occurs.
 | 
				
			||||||
 E.g.
 | 
					E.g.
 | 
				
			||||||
 Monday, some business is opended from 9:00 till 17:00
 | 
					Monday, some business is opended from 9:00 till 17:00
 | 
				
			||||||
 Tuesday from 9:30 till 18:00
 | 
					Tuesday from 9:30 till 18:00
 | 
				
			||||||
 Wednesday from 9:30 till 12:30
 | 
					Wednesday from 9:30 till 12:30
 | 
				
			||||||
 This function will extract all those moments of change and will return 9:00, 9:30, 12:30, 17:00 and 18:00
 | 
					This function will extract all those moments of change and will return 9:00, 9:30, 12:30, 17:00 and 18:00
 | 
				
			||||||
 This list will be sorted
 | 
					This list will be sorted
 | 
				
			||||||
 */
 | 
					*/
 | 
				
			||||||
    public static allChangeMoments(
 | 
					    public static allChangeMoments(
 | 
				
			||||||
        ranges: {
 | 
					        ranges: {
 | 
				
			||||||
            isOpen: boolean
 | 
					            isOpen: boolean
 | 
				
			||||||
| 
						 | 
					@ -507,9 +515,9 @@ export class OH {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
 Calculates when the business is opened (or on holiday) between two dates.
 | 
					Calculates when the business is opened (or on holiday) between two dates.
 | 
				
			||||||
 Returns a matrix of ranges, where [0] is a list of ranges when it is opened on monday, [1] is a list of ranges for tuesday, ...
 | 
					Returns a matrix of ranges, where [0] is a list of ranges when it is opened on monday, [1] is a list of ranges for tuesday, ...
 | 
				
			||||||
  */
 | 
					*/
 | 
				
			||||||
    public static GetRanges(
 | 
					    public static GetRanges(
 | 
				
			||||||
        oh: any,
 | 
					        oh: any,
 | 
				
			||||||
        from: Date,
 | 
					        from: Date,
 | 
				
			||||||
| 
						 | 
					@ -560,6 +568,9 @@ export class OH {
 | 
				
			||||||
        return values
 | 
					        return values
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * OH.parseHHMM("12:30") // => {hours: 12, minutes: 30}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    private static parseHHMM(hhmm: string): { hours: number; minutes: number } {
 | 
					    private static parseHHMM(hhmm: string): { hours: number; minutes: number } {
 | 
				
			||||||
        if (hhmm === undefined || hhmm == null) {
 | 
					        if (hhmm === undefined || hhmm == null) {
 | 
				
			||||||
            return null
 | 
					            return null
 | 
				
			||||||
| 
						 | 
					@ -575,6 +586,10 @@ export class OH {
 | 
				
			||||||
        return hm
 | 
					        return hm
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * OH.ParseHhmmRanges("20:00-22:15") // => [{startHour: 20, startMinutes: 0, endHour: 22, endMinutes: 15}]
 | 
				
			||||||
 | 
					     * OH.ParseHhmmRanges("20:00-02:15") // => [{startHour: 20, startMinutes: 0, endHour: 2, endMinutes: 15}]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    private static ParseHhmmRanges(hhmms: string): {
 | 
					    private static ParseHhmmRanges(hhmms: string): {
 | 
				
			||||||
        startHour: number
 | 
					        startHour: number
 | 
				
			||||||
        startMinutes: number
 | 
					        startMinutes: number
 | 
				
			||||||
| 
						 | 
					@ -641,24 +656,53 @@ export class OH {
 | 
				
			||||||
            endHour: number
 | 
					            endHour: number
 | 
				
			||||||
            endMinutes: number
 | 
					            endMinutes: number
 | 
				
			||||||
        }[]
 | 
					        }[]
 | 
				
			||||||
    ) {
 | 
					    ): {
 | 
				
			||||||
 | 
					        weekday: number
 | 
				
			||||||
 | 
					        startHour: number
 | 
				
			||||||
 | 
					        startMinutes: number
 | 
				
			||||||
 | 
					        endHour: number
 | 
				
			||||||
 | 
					        endMinutes: number
 | 
				
			||||||
 | 
					    }[] {
 | 
				
			||||||
        if ((weekdays ?? null) == null || (timeranges ?? null) == null) {
 | 
					        if ((weekdays ?? null) == null || (timeranges ?? null) == null) {
 | 
				
			||||||
            return null
 | 
					            return null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        const ohs: OpeningHour[] = []
 | 
					        const ohs: OpeningHour[] = []
 | 
				
			||||||
        for (const timerange of timeranges) {
 | 
					        for (const timerange of timeranges) {
 | 
				
			||||||
 | 
					            const overMidnight =
 | 
				
			||||||
 | 
					                !(timerange.endHour === 0 && timerange.endMinutes === 0) &&
 | 
				
			||||||
 | 
					                (timerange.endHour < timerange.startHour ||
 | 
				
			||||||
 | 
					                    (timerange.endHour == timerange.startHour &&
 | 
				
			||||||
 | 
					                        timerange.endMinutes < timerange.startMinutes))
 | 
				
			||||||
            for (const weekday of weekdays) {
 | 
					            for (const weekday of weekdays) {
 | 
				
			||||||
                ohs.push({
 | 
					                if (!overMidnight) {
 | 
				
			||||||
                    weekday: weekday,
 | 
					                    ohs.push({
 | 
				
			||||||
                    startHour: timerange.startHour,
 | 
					                        weekday: weekday,
 | 
				
			||||||
                    startMinutes: timerange.startMinutes,
 | 
					                        startHour: timerange.startHour,
 | 
				
			||||||
                    endHour: timerange.endHour,
 | 
					                        startMinutes: timerange.startMinutes,
 | 
				
			||||||
                    endMinutes: timerange.endMinutes,
 | 
					                        endHour: timerange.endHour,
 | 
				
			||||||
                })
 | 
					                        endMinutes: timerange.endMinutes,
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    ohs.push({
 | 
				
			||||||
 | 
					                        weekday: weekday,
 | 
				
			||||||
 | 
					                        startHour: timerange.startHour,
 | 
				
			||||||
 | 
					                        startMinutes: timerange.startMinutes,
 | 
				
			||||||
 | 
					                        endHour: 0,
 | 
				
			||||||
 | 
					                        endMinutes: 0,
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                    ohs.push({
 | 
				
			||||||
 | 
					                        weekday: (weekday + 1) % 7,
 | 
				
			||||||
 | 
					                        startHour: 0,
 | 
				
			||||||
 | 
					                        startMinutes: 0,
 | 
				
			||||||
 | 
					                        endHour: timerange.endHour,
 | 
				
			||||||
 | 
					                        endMinutes: timerange.endMinutes,
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return ohs
 | 
					        return ohs
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static getMondayBefore(d) {
 | 
					    public static getMondayBefore(d) {
 | 
				
			||||||
        d = new Date(d)
 | 
					        d = new Date(d)
 | 
				
			||||||
        const day = d.getDay()
 | 
					        const day = d.getDay()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,6 +82,7 @@ export default class OpeningHoursInput extends InputElement<string> {
 | 
				
			||||||
        const rules = valueWithoutPrefix.data?.split(";") ?? []
 | 
					        const rules = valueWithoutPrefix.data?.split(";") ?? []
 | 
				
			||||||
        for (const rule of rules) {
 | 
					        for (const rule of rules) {
 | 
				
			||||||
            if (OH.ParsePHRule(rule) !== null) {
 | 
					            if (OH.ParsePHRule(rule) !== null) {
 | 
				
			||||||
 | 
					                // We found the rule containing the public holiday information
 | 
				
			||||||
                ph = rule
 | 
					                ph = rule
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue