updates for property hire
This commit is contained in:
1 parent
e190f1e23c
commit
f71fcdcefa
21 files changed
+400
-122
No files matched your search
@@ -0,0 +1,17 @@
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
property_hire (0.0.1)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
property_hire!
|
||||
|
||||
BUNDLED WITH
|
||||
1.17.3
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Skipped minification because the original files appears to be already minified.
|
||||
* Original file: /npm/fullcalendar@3.10.5/dist/locale-all.js
|
||||
*
|
||||
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
|
||||
*/
|
||||
!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=438)}([function(a,t){a.exports=e},function(e,t){e.exports=a},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(72);var n=t(1);n.datepickerLocale("af","af",{closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("af",{buttonText:{year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(74);var n=t(1);n.datepickerLocale("ar-dz","ar-DZ",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-dz",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على السLine truncated
|
||||
relativeTime:{future:"za %s",past:"před %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(98);var n=t(1);n.datepickerLocale("da","da",{closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("da",{buttonText:{month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(100);var n=t(1);n.datepickerLocale("de-at","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("de-at",{buttonText:{year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}return e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(102);var n=t(1);n.datepickerLocale("de-ch","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfteLine truncated
|
||||
L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(128);var n=t(1);n.datepickerLocale("fa","fa",{closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fa",{buttonText:{month:"ماه",week:"هفته",day:"روز",list:"برنامه"},allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},t={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};return e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysShort:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,a,t){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"%d ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(130);var n=t(1);n.datepickerLocale("fi","fi",{closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fi",{buttonText:{month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,n,r){var s="";switch(n){case"s":return r?"muutaman sekunnin":"muutama sekunti";case"ss":return r?"sekunnin":"sekuntia";case"m":return r?"minuutin":"minuutti";case"mm":s=r?"minuutin":"minuuttia";break;case"h":return r?"tunnin":"tunti";case"hh":s=r?"tunnin":"tuntia";break;case"d":return r?"päivän":"päivä";case"dd":s=r?"päivän":"päivää";break;case"M":return r?"kuukauden":"kuukausi";case"MM":s=r?"kuuLine truncated
|
||||
prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),n.locale("ja",{buttonText:{month:"月",week:"週",day:"日",list:"予定リスト"},allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"令和",narrow:"㋿",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"平成",narrow:"㍻",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"昭和",narrow:"㍼",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"大正",narrow:"㍽",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"明治",narrow:"㍾",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"西暦",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"紀元前",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(元|\d+)年/,eraYearOrdinalParse:function(e,a){return"元"===a[1]?1:parseInt(a[1]||e,10)},months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,a,t){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()!==this.week()?"[来週]dddd LT":"dddd LT"},lastDay:"[昨日] LT",lastWeek:function(e){return this.week()!==e.week()?"[先週]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(e,a){switch(a){case"y":return 1===e?"元年":e+"年";case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(156);var n=t(1);n.datepickerLocale("ka","ka",{closeText:"დახურვა",prevText:"წინა",nextText:"შემდეგი",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვი","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორ","სა","ოთ","ხუ","პა","შა"],weekHeader:"კვ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ka",{buttonText:{month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ka",{months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაLine truncated
|
||||
weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._må._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(182);var n=t(1);n.datepickerLocale("pl","pl",{closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pl",{buttonText:{month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+(a(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return r+(a(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return r+(a(e)?"godziny":"godzin");case"MM":return r+(a(e)?"miesiące":"miesięcy");case"yy":return r+(a(e)?"lata":"lat")}}var n="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");return e.defineLocale("pl",{months:function(e,a){return e?""===a?"("+r[e.month()]+"|"+n[e.month()]+")":/D MMMM/.test(a)?r[e.month()]:n[e.month()]:n},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:t,m:t,mm:t,h:t,hh:t,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:t,y:"rok",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(184);var n=t(1);n.datepickerLocale("pt-br","pt-BR",{closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pt-br",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysSLine truncated
|
||||
monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("tr",{buttonText:{next:"ileri",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};return e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,t){switch(t){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var n=e%10,r=e%100-n,s=e>=100?100:null;return e+(a[n]||a[r]||a[s])}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(208);var n=t(1);n.datepickerLocale("uk","uk",{closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("uk",{buttonText:{month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split("_");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===n?t?"хвилина":"хвилину":"h"===n?t?"година":"годину":e+" "+a(r[n],+e)}function n(e,a){var t,n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===e?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):e?(t=/(\[[ВвУу]\]) ?dddd/.test(a)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(a)?"genitive":"nominative",n[t][e.day()]):n.nominative}function r(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}return e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпеLine truncated
|
||||
@@ -104,9 +104,10 @@ window.getDateString = function(date, format,is_chinese) {
|
||||
}
|
||||
return formattedDate;
|
||||
};
|
||||
var Calendar = function(dom, property_id, valid_range, currentView, display_hire_event){
|
||||
var Calendar = function(dom, property_id, valid_range, currentView, display_hire_event, locale = "en"){
|
||||
var c = this;
|
||||
display_hire_event = (display_hire_event == undefined ? true : display_hire_event);
|
||||
this.locale = locale.replace("_","-");
|
||||
this.title = $("#current_title");
|
||||
this.calendar_dom = $(dom);
|
||||
this.nextBtn = $("#next_month_btn");
|
||||
@@ -136,6 +137,7 @@ var Calendar = function(dom, property_id, valid_range, currentView, display_hire
|
||||
selectable: true,
|
||||
width: "100%",
|
||||
validRange: valid_range,
|
||||
locale: c.locale,
|
||||
events: function(args, success_callback, fail_callback) {
|
||||
var start = args.start;
|
||||
var end = args.end;
|
||||
@@ -345,14 +347,17 @@ var EventDialog = function(calendar,event){
|
||||
event_quick_view = $('<div class="calendar-modal" style="display:none;"></div>');
|
||||
template = '<div class="modal-content">' +
|
||||
'<div class="modal-header">' +
|
||||
'<div class="property_title">' + _event.property_title + '</div>' +
|
||||
'<button type="button" class="close event-close-btn" data-dismiss="modal" aria-hidden="true">×</button>' +
|
||||
'<h3>' + _event.title + '</h3>' +
|
||||
'</div>' +
|
||||
'<div class="modal-body">' +
|
||||
'<div class="event_summary">' + time_string + '</br>' + _event.hiring_person_name + '</div>' + _event.note +
|
||||
(_event.error_message ? ("<br><span style=\"color: #FC4040;\">" + _event.error_message + "</span>") : "")
|
||||
(_event.error_message ? ("<br><span style=\"color: #FC4040;\">" + _event.error_message + "</span>") : "") +
|
||||
'</div>' +
|
||||
'<div class="modal-footer" />' +
|
||||
'<div class="modal-footer">' +
|
||||
(_event.view_button ? '<a href="' + _event.view_path + '" class="btn view-btn">'+ _event.view_path_name +'</a>' : "") +
|
||||
'</div>'
|
||||
'</div>';
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ class Admin::PropertyHiresController < OrbitAdminController
|
||||
end
|
||||
|
||||
def show
|
||||
@table_fields = ["property_hire.hiring_person_name", "property_hire.reason_for_hire", "property_hire.hiring_person_number", "property_hire.period", "property_hire.passed", :actions]
|
||||
@table_fields = ["property_hire.hiring_person_name", "property_hire.reason_for_hire", "property_hire.hiring_person_number", "property_hire.period", "property_hire.passed", "property_hire.actions"]
|
||||
@property = Property.where(:uid => params[:id].split("-").last).first rescue nil
|
||||
@bookings = @property.p_hires.desc(:created_at).page(params[:page]).per(10)
|
||||
end
|
||||
@@ -255,6 +255,24 @@ class Admin::PropertyHiresController < OrbitAdminController
|
||||
@attribute_type = 'property'
|
||||
@class = 'properties'
|
||||
end
|
||||
|
||||
def checkforthread
|
||||
running = !File.exists?("public/uploads/reservation_export/#{params[:property_id]}/#{params[:property_title]}.xlsx")
|
||||
render :json => {"status" => running}.to_json
|
||||
end
|
||||
|
||||
def export_reservation_data
|
||||
property = Property.find(params[:id])
|
||||
title = property.title.gsub(/[ "'*@#$%^&()+=;:.,?>|\\\/<~_!:,、。!?;「」〈〉【】/]/,'')
|
||||
f = "public/uploads/reservation_export/#{property.id}/#{title}.xlsx"
|
||||
File.delete(f) if File.exists?(f)
|
||||
url = request.host_with_port
|
||||
Thread.new do
|
||||
system("rake property_hire_tasks:prepare_download[#{property.id},#{url}] >> #{Rails.root}/log/rake.log &")
|
||||
end
|
||||
render :json => {"success" => true, "title" => title}.to_json
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def settings_params
|
||||
|
||||
@@ -5,6 +5,11 @@ class PropertyHiresController < ApplicationController
|
||||
properties = Property.can_display.filter_by_categories.sort_order
|
||||
url = "/#{I18n.locale}#{OrbitHelper.page.get_url}"
|
||||
data = index_data(properties, url)
|
||||
filterprops = data.dup
|
||||
filterprops.insert(0,{
|
||||
"title" => t("property_hire.all_properties"),
|
||||
"id" => "all&page_id=" + OrbitHelper.page.id.to_s
|
||||
})
|
||||
headers = [
|
||||
{
|
||||
"column" => t("property_hire.title")
|
||||
@@ -21,9 +26,15 @@ class PropertyHiresController < ApplicationController
|
||||
]
|
||||
{
|
||||
"properties" => data,
|
||||
"filterprops" => filterprops,
|
||||
"headers" => headers,
|
||||
"extras" => {
|
||||
"first_property_id" => data.first["id"]
|
||||
"first_property_id" => filterprops.first["id"],
|
||||
"today" => t("property_hire.today"),
|
||||
"day" => t("property_hire.day"),
|
||||
"week" => t("property_hire.week"),
|
||||
"month" => t("property_hire.month"),
|
||||
"language" => OrbitHelper.get_site_locale
|
||||
},
|
||||
"manage_booking_btn" => (OrbitHelper.current_user.nil? ? false : true),
|
||||
"manage_booking" => t("property_hire.manage_booking"),
|
||||
@@ -33,8 +44,7 @@ class PropertyHiresController < ApplicationController
|
||||
end
|
||||
|
||||
def index_data(properties, url)
|
||||
ma = ModuleApp.find_by_key("property_hire")
|
||||
is_user_manager = OrbitHelper.current_user && (OrbitHelper.current_user.is_admin? || OrbitHelper.current_user.is_manager?(ma) || OrbitHelper.current_user.is_sub_manager?(ma))
|
||||
is_user_manager = check_if_user_is_manager?
|
||||
data = properties.collect do |property|
|
||||
actions = []
|
||||
url_to_show = "#{url}/#{property.to_param}?method=hire"
|
||||
@@ -333,8 +343,7 @@ class PropertyHiresController < ApplicationController
|
||||
end
|
||||
allow_no_logins_user = PropertyHireSetting.first.allow_no_logins_user
|
||||
all_day_settings = property.all_day_settings.map{|d,settings| [d,settings.map{|s| [s.id.to_s,s.title]}]}.to_h
|
||||
ma = ModuleApp.find_by_key("property_hire")
|
||||
is_user_manager = OrbitHelper.current_user && (OrbitHelper.current_user.is_admin? || OrbitHelper.current_user.is_manager?(ma) || OrbitHelper.current_user.is_sub_manager?(ma))
|
||||
is_user_manager = check_if_user_is_manager?
|
||||
{
|
||||
"hire" => hire,
|
||||
"property" => property,
|
||||
@@ -344,7 +353,8 @@ class PropertyHiresController < ApplicationController
|
||||
"allow_no_logins_user" => allow_no_logins_user,
|
||||
"carousel_display_style" => "width: #{property.carousel_image_width};",
|
||||
"all_day_settings" => all_day_settings,
|
||||
"recover" => recover
|
||||
"recover" => recover,
|
||||
"language" => OrbitHelper.get_site_locale
|
||||
}
|
||||
end
|
||||
|
||||
@@ -354,61 +364,22 @@ class PropertyHiresController < ApplicationController
|
||||
render :json => data.to_json
|
||||
end
|
||||
|
||||
|
||||
|
||||
def get_bookings
|
||||
events =[]
|
||||
allevents = []
|
||||
property = @property = Property.find(params[:property_id]) rescue nil
|
||||
unless property.nil?
|
||||
if params[:start].present? && params[:end].present?
|
||||
sdt = Time.at(params[:start].to_i)
|
||||
edt = Time.at(params[:end].to_i)
|
||||
events = PHire.monthly_event(sdt,edt,params[:property_id],property.set_availability)
|
||||
re = PHire.recurring_event(sdt,edt,params[:property_id],property.set_availability)
|
||||
events = events.map{|e| e.as_json}
|
||||
allevents = events.inject(re, :<<)
|
||||
allevents = allevents.sort_by{|e| e[:start]}
|
||||
@need_check_events = allevents.map{|e| [e[:date],e[:s_id]]}
|
||||
@special_unavailable_dates = property.special_unavailable_dates.map{|dt| Date.parse(dt)}
|
||||
ma = ModuleApp.find_by_key("property_hire")
|
||||
is_user_manager = OrbitHelper.current_user && (OrbitHelper.current_user.is_admin? || OrbitHelper.current_user.is_manager?(ma) || OrbitHelper.current_user.is_sub_manager?(ma))
|
||||
|
||||
if property.set_availability && params[:display_hire_event] == "true"
|
||||
check_setting = property.set_unavailibility && (property.property_day_settings.where(:enable=>false).count != 0)
|
||||
@check_start_time = property.start_time.blank? ? "00:00" : property.start_time
|
||||
@check_end_time = property.end_time.blank? ? "24:00" : property.end_time
|
||||
@check_start_date = property.start_date ? property.start_date.to_date : nil
|
||||
@check_end_date = property.end_date ? property.end_date.to_date : nil
|
||||
if check_setting
|
||||
if (@check_start_date && @check_start_date > edt) || (@check_end_date && @check_end_date < sdt)
|
||||
check_setting = false
|
||||
end
|
||||
end
|
||||
all_day_settings = property.all_day_settings.map{|d,settings| [d,settings.map{|s| [s.start_time,s.end_time,s.id.to_s,s.title,s.reservation_limit,s.enable]}]}.to_h
|
||||
if all_day_settings.count != 0
|
||||
time_now = Time.zone.now
|
||||
if is_user_manager
|
||||
get_start_time = property.p_open_start_time
|
||||
get_end_time = property.p_open_end_time
|
||||
else
|
||||
get_start_time = [sdt,time_now].max
|
||||
get_end_time = edt
|
||||
end
|
||||
if property.set_unavailibility
|
||||
if property.can_hire_before_months != 0
|
||||
get_end_time = [time_now + (property.can_hire_before_months).send("month"),edt].min
|
||||
end
|
||||
end
|
||||
if property.can_reserve || is_user_manager
|
||||
allevents += generate_all_reserve_buttons(get_start_time,get_end_time,all_day_settings,check_setting)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
if @special_unavailable_dates.count > 0
|
||||
allevents += special_unavailable_dates_labels(property)
|
||||
end
|
||||
if params[:property_id] == "all"
|
||||
categories = Page.find(params["page_id"]).categories rescue []
|
||||
properties = Property.where(:category_id.in => categories)
|
||||
properties.each do |property|
|
||||
allevents += get_each_booking(property)
|
||||
end
|
||||
else
|
||||
property = Property.find(params[:property_id]) rescue nil
|
||||
allevents = get_each_booking(property)
|
||||
end
|
||||
|
||||
respond_to do |format|
|
||||
format.html { render json: allevents.to_json }# index.html.erb
|
||||
format.json { render json: allevents.to_json }
|
||||
@@ -428,10 +399,7 @@ class PropertyHiresController < ApplicationController
|
||||
if @special_unavailable_dates.include?(date)
|
||||
available = false
|
||||
end
|
||||
|
||||
need_check_unavailable = (@check_start_date.nil? || date >= @check_start_date) && (@check_end_date.nil? || date <= @check_end_date)
|
||||
|
||||
if need_check_unavailable
|
||||
if DateTime.now >= (@property.start_date || DateTime.now - 1.day) && DateTime.now <= (@property.end_date || DateTime.now + 1.month)
|
||||
if @property.hours_restriction > 0 && @is_user_manager === false
|
||||
check = false
|
||||
sd = nil
|
||||
@@ -463,7 +431,7 @@ class PropertyHiresController < ApplicationController
|
||||
end
|
||||
|
||||
if available
|
||||
if need_check_unavailable
|
||||
if DateTime.now >= (@property.start_date || DateTime.now - 1.day) && DateTime.now <= (@property.end_date || DateTime.now + 1.month)
|
||||
available = date > (DateTime.now + (@property.need_hire_before).send(@property.need_hire_before_unit))
|
||||
end
|
||||
end
|
||||
@@ -510,8 +478,7 @@ class PropertyHiresController < ApplicationController
|
||||
@endt = endt
|
||||
@weeknumber = 0
|
||||
@monthnumber = 0
|
||||
ma = ModuleApp.find_by_key("property_hire")
|
||||
@is_user_manager = OrbitHelper.current_user && (OrbitHelper.current_user.is_admin? || OrbitHelper.current_user.is_manager?(ma) || OrbitHelper.current_user.is_sub_manager?(ma))
|
||||
@is_user_manager = check_if_user_is_manager?
|
||||
def generate_events(start_wday,end_wday,type=0,start_validate=false)
|
||||
if type == 0
|
||||
(start_wday..end_wday).each_with_index do |wday,i|
|
||||
@@ -536,6 +503,7 @@ class PropertyHiresController < ApplicationController
|
||||
end
|
||||
@need_check_events = @need_check_events[(i+1)..-1]
|
||||
settings = @all_day_settings[wday_str]
|
||||
|
||||
if check_events.count != 0
|
||||
settings = settings.select do |s|
|
||||
flag = true
|
||||
@@ -558,6 +526,7 @@ class PropertyHiresController < ApplicationController
|
||||
if settings.count != 0
|
||||
@allevents << reserve_calendar_event(@start_date,@display_title,settings)
|
||||
end
|
||||
|
||||
end
|
||||
@start_date += 1.day
|
||||
if @start_date > @end_date
|
||||
@@ -640,4 +609,62 @@ class PropertyHiresController < ApplicationController
|
||||
return p_hire_params
|
||||
end
|
||||
|
||||
def get_each_booking(property)
|
||||
events =[]
|
||||
allevents = []
|
||||
@property = property
|
||||
|
||||
unless property.nil?
|
||||
if params[:start].present? && params[:end].present?
|
||||
sdt = Time.at(params[:start].to_i)
|
||||
edt = Time.at(params[:end].to_i)
|
||||
events = PHire.monthly_event(sdt,edt,property.id.to_s,property.set_availability)
|
||||
re = PHire.recurring_event(sdt,edt,property.id.to_s,property.set_availability)
|
||||
events = events.map{|e| e.as_json}
|
||||
allevents = events.inject(re, :<<)
|
||||
allevents = allevents.sort_by{|e| e[:start]}
|
||||
@need_check_events = allevents.map{|e| [e[:date],e[:s_id]]}
|
||||
@special_unavailable_dates = property.special_unavailable_dates.map{|dt| Date.parse(dt)}
|
||||
is_user_manager = check_if_user_is_manager?
|
||||
if property.set_availability && params[:display_hire_event] == "true"
|
||||
check_setting = property.set_unavailibility && (property.property_day_settings.where(:enable=>false).count != 0)
|
||||
@check_start_time = property.start_time.blank? ? "00:00" : property.start_time
|
||||
@check_end_time = property.end_time.blank? ? "24:00" : property.end_time
|
||||
@check_start_date = property.start_date.to_date rescue nil
|
||||
@check_end_date = property.end_date.to_date rescue nil
|
||||
if check_setting
|
||||
if (@check_start_date > edt rescue false) || (@check_end_date < sdt rescue false)
|
||||
check_setting = false
|
||||
end
|
||||
end
|
||||
|
||||
all_day_settings = property.all_day_settings.map{|d,settings| [d,settings.map{|s| [s.start_time,s.end_time,s.id.to_s,s.title,s.reservation_limit,s.enable]}]}.to_h
|
||||
if all_day_settings.count != 0
|
||||
time_now = Time.zone.now
|
||||
if is_user_manager
|
||||
get_start_time = property.p_open_start_time
|
||||
get_end_time = property.p_open_end_time
|
||||
else
|
||||
get_start_time = [sdt,time_now].max
|
||||
get_end_time = edt
|
||||
end
|
||||
if property.set_unavailibility
|
||||
if property.can_hire_before_months != 0
|
||||
get_end_time = [time_now + (property.can_hire_before_months).send("month"),edt].min
|
||||
end
|
||||
end
|
||||
if property.can_reserve || is_user_manager
|
||||
allevents += generate_all_reserve_buttons(get_start_time,get_end_time,all_day_settings,check_setting)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
if @special_unavailable_dates.count > 0
|
||||
allevents += special_unavailable_dates_labels(property)
|
||||
end
|
||||
end
|
||||
end
|
||||
return allevents
|
||||
end
|
||||
|
||||
end
|
||||
@@ -35,7 +35,8 @@ module Admin::PropertyHiresHelper
|
||||
return {"success" => false, "msg" => I18n.t("property_hire.starting_time_cannot_be_greater_than_ending_time")}
|
||||
end
|
||||
end
|
||||
available_flag = property.is_available_for_hire?(stime, etime, interval, recurring_end_date, time_setting_id, OrbitHelper.current_user.member_profile)
|
||||
mp = OrbitHelper.current_user.member_profile rescue nil
|
||||
available_flag = property.is_available_for_hire?(stime, etime, interval, recurring_end_date, time_setting_id, mp)
|
||||
if available_flag == 1
|
||||
if property.not_yet_hired?(stime, etime, interval, recurring_end_date,params[:phire_id], time_setting_id)
|
||||
data = {"success" => true}
|
||||
@@ -83,6 +84,15 @@ module Admin::PropertyHiresHelper
|
||||
</div>"
|
||||
text.html_safe
|
||||
end
|
||||
def check_if_user_is_manager?
|
||||
ma = ModuleApp.find_by_key("property_hire")
|
||||
if OrbitHelper.current_user.nil?
|
||||
is_user_manager = false
|
||||
else
|
||||
is_user_manager = (OrbitHelper.current_user.is_admin? || OrbitHelper.current_user.is_manager?(ma) || OrbitHelper.current_user.is_sub_manager?(ma))
|
||||
end
|
||||
return is_user_manager
|
||||
end
|
||||
module HireMethod
|
||||
extend ActionView::Helpers::UrlHelper
|
||||
extend ActionView::Helpers::TagHelper
|
||||
|
||||
+14
-1
@@ -41,6 +41,8 @@ class PHire
|
||||
endt = self.end_time
|
||||
recurring = false
|
||||
datet = self.date
|
||||
classNames = []
|
||||
viewButton = false
|
||||
if options[:startt]
|
||||
startt = options[:startt]
|
||||
end
|
||||
@@ -53,10 +55,17 @@ class PHire
|
||||
if options[:recurring]
|
||||
recurring = options[:recurring]
|
||||
end
|
||||
if !OrbitHelper.current_user.nil?
|
||||
if OrbitHelper.current_user.member_profile.id.to_s == self.hiring_person_id
|
||||
classNames = ["mybooking"]
|
||||
viewButton = true
|
||||
end
|
||||
end
|
||||
title = startt.strftime("%H:%M") + " ~ " + endt.strftime("%H:%M") + " " + self.hiring_person_name
|
||||
{
|
||||
:id => self.id.to_s,
|
||||
# :title => (self.reason_for_hire.to_s + " "+ self.tmp_reason_for_hire.to_s).html_safe,
|
||||
:property_title => self.property.title,
|
||||
:title => title,
|
||||
:hiring_person_id => self.hiring_person_id,
|
||||
:hiring_person_name => self.hiring_person_name,
|
||||
@@ -69,7 +78,11 @@ class PHire
|
||||
:error_message => (self.passed ? nil : "Not approved"),
|
||||
:s_id=>self.property_day_setting_id.to_s,
|
||||
:date=>datet,
|
||||
:recurring=>recurring
|
||||
:recurring=>recurring,
|
||||
:classNames => classNames,
|
||||
:view_button => viewButton,
|
||||
:view_path => "/#{OrbitHelper.get_site_locale}/admin/property_hires/#{self.id.to_s}/show_booking_details",
|
||||
:view_path_name => I18n.t("property_hire.view")
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
+15
-16
@@ -148,10 +148,9 @@ class Property
|
||||
end
|
||||
|
||||
def can_reserve
|
||||
now = Time.now
|
||||
start_time = self.p_hire_start_time || now
|
||||
end_time = self.p_hire_end_time || now
|
||||
return now >= start_time && end_time >= now
|
||||
start_time = self.p_hire_start_time || Time.now
|
||||
end_time = self.p_hire_end_time || (Time.now + 1.month)
|
||||
return Time.now >= start_time && end_time >= Time.now
|
||||
end
|
||||
|
||||
def p_hire_fields_enabled
|
||||
@@ -307,7 +306,9 @@ class Property
|
||||
MemberProfile.find(self.owners) rescue []
|
||||
end
|
||||
|
||||
def get_user_total_user_hired_hours(member_profile_id, start_time, end_time)
|
||||
def get_user_total_user_hired_hours(start_time, end_time)
|
||||
member_profile_id = OrbitHelper.current_user.member_profile.id.to_s rescue nil
|
||||
return 0 if member_profile_id.nil?
|
||||
hires = self.p_hires.where(:hiring_person_id => member_profile_id, :start_time.gte => start_time, :end_time.lte => end_time)
|
||||
total_hours = 0.0
|
||||
hires.each do |hire|
|
||||
@@ -319,9 +320,7 @@ class Property
|
||||
|
||||
def is_available_for_hire?(stime, etime, interval = nil, recurring_end_date = nil, time_setting_id = nil, member_profile)
|
||||
available = 0
|
||||
ma = ModuleApp.find_by_key("property_hire")
|
||||
user = member_profile.user
|
||||
is_user_manager = (user.is_admin? || user.is_manager?(ma) || user.is_sub_manager?(ma))
|
||||
is_user_manager = Admin::PropertyHiresController.helpers.check_if_user_is_manager?
|
||||
return 1 if is_user_manager == true
|
||||
return 1 if self.set_unavailibility == false
|
||||
return 1 if self.weekdays.empty? && self.can_hire_before_months == 0
|
||||
@@ -339,11 +338,7 @@ class Property
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
startt = self.start_date.nil? ? stime : self.start_date
|
||||
endt = self.end_date.nil? ? etime : self.end_date
|
||||
|
||||
if (stime >= startt) && (etime <= endt)
|
||||
if DateTime.now >= (self.start_date || DateTime.now - 1.day) && DateTime.now <= (self.end_date || DateTime.now + 1.month)
|
||||
if self.hours_restriction > 0 && !user.nil?
|
||||
sd = nil
|
||||
edd = nil
|
||||
@@ -355,7 +350,7 @@ class Property
|
||||
sd = Date.new(stime.year, stime.month, 1)
|
||||
edd = sd.next_month.prev_day
|
||||
end
|
||||
if self.get_user_total_user_hired_hours(member_profile.id.to_s, sd, edd) >= self.hours_restriction
|
||||
if self.get_user_total_user_hired_hours(sd, edd) >= self.hours_restriction
|
||||
return 0
|
||||
end
|
||||
end
|
||||
@@ -642,8 +637,12 @@ class Property
|
||||
end
|
||||
end
|
||||
def can_be_hired_frontend
|
||||
user = OrbitHelper.current_user
|
||||
self.can_be_hired || (user && (user.is_admin? || (self.owners && self.owners.include?(user.member_profile_id))))
|
||||
if PropertyHireSetting.first.allow_no_logins_user
|
||||
return true
|
||||
else
|
||||
user = OrbitHelper.current_user
|
||||
return self.can_be_hired || (user && (user.is_admin? || (self.owners && self.owners.include?(user.member_profile_id))))
|
||||
end
|
||||
end
|
||||
def can_be_show_frontend
|
||||
user = OrbitHelper.current_user
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<li><a href="<%= copy_admin_property_hire_path(property, :page => params[:page]) %>"><%= t("property_hire.copy") %></a></li>
|
||||
<li><a href="<%= custom_fields_admin_property_hire_path(property) %>"><%= t("property_hire.custom_fields") %></a></li>
|
||||
<li><a href="<%= fields_display_order_admin_property_hire_path(property) %>"><%= t("property_hire.fields_display_order") %></a></li>
|
||||
<li><a href="<%= export_reservation_data_admin_property_hire_path(property.id) %>" class="export-xls" data-property-id="<%= property.id.to_s %>"><%= t("property_hire.export_reservation_data") %></a></li>
|
||||
<li><a href="<%= admin_property_hire_path(property.id, :page => params[:page]) %>" data-method="delete" data-confirm="Are you sure?"><%= t(:delete_) %></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,74 @@
|
||||
<%= render_filter @filter_fields, "index_table" %>
|
||||
<span id="index_table">
|
||||
<%= render 'index'%>
|
||||
</span>
|
||||
</span>
|
||||
<div id="downloadModal" data-backdrop="static" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="downloadModalLabel" aria-hidden="true">
|
||||
<div class="modal-header">
|
||||
<h3 id="downloadModalLabel">Download</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p id="wait-zone" style="text-align: center;">
|
||||
Please wait while we prepare your download. This may take a while.
|
||||
<br />
|
||||
<img src="/assets/spin.gif" />
|
||||
</p>
|
||||
<p id="link-zone" style="display: none; text-align: center;">
|
||||
Please click the link below to download.
|
||||
<br />
|
||||
<a href="" id="download-link" target="_blank">Download</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn" id="modal-close-btn" style="display:none;" data-dismiss="modal" aria-hidden="true">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="/assets/lib/process.manager.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
var downloadModal = $("#downloadModal"),
|
||||
checkForThread = null,
|
||||
waitZone = $("#wait-zone"),
|
||||
linkZone = $("#link-zone"),
|
||||
downloadLink = $("a#download-link"),
|
||||
modalBtn = $("#modal-close-btn"),
|
||||
processManager = new ProcessManager();
|
||||
|
||||
$(document).on("click", ".export-xls", function(){
|
||||
var link = $(this).attr("href"),
|
||||
title = null,
|
||||
id = $(this).data("property-id");
|
||||
|
||||
linkZone.hide();
|
||||
waitZone.show();
|
||||
modalBtn.hide();
|
||||
$.ajax({
|
||||
url : link,
|
||||
type : "get",
|
||||
dataType : "json"
|
||||
}).done(function(data){
|
||||
title = data.title;
|
||||
checkForThread = new Process(function(){
|
||||
$.ajax({
|
||||
url : "/admin/property_hires/checkforthread",
|
||||
type : "get",
|
||||
data : {"property_id" : id, "property_title" : title},
|
||||
dataType : "json"
|
||||
}).done(function(data){
|
||||
if(!data.status){
|
||||
downloadLink.attr("href", "/uploads/reservation_export/" + id + "/" + title + ".xlsx");
|
||||
waitZone.hide();
|
||||
linkZone.show();
|
||||
modalBtn.show();
|
||||
checkForThread.kill();
|
||||
}
|
||||
})
|
||||
})
|
||||
checkForThread.setTimeInterval(1000);
|
||||
checkForThread.setRepeat(Process.CONSTANTS.REPEAT_INFINITE);
|
||||
processManager.queue(checkForThread);
|
||||
})
|
||||
downloadModal.modal("show");
|
||||
return false;
|
||||
})
|
||||
|
||||
</script>
|
||||
@@ -33,11 +33,11 @@
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<%
|
||||
=begin%>
|
||||
|
||||
|
||||
<a href="<%= show_booking_details_admin_property_hire_path(p_hire, :page => params[:page]) %>" class="btn btn-info">View</a>
|
||||
<%
|
||||
=end%>
|
||||
|
||||
|
||||
<a href="<%= delete_booking_details_admin_property_hire_path(p_hire, :page => params[:page]) %>" class="btn btn-danger" data-method="delete" data-confirm="Are you sure?">Delete</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<%= csrf_meta_tag %>
|
||||
<div class="pull-right">
|
||||
<a href="?type=" class="btn <%= 'active' if params[:type] != 'Calendar' %>">Table</a>
|
||||
<a href="?type=Calendar" class="btn <%= 'active' if params[:type] == 'Calendar' %>">Calendar</a>
|
||||
<a href="?type=" class="btn <%= 'active' if params[:type] != 'Calendar' %>"><%= t("property_hire.table") %></a>
|
||||
<a href="?type=Calendar" class="btn <%= 'active' if params[:type] == 'Calendar' %>"><%= t("property_hire.calendar") %></a>
|
||||
</div>
|
||||
<hr>
|
||||
<% if params[:type] == "Calendar" %>
|
||||
@@ -123,14 +123,14 @@
|
||||
</td>
|
||||
<td>
|
||||
<% if can_edit_or_delete?(p_hire.property) %>
|
||||
<a href="<%= edit_hire_admin_property_hire_path(p_hire) %>" class="btn btn-info">Edit</a>
|
||||
<a href="<%= show_booking_details_admin_property_hire_path(p_hire, :page => params[:page]) %>" class="btn btn-info">View</a>
|
||||
<a href="<%= edit_hire_admin_property_hire_path(p_hire) %>" class="btn btn-info"><%= t("property_hire.edit") %></a>
|
||||
<a href="<%= show_booking_details_admin_property_hire_path(p_hire, :page => params[:page]) %>" class="btn btn-info"><%= t("property_hire.view") %></a>
|
||||
<% if p_hire.passed %>
|
||||
<a href="<%= pass_booking_admin_property_hire_path(p_hire, :page => params[:page], :status => "reject", :ref => "index") %>" class="btn btn-warning">Reject</a>
|
||||
<a href="<%= pass_booking_admin_property_hire_path(p_hire, :page => params[:page], :status => "reject", :ref => "index") %>" class="btn btn-warning"><%= t("property_hire.reject") %></a>
|
||||
<% else %>
|
||||
<a href="<%= pass_booking_admin_property_hire_path(p_hire, :page => params[:page], :status => "accept", :ref => "index") %>" class="btn btn-success">Accept</a>
|
||||
<a href="<%= pass_booking_admin_property_hire_path(p_hire, :page => params[:page], :status => "accept", :ref => "index") %>" class="btn btn-success"><%= t("property_hire.accept") %></a>
|
||||
<% end %>
|
||||
<a href="<%= delete_booking_details_admin_property_hire_path(p_hire, :page => params[:page]) %>" class="btn btn-danger" data-method="delete" data-confirm="Are you sure?">Delete</a>
|
||||
<a href="<%= delete_booking_details_admin_property_hire_path(p_hire, :page => params[:page]) %>" class="btn btn-danger" data-method="delete" data-confirm="Are you sure?"><%= t("property_hire.delete") %></a>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -69,13 +69,13 @@
|
||||
</table>
|
||||
<a href="" onclick="window.history.back();return false;" class="btn btn-warning">Back</a>
|
||||
<% if can_edit_or_delete?(@booking.property) %>
|
||||
<a href="<%= edit_hire_admin_property_hire_path(@booking) %>" class="btn btn-info">Edit</a>
|
||||
<% if @booking.passed %>
|
||||
<a href="<%= pass_booking_admin_property_hire_path(@booking, :status => "reject") %>" class="btn btn-warning">Reject</a>
|
||||
<a href="<%= edit_hire_admin_property_hire_path(@booking) %>" class="btn btn-info"><%= t("property_hire.edit") %></a>
|
||||
<% if @booking.passed %>
|
||||
<a href="<%= pass_booking_admin_property_hire_path(@booking, :status => "reject") %>" class="btn btn-warning"><%= t("property_hire.reject") %></a>
|
||||
<% else %>
|
||||
<a href="<%= pass_booking_admin_property_hire_path(@booking, :status => "accept") %>" class="btn btn-success">Accept</a>
|
||||
<% end %>
|
||||
<a href="<%= delete_booking_details_admin_property_hire_path(@booking, :page => params[:page]) %>" class="btn btn-danger" data-method="delete" data-confirm="Are you sure?">Delete</a>
|
||||
<a href="<%= pass_booking_admin_property_hire_path(@booking, :status => "accept") %>" class="btn btn-success"><%= t("property_hire.accept") %></a>
|
||||
<% end %>
|
||||
<a href="<%= delete_booking_details_admin_property_hire_path(@booking, :page => params[:page]) %>" class="btn btn-danger" data-method="delete" data-confirm="Are you sure?"><%= t("property_hire.delete") %></a>
|
||||
<% end %>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
# encoding: utf-8
|
||||
|
||||
wb = xlsx_package.workbook
|
||||
|
||||
wb.add_worksheet(name: "Reservations") do |sheet|
|
||||
heading = sheet.styles.add_style(:b => true, :locked => true)
|
||||
type = sheet.styles.add_style(:i => true)
|
||||
wrap = sheet.styles.add_style alignment: {wrap_text: true}
|
||||
|
||||
row = [
|
||||
t("property_hire.hiring_person_name"),
|
||||
t("property_hire.hiring_person_number"),
|
||||
t("property_hire.hiring_person_email"),
|
||||
t("property_hire.period"),
|
||||
t("property_hire.recurring_interval"),
|
||||
t("property_hire.recurring_end_date"),
|
||||
t("property_hire.reason_for_hire"),
|
||||
t("property_hire.note_for_hire")
|
||||
]
|
||||
|
||||
fields_name = ["organization" ,"person_in_charge" , "tel_of_person_in_charge" , "department" , "contact_person" , "tel_of_contact_person" , "mobile_phone_of_contact_person" , "contact_person_Email" , "contact_person_department"]
|
||||
|
||||
fields_name.each do |field_name|
|
||||
if(property[field_name]["enable"] == "1" rescue false)
|
||||
row << property.custom_text(field_name,"name")
|
||||
end
|
||||
end
|
||||
|
||||
sheet.add_row row, :style => heading
|
||||
|
||||
property.p_hires.asc(:created_at).each do |entry|
|
||||
row = [
|
||||
entry.hirer_name,
|
||||
entry.hiring_person_number,
|
||||
entry.hiring_person_email,
|
||||
entry.period,
|
||||
entry.recurring_interval,
|
||||
entry.recurring_end_date,
|
||||
entry.reason_for_hire,
|
||||
entry.note_for_hire.html_safe
|
||||
]
|
||||
entry.p_hire_field_values.each do |v|
|
||||
field_info = v.get_field_value rescue {}
|
||||
if field_info["title"].present? && !field_info["value"].nil? && !field_info["hint"]
|
||||
row << field_info["title"] + ": " + field_info["value"]
|
||||
end
|
||||
end
|
||||
sheet.add_row row, style: wrap
|
||||
end
|
||||
|
||||
end
|
||||
@@ -3,6 +3,8 @@
|
||||
<script src="https://polyfill.io/v3/polyfill.min.js?features=Intl.DateTimeFormat,Intl.DateTimeFormat.~locale.en,Intl.NumberFormat.~locale.en"></script>
|
||||
<script type="text/javascript" src="/assets/property_hire_fullcalendar.min.js"></script>
|
||||
<script type="text/javascript" src="/assets/property_hire_calendar_frontend.js"></script>
|
||||
<script type="text/javascript" src="/assets/locale-all.min.js"></script>
|
||||
|
||||
<%= javascript_include_tag "basic/jquery.nanoscroller.js" %>
|
||||
<%
|
||||
data = action_data
|
||||
@@ -14,6 +16,7 @@
|
||||
allow_no_logins_user = data["allow_no_logins_user"]
|
||||
all_day_settings = data["all_day_settings"]
|
||||
recover = data["recover"]
|
||||
locale = data["language"]
|
||||
calendar_type = property.calendar_type.to_i rescue 0
|
||||
right_col = 12
|
||||
label_col = 2
|
||||
@@ -271,7 +274,7 @@
|
||||
<div class="btn-toolbar" id="navigation">
|
||||
<div id="calendar-nav">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-default btn-sm" id="today_btn">Today</button>
|
||||
<button class="btn btn-default btn-sm" id="today_btn"><%= t("property_hire.today") %></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -279,9 +282,9 @@
|
||||
</div>
|
||||
<div id='sec3' class="btn-toolbar">
|
||||
<div class="btn-group calendar_mode">
|
||||
<button class="btn btn-default mode_switch btn-sm" data-mode="timeGridDay" >day</button>
|
||||
<button class="btn btn-default mode_switch btn-sm" data-mode="timeGridWeek" >week</button>
|
||||
<button class="btn btn-default active mode_switch btn-sm" data-mode="dayGridMonth" >month</button>
|
||||
<button class="btn btn-default mode_switch btn-sm" data-mode="timeGridDay" ><%= t("property_hire.day") %></button>
|
||||
<button class="btn btn-default mode_switch btn-sm" data-mode="timeGridWeek" ><%= t("property_hire.week") %></button>
|
||||
<button class="btn btn-default active mode_switch btn-sm" data-mode="dayGridMonth" ><%= t("property_hire.month") %></button>
|
||||
</div>
|
||||
<button id="refresh_btn" class="btn btn-default btn-sm">
|
||||
<i class="icons-cycle"></i>
|
||||
@@ -328,7 +331,7 @@
|
||||
<% if property.p_open_end_time %>
|
||||
valid_range["end"] = "<%= (property.p_open_end_time + 1.day).strftime("%Y-%m-%d") %>"
|
||||
<% end %>
|
||||
var calendar = new Calendar("#calendar", property_id, valid_range);
|
||||
var calendar = new Calendar("#calendar", property_id, valid_range,"",true, "<%= locale %>");
|
||||
function pick_hire_date(date,allow_times){
|
||||
if(window.processing_hire)
|
||||
return;
|
||||
@@ -472,10 +475,10 @@
|
||||
<% if property_day_setting %>
|
||||
<%= select_tag "#{f.object_name}[time]", options_for_select([[t("property_hire.please_select"),""],[property_day_setting.title,property_day_setting.id.to_s]],hire.property_day_setting_id), :required=>"required" %>
|
||||
<% else %>
|
||||
<% if calendar_type == 0 %>
|
||||
<%= f.text_field :time, :value=>t("property_hire.please_choose_date"),:readonly=>"",:onclick=>"goto_calendar()" %>
|
||||
<% if property.calendar_type == 0 %>
|
||||
<%= f.text_field :time, :value=>t("property_hire.please_choose_date"),:readonly=>"",:onclick=>"goto_calendar()" %>
|
||||
<% else %>
|
||||
<%= select_tag "#{f.object_name}[time]", options_for_select([[t("property_hire.please_choose_date"),""]]), :required=>"required" %>
|
||||
<%= select_tag "#{f.object_name}[time]", options_for_select([[t("property_hire.please_choose_date"),""]]), :required=>"required" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<% OrbitHelper.render_css_in_head(["property_hire_fullcalendar.css","property_hire_calendar"]) %>
|
||||
<script type="text/javascript" src="/assets/property_hire_fullcalendar.min.js"></script>
|
||||
<script type="text/javascript" src="/assets/property_hire_calendar_frontend.js"></script>
|
||||
<script type="text/javascript" src="/assets/locale-all.min.js"></script>
|
||||
<% data = action_data %>
|
||||
<% if data["manage_booking_btn"] %>
|
||||
<div class="pull-right">
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<button class="btn btn-default btn-sm" id="next_month_btn">
|
||||
<i class="icon-chevron-right"></i>
|
||||
</button>
|
||||
<button class="btn btn-default btn-sm" id="today_btn">Today</button>
|
||||
<button class="btn btn-default btn-sm" id="today_btn"><%= t("property_hire.today") %></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -33,9 +33,9 @@
|
||||
</div>
|
||||
<div id='sec3' class="btn-toolbar">
|
||||
<div class="btn-group calendar_mode">
|
||||
<button class="btn btn-default mode_switch btn-sm" data-mode="timeGridDay" >day</button>
|
||||
<button class="btn btn-default mode_switch btn-sm" data-mode="timeGridWeek" >week</button>
|
||||
<button class="btn btn-default active mode_switch btn-sm" data-mode="dayGridMonth" >month</button>
|
||||
<button class="btn btn-default mode_switch btn-sm" data-mode="timeGridDay" ><%= t("property_hire.day") %></button>
|
||||
<button class="btn btn-default mode_switch btn-sm" data-mode="timeGridWeek" ><%= t("property_hire.week") %></button>
|
||||
<button class="btn btn-default active mode_switch btn-sm" data-mode="dayGridMonth" ><%= t("property_hire.month") %></button>
|
||||
</div>
|
||||
<button id="refresh_btn" class="btn btn-default btn-sm">
|
||||
<i class="icons-cycle"></i>
|
||||
|
||||
@@ -194,3 +194,16 @@ en:
|
||||
hours_restriction_message: "This property can only be hired for %{no_of_hours} hours every %{duration}"
|
||||
time_period_note: Time period user can use reservation service
|
||||
available_time_note: Available time period
|
||||
calendar: Calendar
|
||||
table: Table
|
||||
view: View
|
||||
reject: Reject
|
||||
edit: Edit
|
||||
delete: Delete
|
||||
accept: Accept
|
||||
today: Today
|
||||
day: Day
|
||||
week: Week
|
||||
month: Month
|
||||
all_properties: All Properties
|
||||
export_reservation_data: Export data
|
||||
@@ -135,11 +135,11 @@ zh_tw:
|
||||
month: 月
|
||||
week: 周
|
||||
recurring_end_date: 週期結束時間
|
||||
save: Save
|
||||
my_bookings: My Bookings
|
||||
save: 送出
|
||||
my_bookings: 我的預約記錄
|
||||
settings: 設定
|
||||
property_hire: 預約
|
||||
manage_locations: Manage Locations
|
||||
manage_locations: 管理位置
|
||||
location: 位置
|
||||
auto_approve: Auto approve
|
||||
property_count: Property Count
|
||||
@@ -177,7 +177,7 @@ zh_tw:
|
||||
hire: 線上預約
|
||||
view_calendar: 查詢目前預約狀況
|
||||
image: Property Image
|
||||
actions: 操作
|
||||
actions: 動作
|
||||
limit_start_time: 限制開始時間
|
||||
limit_end_time: 限制結束時間
|
||||
start_time: 預約開始時間
|
||||
@@ -187,7 +187,7 @@ zh_tw:
|
||||
hiring_person_name: 預約人姓名
|
||||
reason_for_hire: 使用用途
|
||||
note_for_hire: 備註
|
||||
period: Period
|
||||
period: 預約時段
|
||||
passed: 允許預約
|
||||
'yes': 是
|
||||
'no': 否
|
||||
@@ -216,3 +216,16 @@ zh_tw:
|
||||
hours_restriction_message: "每 %{duration}限制僅能預約 %{no_of_hours}"
|
||||
time_period_note: 使用者可以進行預約
|
||||
available_time_note: 可供預約的日期區間
|
||||
calendar: 日曆
|
||||
table: 列表
|
||||
view: 查看
|
||||
reject: 拒絕
|
||||
edit: 編輯
|
||||
delete: 刪除
|
||||
accept: 同意
|
||||
today: 今天
|
||||
day: 日模式
|
||||
week: 週模式
|
||||
month: 月模式
|
||||
all_properties: All Properties
|
||||
export_reservation_data: Export data
|
||||
+4
-2
@@ -7,7 +7,8 @@ Rails.application.routes.draw do
|
||||
patch "/xhr/property_hires/make_booking" => "property_hires#make_booking"
|
||||
get "/xhr/property_hires/get_bookings" => "property_hires#get_bookings"
|
||||
namespace :admin do
|
||||
resources :property_hires do
|
||||
get "property_hires/checkforthread", to: "property_hires#checkforthread"
|
||||
resources :property_hires do
|
||||
member do
|
||||
get 'copy'
|
||||
get "edit_location"
|
||||
@@ -20,10 +21,11 @@ Rails.application.routes.draw do
|
||||
patch "update_hire"
|
||||
get "custom_fields"
|
||||
get "fields_display_order"
|
||||
get "export_reservation_data"
|
||||
post "update_fields_display_order"
|
||||
patch "update_fields_display_order"
|
||||
end
|
||||
collection do
|
||||
collection do
|
||||
get "my_bookings"
|
||||
get "settings"
|
||||
patch "settings"
|
||||
|
||||
@@ -2,3 +2,26 @@
|
||||
# task :property_hire do
|
||||
# # Task goes here
|
||||
# end
|
||||
|
||||
namespace :property_hire_tasks do
|
||||
task :prepare_download,[:property_id, :url] => :environment do |task,args|
|
||||
id = args.property_id
|
||||
I18n.locale = :zh_tw
|
||||
property = Property.find(id)
|
||||
ac = ActionController::Base.new()
|
||||
host_url = Site.first.root_url
|
||||
if host_url == "http://"
|
||||
host_url = "http://#{args.url}"
|
||||
end
|
||||
xlsx = ac.render_to_string handlers: [:axlsx], formats: [:xlsx], template: "property_hire_export/export", locals: {property: property, site_in_use_locales: Site.first.in_use_locales, url: host_url}
|
||||
dirname = "public/uploads/reservation_export/#{id}"
|
||||
FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
|
||||
f = "#{dirname}/#{property.title.gsub(/[ "'*@#$%^&()+=;:.,?>|\\\/<~_!:,、。!?;「」〈〉【】/]/,'')}.xlsx"
|
||||
if File.exist?(f)
|
||||
File.delete(f)
|
||||
end
|
||||
file = File.open(f, "w")
|
||||
xlsx.force_encoding("utf-8")
|
||||
file.write(xlsx)
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user