diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..020d46645 --- /dev/null +++ b/.gitignore @@ -0,0 +1,255 @@ + +# Editors, tools and OS's + +.buildpath +/.htaccess +.project +.settings +.idea +.svn +.DS_Store +.sass-cache +config.codekit +*.sublime-project +*.sublime-workspace +nbproject +bower_components +composer.lock + +# Cache, temp and personal files + +/cache/** +!/cache/cacert.pem +!/cache/index.php + +!/cache/cachefs/ +!/cache/cachefs/index.php + +!/cache/purifier/ +!/cache/purifier/index.php + +!/cache/push/ +!/cache/push/activity +!/cache/push/index.php +!/cache/push/trends + +!/cache/sandbox/ +!/cache/sandbox/index.php +!/cache/smarty/ + +!/cache/smarty/cache/ +!/cache/smarty/cache/index.php +!/cache/smarty/compile/ +!/cache/smarty/compile/index.php +!/cache/smarty/index.php + +!/cache/tcpdf/ +!/cache/tcpdf/index.php + + +/download/* +!/download/.htaccess +!/download/index.php + +img/** +!/img/404.gif +!/img/admin/ +!/img/admin/*.gif +!/img/admin/*.png +!/img/admin/*.jpg +!/img/admin/index.php +!/img/bg_500.png +!/img/bg_loader.png +!/img/c/ +!/img/c/index.php +!/img/cms/ +!/img/cms/.htaccess +!/img/cms/cms-img.jpg +!/img/cms/index.php +!/img/co/ +!/img/co/index.php +!/img/favicon.ico +!/img/genders/ +!/img/genders/Unknown.jpg +!/img/genders/index.php +!/img/hotel_header_image.jpg +!/img/index.php +!/img/jquery-ui/ +!/img/jquery-ui/*.png +!/img/jquery-ui/index.php +!/img/l/ +!/img/l/index.php +!/img/l/none.jpg +!/img/loader.gif +!/img/loadingAnimation.gif +!/img/logo.jpg +!/img/logo_invoice.jpg +!/img/logo_mail.jpg +!/img/logo_stores.gif +!/img/logo_stores.png +!/img/m/ +!/img/m/index.php +!/img/macFFBgHack.png +!/img/os/ +!/img/os/index.php +!/img/p/ +!/img/p/index.php +!/img/prestashop-avatar.png +!/img/qloapps@2x.png +!/img/qloapps-login@2x.png +!/img/qloapps-login-wink@2x.png +!/img/questionmark.png +!/img/rf/ +!/img/rf/index.php +!/img/s/ +!/img/s/index.php +!/img/scenes/ +!/img/scenes/index.php +!/img/scenes/thumbs/ +!/img/scenes/thumbs/index.php +!/img/st/ +!/img/st/index.php +!/img/su/ +!/img/su/index.php +!/img/t/ +!/img/t/*.gif +!/img/t/index.php +!/img/tmp/ +!/img/tmp/index.php + +/log/* +!/log/.htaccess +!/log/index.php + +/upload/* +!/upload/.htaccess +!/upload/index.php + +/admin/backups/* +!/admin/backups/.htaccess +!/admin/backups/index.php + +/admin/import/* +!/admin/import/.htaccess +!/admin/import/index.php + +/themes/*/cache/* +!/themes/*/cache/index.php + +/admin/themes/*/cache/* +!/admin/themes/*/cache/index.php + +# Config + +/config/settings.inc.php +/config/settings.old.php + +/config/xml/** +!/config/xml/.htaccess +!/config/xml/index.php +!/config/xml/qlo_mod_list.xml +!config/xml/themes/ +!config/xml/themes/default.xml +!config/xml/themes/index.php + +# Themes, modules and overrides + +# modules/* +/modules/*/config.xml +/modules/*/translations/* + +/override/* +!/override/.htaccess +!/override/index.php +!/override/readme_override.txt + +!/override/classes/ +!/override/classes/index.php +!/override/classes/cache/ +!/override/classes/cache/index.php +!/override/classes/controller/ +!/override/classes/controller/index.php +!/override/classes/db/ +!/override/classes/db/index.php +!/override/classes/exception/ +!/override/classes/exception/index.php +!/override/classes/helper/ +!/override/classes/helper/index.php +!/override/classes/log/ +!/override/classes/log/index.php +!/override/classes/module/ +!/override/classes/module/index.php +!/override/classes/order/ +!/override/classes/order/index.php +!/override/classes/pdf/ +!/override/classes/pdf/index.php +!/override/classes/range/ +!/override/classes/range/index.php +!/override/classes/shop/ +!/override/classes/shop/index.php +!/override/classes/stock/ +!/override/classes/stock/index.php +!/override/classes/tax/ +!/override/classes/tax/index.php +!/override/classes/tree/ +!/override/classes/tree/index.php +!/override/classes/webservice/ +!/override/classes/webservice/index.php + +!/override/controllers/ +!/override/controllers/index.php +!/override/controllers/admin/ +!/override/controllers/admin/index.php +!/override/controllers/admin/templates/ +!/override/controllers/admin/templates/index.php +!/override/controllers/front + +!/override/modules/ +!/override/modules/index.php + + +admin/themes/default/sass/ie.sass +admin/themes/default/sass/print.sass +admin/themes/default/sass/screen.sass + +admin/themes/default/css/ie.css +admin/themes/default/css/print.css +admin/themes/default/css/screen.css + +# Translations and emails templates + +/translations/** +!/translations/index.php +!/translations/en.gzip + +!/translations/export/ +!/translations/export/index.php + +/mails/* +!/mails/.htaccess +!/mails/index.php +!/mails/en/ + +/themes/hotel-reservation-theme/cache/* +!/themes/hotel-reservation-theme/cache/ +!/themes/hotel-reservation-theme/cache/index.php + +/themes/hotel-reservation-theme/lang/* +!/themes/hotel-reservation-theme/lang/index.php +!/themes/hotel-reservation-theme/lang/en.php + +/themes/hotel-reservation-theme/modules/*/translations/*.php +!/themes/hotel-reservation-theme/modules/*/translations/index.php + +/themes/hotel-reservation-theme/mails/* +!/themes/hotel-reservation-theme/mails/index.php +!/themes/hotel-reservation-theme/mails/en/ + +/themes/hotel-reservation-theme/modules/*/mails/* +!/themes/hotel-reservation-theme/modules/*/mails/index.php +!/themes/hotel-reservation-theme/modules/*/mails/en + +# MISC + +**sitemap.xml +robots.txt \ No newline at end of file diff --git a/admin/themes/default/js/admin-theme.js b/admin/themes/default/js/admin-theme.js index 922168b95..fc7d85e69 100644 --- a/admin/themes/default/js/admin-theme.js +++ b/admin/themes/default/js/admin-theme.js @@ -86,9 +86,8 @@ function error_modal(heading, msg) { } //move to hash after clicking on anchored links -function scroll_if_anchor(href) { +function scroll_if_anchor(href, fromTop = 120) { href = typeof(href) === "string" ? href : $(this).attr("href"); - var fromTop = 120; if(href.indexOf("#") === 0) { var $target = $(href); if($target.length) { diff --git a/admin/themes/default/sass/admin-theme.sass b/admin/themes/default/sass/admin-theme.sass index 41c225a17..2ce555165 100644 --- a/admin/themes/default/sass/admin-theme.sass +++ b/admin/themes/default/sass/admin-theme.sass @@ -112,6 +112,3 @@ //Print support @import "partials/print" - -//Add css -@import "partials/css" diff --git a/admin/themes/default/sass/controllers/_customer-thread.sass b/admin/themes/default/sass/controllers/_customer-thread.sass index c4cc6b3c8..a3678333d 100644 --- a/admin/themes/default/sass/controllers/_customer-thread.sass +++ b/admin/themes/default/sass/controllers/_customer-thread.sass @@ -1,18 +1,5 @@ //Avatar -.employee_avatar_small - @extend .avatar-sm - vertical-align: middle - img - padding: 0 - border: none - -.employee_avatar - @extend .avatar-lg - display: block!important - margin: 10px auto!important - text-align: center - .avatar-xs @include avatar(16px, 16px) .avatar-sm diff --git a/admin/themes/default/sass/controllers/_login.sass b/admin/themes/default/sass/controllers/_login.sass index 4cb8eb5b7..40e4e8406 100644 --- a/admin/themes/default/sass/controllers/_login.sass +++ b/admin/themes/default/sass/controllers/_login.sass @@ -10,7 +10,7 @@ z-index: 1 position: absolute margin: 0 auto - width: 69.5px + text-align: center left: 0 right: 0 @@ -70,6 +70,8 @@ display: none z-index: 1 @include rotateY(180deg) + .login-actions + position: relative #shop_name text-align: center diff --git a/admin/themes/default/sass/partials/_css.sass b/admin/themes/default/sass/partials/_css.sass deleted file mode 100644 index 8f9ef9ba4..000000000 --- a/admin/themes/default/sass/partials/_css.sass +++ /dev/null @@ -1,155 +0,0 @@ -.datepicker2 - background: #fff - position: absolute - z-index: 599 - right: -10rem - .daterangepicker - border-radius: 5px 5px 0 0 !important -.bootstrap - #datepicker - .daterangepicker - thead - tr - th - padding: 0.7em 0.3em - text-align: center - font-weight: bold - border: 0 - background-color: #fff !important - color: #555555 !important - font-size: 14px - text-transform: capitalize - &:first-child - th - font-size: unset - font-weight: bold - background-color: #00AFF0 !important - border: unset !important - color: #fff !important - padding: unset !important - text-transform: capitalize - .icon-angle-left - font-weight: bold - padding: 10px - .icon-angle-right - font-weight: bold - padding: 10px - th - &.prev - border-top-left-radius: 8px !important - border-bottom-left-radius: 8px !important - left: 2px - top: 3px - &.next - border-top-right-radius: 8px !important - border-bottom-right-radius: 8px !important - right: 2px - top: 3px - &.month-switch - top: 3px - td - padding: 5px 10px - color: #555 -.ui-datepicker - width: auto !important - margin: 5px auto 0 - width: auto !important - z-index: 1032 !important - .ui-datepicker-header - background-color: #00AFF0 !important - .ui-datepicker-title - color: #fff - font-style: normal - font-weight: bold - font-size: unset - thead - background-color: #f7f7f7 - th - font-style: normal - font-size: 15px - line-height: 23px - color: #555555 - tbody - td - &:last-child - border-right: 0px - tr - border-bottom: 1px solid #bbb - border: none - &:last-child - border-bottom: 0px - a - text-decoration: none -.form-date-actions .btn:hover, .form-date-actions .btn:focus, .form-date-actions .btn:active - outline: unset !important - text-decoration: none -.form-date-actions - bottom: -24px - position: absolute - width: 100% - z-index: 599 - background-color: #fff - border: solid 1px #ccc - border-radius: 0 0 5px 5px -.ui-datepicker-prev - float: left - cursor: pointer - left: 15px !important - &::before - background-position: center -30px - font-weight: bold - font-size: 16px - color: #fff - content: "\f104" - font-family: FontAwesome -.ui-datepicker-next - float: right - cursor: pointer - &::before - background-position: center -30px - font-weight: bold - font-size: 16px - color: #fff - content: "\f105" - font-family: FontAwesome - &:hover - top: 5px !important - right: 2px !important -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus - border: unset - background: none - font-weight: none - color: none -.ui-datepicker td span, -.ui-datepicker td a - display: inline-block - text-align: center - line-height: 25px - color: #ffffff -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next - top: 5px !important -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default - border: none !important -.ui-widget-content - .ui-icon - background-image: none !important -.ui-datepicker td span, .ui-datepicker td a - text-align: center !important - padding: 4px 9px !important -.ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus - background: unset !important - border: unset !important -.ui-widget-content .ui-slider-handle, .ui-datepicker-current .ui-slider-handle - border: 1px solid #d3d3d3 !important - color: #555555 !important - background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) !important -.ui-datepicker-prev-hover - top: unset !important diff --git a/admin/themes/default/sass/partials/_date-picker.sass b/admin/themes/default/sass/partials/_date-picker.sass index cbcaed2df..e864cf8e9 100644 --- a/admin/themes/default/sass/partials/_date-picker.sass +++ b/admin/themes/default/sass/partials/_date-picker.sass @@ -14,42 +14,340 @@ // ui-datepicker-buttonpane: The buttonpane that is used when the showButtonPanel option is set. // ui-datepicker-current: The button used to select today's date. +$color-bright: white + +$color-calendar: #00A4E7 +$color-calendar-compare: #FF8000 + +$color-calendar-day: $color-bright + +$color-calendar-outrange: #ccc + +$color-calendar-day-selected: $color-calendar +$color-calendar-day-selected-compare: $color-calendar-compare + +$color-calendar-range: lighten($color-calendar,10%) +$color-calendar-range-compare: lighten($color-calendar-compare,10%) + +.datepicker2 + background: #fff + position: absolute + z-index: 599 + right: -10rem + .daterangepicker + border-radius: 5px 5px 0 0 !important +.bootstrap + #datepicker + .daterangepicker + position: relative + width: 100% + font-family: Verdana, Arial, sans-serif + font-size: 13px + box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.26) + margin-bottom: 8px + padding: 12px + border-bottom-left-radius: 0 + border-bottom-right-radius: 0 + table + width: 100% + margin: 0 + border-spacing: 1px + thead + tr th + text-transform: uppercase + text-align: center + font-weight: bold + border: 0 + background-color: #fff !important + color: #777 !important + font-size: 14px + tr:first-child th + padding-bottom: 10px + text-transform: capitalize + .icon-angle-left + font-weight: bold + padding-left: 6px + &:after + content: '' + position: absolute + top: -5px + left: -2px + width: 24px + height: 24px + background-color: #f0f0f0 + z-index: -1 + border-radius: 50% + .icon-angle-right + font-weight: bold + padding-right: 6px + &:after + content: '' + position: absolute + top: -5px + right: -2px + width: 24px + height: 24px + background-color: #f0f0f0 + z-index: -1 + border-radius: 50% + td, th + text-align: center + padding: 0 + position: relative + tr + border-bottom: solid 1px white + td + color: #555 + font-size: 14px + line-height: 25px + padding: 5px 10px + &.day:after + content: "" + position: absolute + display: block + top: 0 + width: 100% + z-index: 0 + background-color: transparent + @include left(0) + &.day:hover + cursor: pointer + color: #212121 + &.day.disabled + color: $color-calendar-outrange + &.old, &.new + color: $color-calendar-outrange + &.start-selected:not(.old):not(.new):not(.end-selected) + color: $color-bright + background-color: #1292ff + //@extend .chevron-left + &.range-compare + background-color: mix($color-calendar-day-selected,$color-calendar-range-compare,70%) + @include border-left-radius(0) + &.end-selected-compare, &.start-selected-compare + background-color: mix($color-calendar-day-selected,$color-calendar-day-selected-compare,70%) + &.end-selected-compare + @include border-radius(0) + &.end-selected:not(.old):not(.new):not(.start-selected) + color: $color-bright + background-color: #1292ff + //@extend .chevron-right + &.range-compare + background-color: mix($color-calendar-day-selected,$color-calendar-range-compare,70%) + @include border-right-radius(0) + &.end-selected-compare, &.start-selected-compare + background-color: mix($color-calendar-day-selected,$color-calendar-day-selected-compare,70%) + &.start-selected-compare + @include border-radius(0) + &.start-selected-compare:not(.old):not(.new):not(.end-selected-compare) + color: $color-bright + font-weight: 700 + background-color: $color-calendar-day-selected-compare + @include border-left-radius(15px) + &.range + background-color: #f2f2f2 + @include border-left-radius(0) + &.end-selected-compare:not(.old):not(.new):not(.start-selected-compare) + color: $color-bright + font-weight: 700 + background-color: $color-calendar-day-selected-compare + @include border-right-radius(15px) + &.range + background-color: #f2f2f2 + @include border-right-radius(0) + &.end-selected.start-selected + color: $color-bright + font-weight: 700 + background-color: $color-calendar-day-selected + &.range-compare + background-color: mix($color-calendar-day-selected,$color-calendar-range-compare,70%) + @include border-radius(0) + &.end-selected-compare.start-selected-compare + color: $color-bright + @include border-radius(15px) + font-weight: 700 + background-color: $color-calendar-day-selected-compare + &.range + background-color: mix($color-calendar-day-selected-compare,$color-calendar-range,70%) + @include border-radius(0) + &.range + color: #333 + background-color: #f2f2f2 + &.range-compare + background-color: mix($color-calendar-range,$color-calendar-range-compare,50%) + &.range-compare + color: lighten($color-calendar-range-compare,35%) + background-color: $color-calendar-range-compare + &.range + background-color: mix($color-calendar-range,$color-calendar-range-compare,50%) + &.today + background-color: $color-bright + span + padding: 0 + display: block + width: 33.333% + height: 3em + line-height: 3em + font-weight: 400 + float: left + text-transform: uppercase + cursor: pointer + &:hover + color: white + background-color: $color-calendar-day-selected + &.active + background-color: $color-calendar-day-selected + color: #fff + &.old + color: $color-calendar-outrange + th + &.next + @include text-align(right) + &.prev + @include text-align(left) + &.next, &.prev, &.month-switch + font-size: 16px !important + font-weight: normal + color: #333 !important + &:hover + opacity: 0.8 + thead tr:first-child th + cursor: pointer .ui-datepicker + margin: 5px auto 0 + width: auto !important + z-index: 111111 !important top: 0 left: 0 - padding: 4px + padding: 12px !important margin-top: 1px @include border-radius(4px) - &:before - content: '' - display: inline-block!important - border-left: 7px solid transparent - border-right: 7px solid transparent - border-bottom: 7px solid #ccc - border-bottom-color: rgba(black,.2) - position: absolute - top: -7px - left: 6px - &:after - content: '' - display: inline-block!important - border-left: 6px solid transparent - border-right: 6px solid transparent - border-bottom: 6px solid white - position: absolute - top: -6px - left: 7px .ui-datepicker-header - background: transparent !important + background: none + border: none color: gray font-weight: normal - .ui-state-default - background: transparent !important + .ui-datepicker-title + color: #333 + font-size: 16px + font-style: normal + th + font-size: 12px + font-weight: 600 + color: #777 + text-transform: uppercase + tbody + td + &:last-child + border-right: 0px + tr + border-bottom: 1px solid #bbb + border: none + &:last-child + border-bottom: 0px + a + text-decoration: none .ui-state-highlight border: solid 1px darken(#FEFBE2 ,50%) !important background: #FEFBE2 !important + .ui-datepicker-today + background: #e7f4ff !important + .ui-state-highlight + color: #1292ff !important + .ui-datepicker-current-day, .ui-datepicker-today.ui-datepicker-current-day + background-color: #1292ff !important + .ui-datepicker-current-day, .ui-datepicker-today.ui-datepicker-current-day .ui-state-highlight + color: #fff !important .ui-state-active color: white !important background: $primary-color !important border: solid 1px darken($primary-color,10%) !important - + .ui-datepicker-prev-hover + left: 2px !important +.form-date-actions .btn:hover, .form-date-actions .btn:focus, .form-date-actions .btn:active + outline: unset !important + text-decoration: none +.form-date-actions + bottom: -27px + position: absolute + width: 100% + z-index: 599 + background-color: #fff + box-shadow: 0 7px 10px 0 rgba(0,0,0,0.26) + padding: 2px + border-bottom-left-radius: 4px + border-bottom-right-radius: 4px +.ui-datepicker-prev + float: left + cursor: pointer + &::before + background-position: center -30px + font-weight: bold + font-size: 16px + color: #333 + content: "\f104" + font-family: FontAwesome + position: absolute + left: 8px +.ui-datepicker-next + float: right + cursor: pointer + &::before + background-position: center -30px + font-weight: bold + font-size: 16px + color: #333 + content: "\f105" + font-family: FontAwesome + position: absolute + right: 8px + &:hover + top: 5px !important + right: 2px !important +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus + border: unset + background: none + font-weight: none + color: none +.ui-widget-content.ui-datepicker + border: none + box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.26) +.ui-datepicker td span, +.ui-datepicker td a + display: inline-block + text-align: center + line-height: 25px + color: #ffffff +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next + top: 5px !important + background-color: #f0f0f0 + border: none + border-radius: 50% +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default + border: none !important + background: transparent !important + font-size: 14px + color: #333 +.ui-widget-content + .ui-icon + background-image: none !important +.ui-datepicker td span, .ui-datepicker td a + text-align: center !important + padding: 4px 9px !important +.ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus + background: unset !important + border: unset !important +.ui-widget-content .ui-slider-handle, .ui-datepicker-current .ui-slider-handle + border: 1px solid #d3d3d3 !important + color: #555555 !important + background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) !important +.ui-datepicker-prev-hover + top: unset !important \ No newline at end of file diff --git a/admin/themes/default/sass/partials/_date-range-picker.sass b/admin/themes/default/sass/partials/_date-range-picker.sass index 6f402765f..812aadf72 100644 --- a/admin/themes/default/sass/partials/_date-range-picker.sass +++ b/admin/themes/default/sass/partials/_date-range-picker.sass @@ -68,162 +68,19 @@ $color-calendar-range-compare: lighten($color-calendar-compare,10%) width: 35% button @include margin(5px, 0, 0, 0) - - .daterangepicker - position: relative - width: 100% - font-size: 13px - border: solid 1px #ccc - @include margin(0, 0, 8px, 0) - table - width: 100% - margin: 0 - border-spacing: 1px - thead - tr th - background-color: darken($color-calendar,5%) - color: white - font-size: 0.7em - height: 1.5em - text-transform: uppercase - tr:first-child th - background-color: $color-bright - border-bottom: 1px solid darken($color-calendar,5%) - font-weight: 200 - font-size: 1.4em - color: $color-calendar-day-selected - td, th - text-align: center - padding: 0 - position: relative - tr - border-bottom: solid 1px white - td - color: $color-calendar-day-selected - height: 2.4em - padding: 0 8px - @include transition-property(all) - @include transition-duration(0.2s) - @include transition-timing-function(ease-out) - &.day:after - content: "" - position: absolute - display: block - top: 0 - width: 100% - z-index: 0 - background-color: transparent - @include left(0) - &.day:hover - cursor: pointer - &.day.disabled - color: $color-calendar-outrange - &.old, &.new - color: $color-calendar-outrange - &.start-selected:not(.old):not(.new):not(.end-selected) - color: $color-bright - font-weight: 700 - background-color: $color-calendar-day-selected - @include border-left-radius(15px) - //@extend .chevron-left - &.range-compare - background-color: mix($color-calendar-day-selected,$color-calendar-range-compare,70%) - @include border-left-radius(0) - &.end-selected-compare, &.start-selected-compare - background-color: mix($color-calendar-day-selected,$color-calendar-day-selected-compare,70%) - &.end-selected-compare - @include border-radius(0) - &.end-selected:not(.old):not(.new):not(.start-selected) - color: $color-bright - font-weight: 700 - background-color: $color-calendar-day-selected - //@extend .chevron-right - @include border-right-radius(15px) - &.range-compare - background-color: mix($color-calendar-day-selected,$color-calendar-range-compare,70%) - @include border-right-radius(0) - &.end-selected-compare, &.start-selected-compare - background-color: mix($color-calendar-day-selected,$color-calendar-day-selected-compare,70%) - &.start-selected-compare - @include border-radius(0) - &.start-selected-compare:not(.old):not(.new):not(.end-selected-compare) - color: $color-bright - font-weight: 700 - background-color: $color-calendar-day-selected-compare - @include border-left-radius(15px) - &.range - background-color: mix($color-calendar-day-selected-compare,$color-calendar-range,70%) - @include border-left-radius(0) - &.end-selected-compare:not(.old):not(.new):not(.start-selected-compare) - color: $color-bright - font-weight: 700 - background-color: $color-calendar-day-selected-compare - @include border-right-radius(15px) - &.range - background-color: mix($color-calendar-day-selected-compare,$color-calendar-range,70%) - @include border-right-radius(0) - &.end-selected.start-selected - color: $color-bright - @include border-radius(15px) - font-weight: 700 - background-color: $color-calendar-day-selected - &.range-compare - background-color: mix($color-calendar-day-selected,$color-calendar-range-compare,70%) - @include border-radius(0) - &.end-selected-compare.start-selected-compare - color: $color-bright - @include border-radius(15px) - font-weight: 700 - background-color: $color-calendar-day-selected-compare - &.range - background-color: mix($color-calendar-day-selected-compare,$color-calendar-range,70%) - @include border-radius(0) - &.range - color: lighten($color-calendar-range,35%) - background-color: $color-calendar-range - &.range-compare - background-color: mix($color-calendar-range,$color-calendar-range-compare,50%) - &.range-compare - color: lighten($color-calendar-range-compare,35%) - background-color: $color-calendar-range-compare - &.range - background-color: mix($color-calendar-range,$color-calendar-range-compare,50%) - &.today - background-color: $color-bright - span - padding: 0 - display: block - width: 33.333% - height: 3em - line-height: 3em - font-weight: 400 - float: left - text-transform: uppercase - cursor: pointer - &:hover - color: white - background-color: $color-calendar-day-selected - &.active - background-color: $color-calendar-day-selected - color: #fff - &.old - color: $color-calendar-outrange - th - &.next - @include text-align(right) - @include padding(0, 10px, 0, 0) - &.prev - @include text-align(left) - @include padding(0, 0, 0, 10px) - &.next, &.prev, &.month-switch - font-size: 1.3em - line-height: 2em - height: 2em - &:hover - background-color: darken($color-calendar,5%) - color: white - thead tr:first-child th - cursor: pointer +.form-date-actions .btn:hover, .form-date-actions .btn:focus, .form-date-actions .btn:active + outline: unset !important + text-decoration: none +.form-date-actions + bottom: -27px + position: absolute + width: 100% + z-index: 599 + background-color: #fff + box-shadow: 0 7px 10px 0 rgba(0,0,0,0.26) + padding: 2px + border-bottom-left-radius: 4px + border-bottom-right-radius: 4px //chevrons are disabled time to figure out the firefox incompatibility.. .chevron-left, .chevron-right @@ -253,7 +110,7 @@ $color-calendar-range-compare: lighten($color-calendar-compare,10%) -ms-animation: one 0.2s ease-in-out -o-animation: one 0.2s ease-in-out animation: one 0.2s ease-in-out - + @-webkit-keyframes one 0% background-color: $color-calendar diff --git a/admin/themes/default/sass/partials/_header.sass b/admin/themes/default/sass/partials/_header.sass index f336a838a..f58be6050 100644 --- a/admin/themes/default/sass/partials/_header.sass +++ b/admin/themes/default/sass/partials/_header.sass @@ -117,19 +117,6 @@ padding: 9px 0 color: $brand-warning #employee_infos - .employee_name - position: relative - @include ltr - padding-right: 40px !important - @include rtl - padding-left: 40px !important - .employee_avatar_small - .img-thumbnail - @include border-radius(0) - @include avatar(36px, 0px) - position: absolute - top: 0px - @include right(0) img border: none padding: 0 diff --git a/themes/hotel-reservation-theme/css/modules/blockcurrencies/index.php b/admin/themes/default/template/controllers/carts/_orders.tpl similarity index 65% rename from themes/hotel-reservation-theme/css/modules/blockcurrencies/index.php rename to admin/themes/default/template/controllers/carts/_orders.tpl index 9a99a8662..a27311ef6 100644 --- a/themes/hotel-reservation-theme/css/modules/blockcurrencies/index.php +++ b/admin/themes/default/template/controllers/carts/_orders.tpl @@ -1,5 +1,4 @@ -getAdminLink('AdminOrders')}&vieworder&id_order={$id_order}" style="margin: 1px 0;" target="_blank">#{$id_order}{if !$smarty.foreach.orders.last},{/if} + {/foreach} +{elseif $type == 'abandoned'} + {l s='Abandoned cart'} +{elseif $type == 'non_orderd'} + {l s='Non-orderd cart'} +{/if} diff --git a/admin/themes/default/template/controllers/carts/helpers/view/view.tpl b/admin/themes/default/template/controllers/carts/helpers/view/view.tpl index a575b429e..7f8a5e8d1 100644 --- a/admin/themes/default/template/controllers/carts/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/carts/helpers/view/view.tpl @@ -59,16 +59,18 @@ {else} -

{l s='Guest not registered'}

+

{l s='Guest not registered.'}

{/if}
-

{l s='Order information'}

- {if $order->id} -

{l s='Order #%d' sprintf=$order->id|string_format:"%06d"}

- {l s='Made on:'} {dateFormat date=$order->date_add} +

{l s='Order(s) Information'}

+ {if is_array($cart_orders) && count($cart_orders)} + {foreach from=$cart_orders item=$cart_order} +

{l s='Order #%d' sprintf=$cart_order.id_order|string_format:"%06d"}

+ {/foreach} + {l s='Created on:'} {dateFormat date=$cart_order.date_add} {else}

{l s='No order was created from this cart.'}

{if $customer->id} @@ -80,113 +82,60 @@

{l s='Cart summary'}

-
- - - - - - - - - - - - - {foreach from=$products item='product'} - {if isset($customized_datas[$product.id_product][$product.id_product_attribute][$product.id_address_delivery])} - - - - - - - - - {foreach from=$customized_datas[$product.id_product][$product.id_product_attribute][$product.id_address_delivery] item='customization'} - - - - - - - - {/foreach} - {/if} - - {if !isset($product.customizationQuantityTotal) || $product.cart_quantity > $product.customizationQuantityTotal} - - - - - - - - - {/if} - {/foreach} +
+
 {l s='Product'}{l s='Unit price'}{l s='Quantity'}{l s='Stock'}{l s='Total'}
{$product.image} - {$product.name}{if isset($product.attributes)}
{$product.attributes}{/if}
- {if $product.reference}{l s='Ref:'} {$product.reference}{/if} - {if $product.reference && $product.supplier_reference} / {$product.supplier_reference}{/if} -
-
{displayWtPriceWithCurrency price=$product.price_wt currency=$currency}{$product.customizationQuantityTotal}{$product.qty_in_stock}{displayWtPriceWithCurrency price=$product.total_customization_wt currency=$currency}
- {foreach from=$customization.datas key='type' item='datas'} - {if $type == constant('Product::CUSTOMIZE_FILE')} -
    - {foreach from=$datas key='index' item='data'} -
  • - - -
  • - {/foreach} -
- {elseif $type == constant('Product::CUSTOMIZE_TEXTFIELD')} -
- {foreach from=$datas key='index' item='data'} -
- {if $data.name}{$data.name}{else}{l s='Text #'}{$index}{/if} -
-

{$data.value}

-
-
- {/foreach} -
- {/if} - {/foreach} -
{$customization.quantity}
{$product.image} - - {$product.name}{if isset($product.attributes)}
{$product.attributes}{/if}
- {if $product.reference}{l s='Ref:'} {$product.reference}{/if} - {if $product.reference && $product.supplier_reference} / {$product.supplier_reference}{/if} -
-
{displayWtPriceWithCurrency price=$product.product_price currency=$currency}{if isset($product.customizationQuantityTotal)}{math equation='x - y' x=$product.cart_quantity y=$product.customizationQuantityTotal|intval}{else}{math equation='x - y' x=$product.cart_quantity y=$product.customization_quantity|intval}{/if}{$product.qty_in_stock}{displayWtPriceWithCurrency price=$product.product_total currency=$currency}
+ - + + + + + + + + {foreach from=$products item='product'} + + + + + + + {/foreach} + + + + {if $total_discounts != 0} - + {/if} {if $total_wrapping > 0} - + {/if} {if $cart->getOrderTotal(true, Cart::ONLY_SHIPPING) > 0} - + {/if} - + - +
{l s='Total cost of products:'}{l s='Image'}{l s='Room Type'}{l s='Unit Price'}{l s='Total'}
{$product.image} + + {$product.name}{if isset($product.attributes)}
{$product.attributes}{/if}
+ {if $product.reference}{l s='Ref:'} {$product.reference}{/if} + {if $product.reference && $product.supplier_reference} / {$product.supplier_reference}{/if} +
+
{displayWtPriceWithCurrency price=$product.product_price currency=$currency}{displayWtPriceWithCurrency price=$product.product_total currency=$currency}
{l s='Total cost of room types:'} {displayWtPriceWithCurrency price=$total_products currency=$currency}
{l s='Total value of vouchers:'}{l s='Total value of vouchers:'} {displayWtPriceWithCurrency price=$total_discounts currency=$currency}
{l s='Total cost of gift wrapping:'}{l s='Total cost of gift wrapping:'} {displayWtPriceWithCurrency price=$total_wrapping currency=$currency}
{l s='Total cost of shipping:'}{l s='Total cost of shipping:'} {displayWtPriceWithCurrency price=$total_shipping currency=$currency}
{l s='Total:'}{l s='Total:'} {displayWtPriceWithCurrency price=$total_price currency=$currency}
{if $discounts} diff --git a/admin/themes/default/template/controllers/dashboard/helpers/view/view.tpl b/admin/themes/default/template/controllers/dashboard/helpers/view/view.tpl index 299135b86..3b54c23d5 100644 --- a/admin/themes/default/template/controllers/dashboard/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/dashboard/helpers/view/view.tpl @@ -23,100 +23,100 @@ * International Registered Trademark & Property of PrestaShop SA *}
- {$hookDashboardTop} -
- {if $warning} -
-
{$warning}
-
- {/if} -
-
-
-
-
-
-
- - - - - - -
- - - -
- - {$calendar} -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
+ {$hookDashboardTop} +
+ {if $warning} +
+
{$warning}
+
+ {/if} +
+
+
+
+
+
+
+ + + + + + +
+ + + +
+ + {$calendar} +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
{include file='recomended-banner.tpl'} -
-
-
- {$hookDashboardZoneTwo} -
-
-
- {$hookDashboardZoneOne} -
-
-
- {$hookDashboardZoneThree} +
+
+
+ {$hookDashboardZoneTwo} +
+
+
+ {$hookDashboardZoneOne} +
+
+
+ {$hookDashboardZoneThree} {if isset($upgrade_info) && $upgrade_info}
@@ -124,29 +124,28 @@
{/if} -
- -
-
-
- -
+
+ +
+
+
+
diff --git a/admin/themes/default/template/controllers/login/content.tpl b/admin/themes/default/template/controllers/login/content.tpl index 109cb97f1..f28b4a838 100644 --- a/admin/themes/default/template/controllers/login/content.tpl +++ b/admin/themes/default/template/controllers/login/content.tpl @@ -74,7 +74,7 @@
-
+ - diff --git a/modules/dashoccupancy/dashoccupancy.php b/modules/dashoccupancy/dashoccupancy.php index 472f7b446..b99b30385 100644 --- a/modules/dashoccupancy/dashoccupancy.php +++ b/modules/dashoccupancy/dashoccupancy.php @@ -70,8 +70,6 @@ class DashOccupancy extends Module 'count_occupied' => sprintf('%02d', $occupancyData['count_occupied']), 'count_available' => sprintf('%02d', $occupancyData['count_available']), 'count_unavailable' => sprintf('%02d', $occupancyData['count_unavailable']), - 'date_occupancy_range' => $this->l('(from %s to %s)'), - 'date_occupancy_avail_format' => $this->context->language->date_format_lite, )); return $this->display(__FILE__, 'dashboard_zone_one.tpl'); diff --git a/modules/dashoccupancy/views/js/dashoccupancy.js b/modules/dashoccupancy/views/js/dashoccupancy.js index 516502741..2b3191fe9 100644 --- a/modules/dashoccupancy/views/js/dashoccupancy.js +++ b/modules/dashoccupancy/views/js/dashoccupancy.js @@ -41,22 +41,17 @@ function generateAvailablityPieChart(chartData) { } $(document).ready(function() { - if (typeof date_occupancy_range === "undefined") - var date_occupancy_range = '(from %s to %s)'; - - if (typeof date_occupancy_avail_format === "undefined") - var date_occupancy_avail_format = 'Y-mm-dd'; - $('#date-start').change(function() { start = Date.parseDate($('#date-start').val(), 'Y-m-d'); end = Date.parseDate($('#date-end').val(), 'Y-m-d'); - $('#dashoccupancy_date_range').html(sprintf(date_occupancy_range, start.format(date_occupancy_avail_format), end.format(date_occupancy_avail_format))); + + $('#dashoccupancy_date_range').html(sprintf(date_subtitle, start.format(date_format), end.format(date_format))); }); $('#date-end').change(function() { start = Date.parseDate($('#date-start').val(), 'Y-m-d'); end = Date.parseDate($('#date-end').val(), 'Y-m-d'); - $('#dashoccupancy_date_range').html(sprintf(date_occupancy_range, start.format(date_occupancy_avail_format), end.format(date_occupancy_avail_format))); + $('#dashoccupancy_date_range').html(sprintf(date_subtitle, start.format(date_format), end.format(date_format))); }); -}); \ No newline at end of file +}); diff --git a/modules/dashoccupancy/views/templates/hook/dashboard_zone_one.tpl b/modules/dashoccupancy/views/templates/hook/dashboard_zone_one.tpl index 9d289a61f..609164a22 100644 --- a/modules/dashoccupancy/views/templates/hook/dashboard_zone_one.tpl +++ b/modules/dashoccupancy/views/templates/hook/dashboard_zone_one.tpl @@ -84,8 +84,3 @@
- - diff --git a/modules/hotelreservationsystem/classes/HotelBookingDetail.php b/modules/hotelreservationsystem/classes/HotelBookingDetail.php index 69557aab5..3f020f1ff 100644 --- a/modules/hotelreservationsystem/classes/HotelBookingDetail.php +++ b/modules/hotelreservationsystem/classes/HotelBookingDetail.php @@ -225,6 +225,7 @@ class HotelBookingDetail extends ObjectModel */ public function getBookingData($params) { + $this->context = Context::getContext(); // extract all keys and values of the array [$params] into variables and values extract($this->getBookingDataParams($params)); if ($date_from && $date_to && $hotel_id) { @@ -248,12 +249,19 @@ class HotelBookingDetail extends ObjectModel $num_cart = 0; $new_part_arr = array(); $booking_data = array(); + $applyLosRestriction = true; if ($search_partial) { $this->partAvaiDates = array(); $this->allReqDates = $this->createDateRangeArray($date_from, $date_to, 1); } + if (isset(Context::getContext()->employee->id)) { + if (!Configuration::get('PS_LOS_RESTRICTION_BO')) { + $applyLosRestriction = false; + } + } + foreach ($room_types as $key => $room_type) { if ($search_partial) { $this->dltDates = array(); @@ -261,6 +269,10 @@ class HotelBookingDetail extends ObjectModel $total_rooms += $obj_room_info->getHotelRoomInfo($room_type['id_product'], $hotel_id, 1); + // Get min & max LOS + $objRoomTypeRestriction = new HotelRoomTypeRestrictionDateRange(); + $losRestriction = $objRoomTypeRestriction->getRoomTypeLengthOfStay($room_type['id_product'], $date_from); + $obj_product = new Product((int) $room_type['id_product']); $product_name = $obj_product->name[Configuration::get('PS_LANG_DEFAULT')]; @@ -309,7 +321,15 @@ class HotelBookingDetail extends ObjectModel if ($search_unavai) { $sql1 = 'SELECT `id_product`, `id_hotel`, `room_num`, `comment` AS `room_comment` FROM `'._DB_PREFIX_.'htl_room_information` - WHERE `id_hotel`='.(int)$hotel_id.' AND `id_product` ='.(int)$room_type['id_product'].' AND `id_status` = '. HotelRoomInformation::STATUS_INACTIVE; + WHERE `id_hotel`='.(int)$hotel_id.' AND `id_product` ='.(int)$room_type['id_product'].' AND (`id_status` = '. HotelRoomInformation::STATUS_INACTIVE; + if ($applyLosRestriction) { + $sql1 .= ' OR ( DATEDIFF(\''.$date_to.'\', \''.$date_from.'\') < '.(int)$losRestriction['min_los']; + if ((int)$losRestriction['max_los']) { + $sql1 .= ' OR DATEDIFF(\''.$date_to.'\', \''.$date_from.'\') > '.(int)$losRestriction['max_los']; + } + $sql1 .= ')'; + } + $sql1 .= ')'; $sql2 = 'SELECT hri.`id_product`, hri.`id_hotel`, hri.`room_num`, hri.`comment` AS `room_comment` FROM `'._DB_PREFIX_.'htl_room_information` AS hri @@ -357,7 +377,18 @@ class HotelBookingDetail extends ObjectModel $joinAvailRoomSearch = ''; - $whereAvailRoomSearch = 'WHERE ri.`id_hotel`='.(int)$hotel_id.' AND ri.`id_product`='.(int)$room_type['id_product'].' AND ri.`id_status` != '. HotelRoomInformation::STATUS_INACTIVE .' AND ri.`id` NOT IN ('.$exclude_ids.')'; + $whereAvailRoomSearch = 'WHERE ri.`id_hotel`='.(int)$hotel_id.' AND ri.`id_product`='.(int)$room_type['id_product'].' AND ri.`id_status` != '. HotelRoomInformation::STATUS_INACTIVE; + + // Check min & max LOS restrictions + if ($applyLosRestriction) { + $whereAvailRoomSearch .= ' AND DATEDIFF(\''.$date_to.'\', \''.$date_from.'\') >= '.(int)$losRestriction['min_los']; + // check max LOS restriction is greater than zero + if ((int)$losRestriction['max_los']) { + $whereAvailRoomSearch .= ' AND DATEDIFF(\''.$date_to.'\', \''.$date_from.'\') <= '.(int)$losRestriction['max_los']; + } + } + + $whereAvailRoomSearch .= ' AND ri.`id` NOT IN ('.$exclude_ids.')'; $groupByAvailRoomSearch = ''; $orderByAvailRoomSearch = ''; diff --git a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php index 26d3c5a4b..c88ff1324 100644 --- a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php +++ b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php @@ -29,6 +29,8 @@ class HotelReservationSystemDb `id_hotel` int(11) NOT NULL, `adult` smallint(6) NOT NULL, `children` smallint(6) NOT NULL, + `min_los` smallint(6) NOT NULL DEFAULT '1', + `max_los` smallint(6) NOT NULL DEFAULT '0', `date_add` datetime NOT NULL, `date_upd` datetime NOT NULL, PRIMARY KEY (`id`) @@ -352,6 +354,18 @@ class HotelReservationSystemDb PRIMARY KEY (`id`) ) ENGINE="._MYSQL_ENGINE_." DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;", + "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_room_type_restriction_date_range` ( + `id_rt_restriction` int(11) NOT NULL AUTO_INCREMENT, + `id_product` int(11) NOT NULL, + `min_los` smallint(6) unsigned NOT NULL DEFAULT '1', + `max_los` smallint(6) unsigned NOT NULL DEFAULT '0', + `date_from` date NOT NULL, + `date_to` date NOT NULL, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_rt_restriction`) + ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;", + "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_access` ( `id_profile` int(10) unsigned NOT NULL, `id_hotel` int(10) unsigned NOT NULL, @@ -408,6 +422,7 @@ class HotelReservationSystemDb `'._DB_PREFIX_.'htl_room_type_demand_price`, `'._DB_PREFIX_.'htl_room_type_demand`, `'._DB_PREFIX_.'htl_room_disable_dates`, + `'._DB_PREFIX_.'htl_room_type_restriction_date_range`, `'._DB_PREFIX_.'htl_access`' ); } diff --git a/modules/hotelreservationsystem/classes/HotelRoomType.php b/modules/hotelreservationsystem/classes/HotelRoomType.php index dc070b202..49cde494f 100644 --- a/modules/hotelreservationsystem/classes/HotelRoomType.php +++ b/modules/hotelreservationsystem/classes/HotelRoomType.php @@ -25,6 +25,8 @@ class HotelRoomType extends ObjectModel public $id_hotel; public $adult; public $children; + public $min_los; + public $max_los; public $date_add; public $date_upd; @@ -36,6 +38,8 @@ class HotelRoomType extends ObjectModel 'id_hotel' => array('type' => self::TYPE_INT, 'validate' => 'isInt'), 'adult' => array('type' => self::TYPE_INT, 'validate' => 'isInt'), 'children' => array('type' => self::TYPE_INT, 'validate' => 'isInt'), + 'min_los' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'default' => 1), + 'max_los' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'default' => 0), 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), ), @@ -211,14 +215,17 @@ class HotelRoomType extends ObjectModel * * @return [array|false] [If data found returns array containing information of the room type else returns false] */ - public function getRoomTypeInfoByIdProduct($id_product) + public function getRoomTypeInfoByIdProduct($id_product, $idLang = false) { - $idLang = Context::getContext()->language->id; - $sql = 'SELECT hrt.`id`,hrt.`id_hotel`, hrt.`adult`, hrt.`children`, hbl.`hotel_name` + if (!$idLang) { + $idLang = Context::getContext()->language->id; + } + + $sql = 'SELECT hrt.`id`,hrt.`id_hotel`, hrt.`adult`, hrt.`children`, hbl.`hotel_name`, hrt.`min_los`, hrt.`max_los` FROM `'._DB_PREFIX_.'htl_room_type` AS hrt INNER JOIN `'._DB_PREFIX_.'htl_branch_info_lang` AS hbl ON (hbl.`id` = hrt.`id_hotel` AND hbl.`id_lang` = '.(int)$idLang.') - WHERE `id_product` = '.(int)$id_product; + WHERE hrt.`id_product` = '.(int)$id_product; return Db::getInstance()->getRow($sql); } diff --git a/modules/hotelreservationsystem/classes/HotelRoomTypeRestrictionDateRange.php b/modules/hotelreservationsystem/classes/HotelRoomTypeRestrictionDateRange.php new file mode 100644 index 000000000..1d8806597 --- /dev/null +++ b/modules/hotelreservationsystem/classes/HotelRoomTypeRestrictionDateRange.php @@ -0,0 +1,202 @@ + +* @copyright 2010-2021 Webkul IN +* @license https://store.webkul.com/license.html +*/ + +class HotelRoomTypeRestrictionDateRange extends ObjectModel +{ + public $id_rt_restriction; + public $id_product; + public $min_los; + public $max_los; + public $date_from; + public $date_to; + public $date_add; + public $date_upd; + + const WK_ROOM_TYPE_MIN_LOS = 1; + const WK_ROOM_TYPE_MAX_LOS = 2; + + public static $definition = array( + 'table' => 'htl_room_type_restriction_date_range', + 'primary' => 'id_rt_restriction', + 'fields' => array( + 'id_product' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), + 'min_los' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true, 'default' => 1), + 'max_los' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true, 'default' => 0), + 'date_from' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'required' => true), + 'date_to' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'required' => true), + 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), + 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate') + ), + ); + + protected $webserviceParameters = array( + 'objectMethods' => array( + 'add' => 'addWs', + 'update' => 'updateWs', + 'delete' => 'deleteWs', + ), + 'objectsNodeName' => 'restriction_date_ranges', + 'objectNodeName' => 'restriction_date_range', + 'fields' => array( + 'id_product' => array( + 'xlink_resource' => array( + 'resourceName' => 'room_types', + ) + ), + ), + ); + + public function getRoomTypeLengthOfStayRestriction($idRoomType) + { + $sql = 'SELECT * FROM `'._DB_PREFIX_.'htl_room_type_restriction_date_range` WHERE `id_product` = '.(int)$idRoomType; + return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); + } + + public function getRoomTypeLengthOfStay($idRoomType, $date = false, $losRestrictionType = false) + { + $losRestriction = array(); + + // if date is given the return LOS for date range + if ($date) { + $date = date('Y-m-d', strtotime($date)); + + $sql = 'SELECT `min_los`, `max_los` + FROM `'._DB_PREFIX_.'htl_room_type_restriction_date_range` + WHERE `id_product` = '.(int) $idRoomType.' AND `date_from` <= \''.pSQL($date).'\' AND `date_to` > \''.pSQL($date).'\''; + + $losRestriction = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); + } + + // if no LOS for date range the find it for room type + if (!$losRestriction) { + $sql = 'SELECT `min_los`, `max_los` + FROM `'._DB_PREFIX_.'htl_room_type` + WHERE `id_product` = '.(int) $idRoomType; + + $losRestriction = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); + } + + if ($losRestriction) { + if ($losRestrictionType) { + if ($losRestrictionType == self::WK_ROOM_TYPE_MIN_LOS) { + return $losRestriction['min_los']; + } elseif ($losRestrictionType == self::WK_ROOM_TYPE_MAX_LOS) { + return $losRestriction['max_los']; + } + } + + return $losRestriction; + } + + return false; + } + + public function validateRoomTypeLengthOfStayRestriction($dateFromRestriction, $dateToRestriction, $minLosDays, $maxLosDays) + { + $errors = array(); + $objModule = Module::getinstanceByName('hotelreservationsystem'); + foreach ($dateFromRestriction as $dateFromKey => $dateFrom) { + $dateTo = $dateToRestriction[$dateFromKey]; + $minDay = $minLosDays[$dateFromKey]; + $maxDay = $maxLosDays[$dateFromKey]; + + // validate the fields before saving in the table + if (!$minDay) { + $errors[] = $objModule->l('Minimum length of stay is required.', 'HotelRoomTypeLosDateRanges'). + ' [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } elseif (!Validate::isUnsignedInt($minDay)) { + $errors[] = $objModule->l('Minimum length of stay is invalid.', 'HotelRoomTypeLosDateRanges').' + [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } + + if ($maxDay == null) { + $errors[] = $objModule->l('Maximum length of stay is required.', 'HotelRoomTypeLosDateRanges'). + ' [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } elseif (!Validate::isUnsignedInt($maxDay)) { + $errors[] = $objModule->l('Maximum length of stay is invalid.', 'HotelRoomTypeLosDateRanges'). + ' [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } elseif ($minDay && $maxDay > 0 && ($minDay > $maxDay)) { + $this->errors[] = Tools::displayError('Value of global maximum length of stay must be greater than global minimum length of stay.'); + } + + if (!$dateFrom || $dateFrom == '') { + $errors[] = $objModule->l('Date from is required.', 'HotelRoomTypeLosDateRanges'). + ' [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } else { + $dateFrom = date('Y-m-d', strtotime($dateFrom)); + if (!Validate::isDate($dateFrom)) { + $errors[] = $objModule->l('Date from is invalid.', 'HotelRoomTypeLosDateRanges'). + ' [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } + } + + if (!$dateTo || $dateTo == '') { + $errors[] = $objModule->l('Date to is required.', 'HotelRoomTypeLosDateRanges').' + [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } else { + $dateTo = date('Y-m-d', strtotime($dateTo)); + if (!Validate::isDate($dateTo)) { + $errors[] = $objModule->l('Date to is invalid.', 'HotelRoomTypeLosDateRanges'). + ' [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } elseif (strtotime($dateTo) <= strtotime($dateFrom)) { + $errors[] = $dateFrom.' and '.$dateTo . $objModule->l('\'Date to\' must be a greater than \'date from\'.', 'HotelRoomTypeLosDateRanges'). + ' [ '.$objModule->l('LOS for date range in row no.', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).' ]'; + } else { + // validate date ranges from other date ranges + foreach ($dateToRestriction as $dateToKey => $newDateTo) { + if ($dateFromKey > $dateToKey) { + if (!((strtotime($dateFrom) < strtotime($dateFromRestriction[$dateToKey]) && strtotime($dateTo) <= strtotime($dateFromRestriction[$dateToKey])) || (strtotime($dateFrom) >= strtotime($newDateTo) && strtotime($dateTo) > strtotime($newDateTo)))) { + $errors[] = $objModule->l('Date ranges are conflicting with each other.', 'HotelRoomTypeLosDateRanges').' [ '.$objModule->l('Conflicting rows are', 'HotelRoomTypeLosDateRanges').' : '.($dateFromKey+1).', '.($dateToKey+1).' ]'; + } + } + } + } + } + } + + return $errors; + } + + // Webservice :: webservice add function + public function addWs($autodate = true, $null_values = false) + { + $objRoomType = new HotelRoomType(); + if ($roomTypeInfo = $objRoomType->getRoomTypeInfoByIdProduct($this->id_product)) { + return $this->add($autodate, $null_values); + } + return false; + } + + // Webservice :: webservice update function + public function updateWs($null_values = false) + { + $objRoomType = new HotelRoomType(); + if ($roomTypeInfo = $objRoomType->getRoomTypeInfoByIdProduct($this->id_product)) { + return $this->update($null_values); + } + return false; + } + + // Webservice :: webservice delete function + public function deleteWs() + { + return $this->delete(); + } +} diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index 3919943a1..2c8e81273 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -402,14 +402,14 @@ class AdminHotelRoomsBookingController extends ModuleAdminController $rm_amount = $roomTypeDateRangePrice['total_price_tax_excl']; $cart_data = array('room_num' => $obj_rm_info->room_num, 'room_type' => Product::getProductName((int)$id_product), - 'date_from' => date('Y-M-d', strtotime($date_from)), - 'date_to' => date('Y-M-d', strtotime($date_to)), - 'amount' => $rm_amount, + 'date_from' => Tools::displayDate($date_from), + 'date_to' => Tools::displayDate($date_to), + 'amount' => Tools::displayPrice($rm_amount), 'qty' => $num_day, 'rms_in_cart' => $rms_in_cart, - 'total_amount' => $total_amount, + 'total_amount' => Tools::displayPrice($total_amount), 'booking_stats' => $booking_stats, - 'id_cart_book_data' => $obj_cart_book_data->id + 'id_cart_book_data' => $obj_cart_book_data->id); ); if ($obj_cart_book_data->id) { @@ -443,7 +443,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController $booking_stats = $obj_booking_dtl->getBookingData($bookingParams); $cart_data = array( - 'total_amount' => $total_amount, + 'total_amount' => Tools::displayPrice($total_amount), 'rms_in_cart' => $rms_in_cart, 'booking_stats' => $booking_stats ); @@ -490,7 +490,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController $room_tpl = $this->context->smarty->fetch(_PS_MODULE_DIR_.$tpl_path); $cart_data = array( - 'total_amount' => $total_amount, + 'total_amount' => Tools::displayPrice($total_amount), 'room_tpl' => $room_tpl, 'rms_in_cart' => $rms_in_cart, 'booking_data' => $booking_data, diff --git a/modules/hotelreservationsystem/controllers/admin/AdminOrderRestrictSettingsController.php b/modules/hotelreservationsystem/controllers/admin/AdminOrderRestrictSettingsController.php index 62c76722c..07d5bcb84 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminOrderRestrictSettingsController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminOrderRestrictSettingsController.php @@ -66,6 +66,7 @@ class AdminOrderRestrictSettingsController extends ModuleAdminController 'max_order_date' => array( 'title' => $this->l('Maximum Booking Date'), 'align' => 'center', + 'type' => 'date', ), ); $this->bulk_actions = array( diff --git a/modules/hotelreservationsystem/define.php b/modules/hotelreservationsystem/define.php index 6218e15af..982227138 100644 --- a/modules/hotelreservationsystem/define.php +++ b/modules/hotelreservationsystem/define.php @@ -39,6 +39,7 @@ require_once 'classes/HotelRoomTypeGlobalDemand.php'; require_once 'classes/HotelRoomTypeGlobalDemandAdvanceOption.php'; require_once 'classes/HotelRoomTypeDemandPrice.php'; require_once 'classes/HotelRoomTypeDemand.php'; +require_once 'classes/HotelRoomTypeRestrictionDateRange.php'; require_once 'classes/QloWebservice.php'; require_once 'classes/QloRoomType.php'; @@ -47,4 +48,4 @@ require_once 'classes/HotelBranchRefundRules.php'; // Web services classes require_once 'classes/WebserviceSpecificManagementQlo.php'; -require_once 'classes/WebserviceSpecificManagementHotelImages.php'; \ No newline at end of file +require_once 'classes/WebserviceSpecificManagementHotelImages.php'; diff --git a/modules/hotelreservationsystem/views/js/HotelReservationAdmin.js b/modules/hotelreservationsystem/views/js/HotelReservationAdmin.js index e791a8b18..0f14cd5b4 100644 --- a/modules/hotelreservationsystem/views/js/HotelReservationAdmin.js +++ b/modules/hotelreservationsystem/views/js/HotelReservationAdmin.js @@ -630,16 +630,16 @@ $(document).ready(function() { btn.attr('data-id-cart', result.id_cart); btn.attr('data-id-cart-book-data', result.id_cart_book_data); html = ""; - html += "" + result.room_num + ""; - html += "" + result.room_type + ""; - html += "" + result.date_from + " To " + result.date_to + ""; - html += "" + currency_prefix + result.amount + currency_suffix + ""; - html += ""; + html += "" + result.room_num + ""; + html += "" + result.room_type + ""; + html += "" + result.date_from + " - " + result.date_to + ""; + html += "" + result.amount + ""; + html += ""; html += ""; $('.cart_tbody').append(html); - $('#cart_total_amt').html(currency_prefix + result.total_amount + currency_suffix); + $('#cart_total_amt').html(result.total_amount); // $('#cart_record').html(result.rms_in_cart); // For Stats @@ -701,16 +701,16 @@ $(document).ready(function() { btn.attr('data-id-cart-book-data', result.id_cart_book_data); html = ""; - html += "" + result.room_num + ""; - html += "" + result.room_type + ""; - html += "" + result.date_from + " To " + result.date_to + ""; - html += "" + currency_prefix + result.amount + currency_suffix + ""; - html += ""; + html += "" + result.room_num + ""; + html += "" + result.room_type + ""; + html += "" + result.date_from + " - " + result.date_to + ""; + html += "" + result.amount + ""; + html += ""; html += ""; $('.cart_tbody').append(html); - $('#cart_total_amt').html(currency_prefix + result.total_amount + currency_suffix); + $('#cart_total_amt').html(result.total_amount); // $('#cart_record').html(result.rms_in_cart); // For Stats @@ -763,8 +763,10 @@ $(document).ready(function() { $(".cart_booking_btn").attr('disabled', 'true'); } - btn.parent().parent().remove(); - $('#cart_total_amt').html(currency_prefix + result.total_amount + currency_suffix); + btn.hide(400, function () { + btn.closest('tr').remove(); + }); + $('#cart_total_amt').html(result.total_amount); // $('#cart_record').html(result.rms_in_cart); // For Stats diff --git a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl index 5111597d4..745368c1b 100644 --- a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl @@ -215,7 +215,7 @@ {foreach from=$book_v['data']['available'] key=avai_k item=avai_v} {$avai_v['room_num']|escape:'htmlall':'UTF-8'} - {$date_from|escape:'htmlall':'UTF-8'|date_format:'%d-%m-%Y'} - {$date_to|escape:'htmlall':'UTF-8'|date_format:'%d-%m-%Y'} + {dateFormat date=date('Y-m-d', strtotime($date_from))} - {dateFormat date=date('Y-m-d', strtotime($date_to))} {$avai_v['room_comment']|escape:'htmlall':'UTF-8'} {foreach $allotment_types as $allotment_type} @@ -255,7 +255,7 @@ {foreach from=$part_v['avai_dates'] key=sub_part_k item=sub_part_v} -

{$sub_part_v['date_from']|escape:'htmlall':'UTF-8'|date_format:'%d-%m-%Y'} - {$sub_part_v['date_to']|escape:'htmlall':'UTF-8'|date_format:'%d-%m-%Y'}

+

{dateFormat date=date('Y-m-d', strtotime($sub_part_v['date_from']))} - {dateFormat date=date('Y-m-d', strtotime($sub_part_v['date_to']))}

{foreach $allotment_types as $allotment_type} @@ -299,7 +299,7 @@ {foreach from=$booked_v['detail'] key=rm_dtl_k item=rm_dtl_v} - + - {/if} - - - - {/foreach} - {assign var=roomCount value=$roomCount+1} - {/foreach} - {/if} - {/foreach} - {/foreach} - {/if} diff --git a/translations/custom_mails/hotel-booking-cart-data.tpl b/translations/custom_mails/hotel-booking-cart-data.tpl deleted file mode 100644 index 9389a895b..000000000 --- a/translations/custom_mails/hotel-booking-cart-data.tpl +++ /dev/null @@ -1,119 +0,0 @@ -{if isset($list)} - {foreach from=$list key=data_k item=data_v} - {foreach from=$data_v['date_diff'] key=rm_k item=rm_v} - - - - - - - - - - - {/foreach} - {/foreach} -{/if} - diff --git a/translations/custom_mails/hotel-booking-cart-data.txt b/translations/custom_mails/hotel-booking-cart-data.txt deleted file mode 100644 index de17a1632..000000000 --- a/translations/custom_mails/hotel-booking-cart-data.txt +++ /dev/null @@ -1,23 +0,0 @@ -{if isset($list)} - {foreach from=$list key=data_k item=data_v} - {foreach from=$data_v['date_diff'] key=rm_k item=rm_v} - - - - {$data_v['name']} - - {$data_v['adult']} {l s='Adults'}, {$data_v['children']} {l s='Children'} - - {convertPrice price=$data_v['unit_price']} - - {$rm_v['num_rm']} - - {$rm_v['data_form']|date_format:"%d-%b-%G"} - - {$rm_v['data_to']|date_format:"%d-%b-%G"} - - {$rm_v['amount']} - {/foreach} - {/foreach} -{/if} - diff --git a/translations/custom_mails/order_conf.html b/translations/custom_mails/order_conf.html deleted file mode 100755 index 14801d8c8..000000000 --- a/translations/custom_mails/order_conf.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - Message from {shop_name} - - - - - - -
{$rm_dtl_v['date_from']|escape:'htmlall':'UTF-8'|date_format:'%d-%m-%Y'} - {$rm_dtl_v['date_to']|escape:'htmlall':'UTF-8'|date_format:'%d-%m-%Y'}{dateFormat date=date('Y-m-d', strtotime($rm_dtl_v['date_from']))} - {dateFormat date=date('Y-m-d', strtotime($rm_dtl_v['date_to']))} {$rm_dtl_v['comment']|escape:'htmlall':'UTF-8'} {if $rm_dtl_v['booking_type'] == HotelBookingDetail::ALLOTMENT_AUTO}{l s='Auto Allotment' mod='hotelreservationsystem'}{elseif $rm_dtl_v['booking_type'] == HotelBookingDetail::ALLOTMENT_MANUAL}{l s='Manual Allotment' mod='hotelreservationsystem'}{/if} @@ -368,10 +368,10 @@ - - - - + + + + @@ -379,13 +379,11 @@ {if isset($cart_bdata)} {foreach $cart_bdata as $cart_data} - - - - - + + + + + {/foreach} {/if} @@ -395,7 +393,7 @@
{l s='Room No.' mod='hotelreservationsystem'}{l s='Room Type' mod='hotelreservationsystem'}{l s='Duration' mod='hotelreservationsystem'}{l s='Amount (Tax excl.)' mod='hotelreservationsystem'}{l s='Room No.' mod='hotelreservationsystem'}{l s='Room Type' mod='hotelreservationsystem'}{l s='Duration' mod='hotelreservationsystem'}{l s='Amount (Tax excl.)' mod='hotelreservationsystem'}
{$cart_data['room_num']|escape:'htmlall':'UTF-8'}{$cart_data['room_type']|escape:'htmlall':'UTF-8'} - {$cart_data['date_from']|escape:'htmlall':'UTF-8'|date_format:'%d-%m-%Y'} - {$cart_data['date_to']|escape:'htmlall':'UTF-8'|date_format:'%d-%m-%Y'} - {convertPrice price=$cart_data['amt_with_qty']}{$cart_data['room_num']|escape:'htmlall':'UTF-8'}{$cart_data['room_type']|escape:'htmlall':'UTF-8'}{dateFormat date=$cart_data['date_from']} - {dateFormat date=$cart_data['date_to']}{convertPrice price=$cart_data['amt_with_qty']}
- + @@ -521,9 +519,6 @@ {addJsDefL name=remove}{l s='Remove' js=1 mod='hotelreservationsystem'}{/addJsDefL} {addJsDefL name=noRoomTypeAvlTxt}{l s='No room type available.' js=1 mod='hotelreservationsystem'}{/addJsDefL} - {addJsDef currency_prefix = $currency->prefix} - {addJsDef currency_suffix = $currency->suffix} - {addJsDef currency_sign = $currency->sign} {addJsDef currency_format = $currency->format} {addJsDef currency_blank = $currency->blank} diff --git a/modules/qloblockcontact/CHANGELOG.txt b/modules/qloblockcontact/CHANGELOG.txt new file mode 100644 index 000000000..5932aa450 --- /dev/null +++ b/modules/qloblockcontact/CHANGELOG.txt @@ -0,0 +1,4 @@ +Changelog + +v1.0.0 +- first release \ No newline at end of file diff --git a/modules/qloblockcontact/CustomizationPolicy.txt b/modules/qloblockcontact/CustomizationPolicy.txt new file mode 100644 index 000000000..7a688847f --- /dev/null +++ b/modules/qloblockcontact/CustomizationPolicy.txt @@ -0,0 +1,80 @@ +1. Definitions +-------------- +"Webkul" means Webkul Software Pvt. Ltd. +"Customization" means those services by which functionality / features are added to a product that are not included in the base installation of a product, which are aimed to suit the specific needs of the customer. +"Module" means the custom add-on module to be developed and provided by Webkul to you in accordance with this policy and the Order Form. +"Order Form" means the order form (electronic or hard copy), accepted by Webkul, through which you ordered the Module to be developed and provided by Webkul and which sets out the details, specifications and parameters of the customized Module to be provided. +"Software" means the software licensed by Webkul to you pursuant to the terms and conditions of a Webkul Software License Agreement. + + +2. Module Development +--------------------- +All customization Services and use of the Module are subject to the terms and conditions of Webkul’s Software Licence Agreement, found on Webkul’s website, and are also subject to the terms and conditions set forth in the Order Form, as well as the customization parameters. No other customization services will be provided unless expressly agreed upon by you and Webkul in writing, signed by authorized representatives of you and Webkul. + + +3. Customization Services +------------------------- +Customization Services will be provided in accordance with the terms of the Order Form and subject to the conditions set forth on the Order Form including full payment of all fees and adherence to all time limits and scheduling restrictions. +If expressly stated on the Order Form, the Customization Services and Module shall be subject to acceptance by you in accordance with the acceptance criteria set forth in the Order Form. Where there is no acceptance criteria set forth on the Order Form, acceptance shall be deemed to occur upon the earliest of: +completion of the acceptance criteria, +Webkul's completion of the Customization Services and written notification to you of such completion, +your use of the Module in other than a test environment. +Notwithstanding the foregoing, if acceptance testing, delivery or completion is delayed by thirty (30) days or more for reasons not related to Webkul’s performance, you must pay the value of any milestone that is contingent on acceptance. Such acceptance does not negate any warranty rights that you may have respecting the Module, as set forth herein. You are solely responsible for preparing your facilities and equipment for installation of the Module, where applicable. +Webkul will make reasonable efforts to accommodate your time and deadline requirements with respect to the performance of Customization Services; however, meeting such requirements is subject to availability of resources, both human and equipment at the time of your request and is dependent on your availability to provide input and to perform necessary actions. Webkul shall not be liable in any way for any delay or damage arising from Webkul’s failure to meet such of your requirements or any deadlines. +Any changes to the Customization Services or Module requirements after execution of the Order Form will be subject to a cost and delivery re-assessment, and a written change order or re-quote that has been mutually agreed upon by you and Webkul in writing. Webkul reserves the right to make changes in the design of its Software without the obligation to make equivalent changes to the Module. +If, pursuant to your request, Webkul reviews drawings and documents prepared by others in connection with the Customization Services, including your personnel and other consultants, contractors, and suppliers, Webkul’s review of such drawings and documents shall be only to confirm general compliance with the intent of the design and information given, and shall not constitute acceptance by Webkul of any responsibility for correctness of specifications or details of such drawings and documentation. Webkul shall be entitled to rely on all information provided, and decisions and approvals made, by you in connection with Webkul’s work hereunder. You agree that Webkul and its personnel shall not be subject to any liability or costs relating to the Customization Services to the extent such liability and costs are attributable to any information provided by you that is not complete, accurate or current in all material respects. +The Module, and all parts thereof, shall at all times be treated as Software licensed to you under the terms and conditions of the Licence Agreement. + + +4. Term and Termination +----------------------- +The term of the Development Services, if any, shall be as set out on the Order Form. +Customization Services may be terminated by Webkul immediately upon notice for cause if: +you materially breach any agreement entered into between you and Webkul, including Webkul’s Licence Agreement and/or any User / software license agreement relating to Webkul’s products (or you consistently fail to properly perform and observe your obligations under such agreements or any applicable Webkul Software policy), and you fail to rectify the situation within ten (10) calendar days of notice from Webkul; or +you become insolvent, or a receiver or receiver-manager is appointed for any part of your property, or you make an assignment, proposal or arrangement for the benefit of your creditors or you file an assignment in bankruptcy, or any proceedings under any bankruptcy or insolvency laws are commenced against you. +Webkul shall have the right to terminate Customization Services immediately upon notice to you, without penalty or refund, if any agreement relating to the Software is terminated for any reason. +Each party shall have the right to terminate the Development Services for convenience upon ninety (90) days’ notice to the other party. +Termination of the Customization Services or any agreement shall not affect your payment obligation for any Customization Services performed by Webkul prior to the date of termination, regardless of whether you have had, as at the date of termination, any use of the Module or part thereof. In the event that the Customization Services are terminated prior to the delivery of the Module to you, Webkul shall not be obligated to deliver any work-in-progress or any portion of the Module to you, unless otherwise expressly agreed by the parties in writing. + + +5. Fees +------- +You shall pay fees for the Customization Services and Module license in accordance with the fee schedule set forth in the Order Form. Webkul shall submit invoices to you for all fees and payments due, including applicable expenses, on a monthly basis in arrears. You shall pay to Webkul the full amount of each invoice received from Webkul within seven (7) days of receipt of the invoice. All invoices shall detail the nature of the Customization Services performed, the fees payable, and the basis on which the calculation of the fees has been made. +You are responsible for, and shall pay all taxes relating to the Customization Services and the Module. Unless otherwise indicated, all amounts payable by you under an Order Form are exclusive of any tax, duty, levy, or similar government charge that may be assessed by any jurisdiction, whether based on gross revenue, the delivery, possession or use of the Module, other Software or Customization Services, or otherwise. +If you fail to pay any amount due within thirty (30) days of such payment becoming due and payable, in addition to any other rights and remedies available to Webkul, Webkul shall be entitled to charge interest on all outstanding amounts at the lesser of 18% per annum or the maximum rate permitted by law, such interest commencing as of the due date for such payment. You shall also be responsible for paying for all reasonable fees and costs incurred by Webkul, including legal fees, in collecting any overdue amounts or enforcing any provision of any agreement entered into between you and Webkul. +Pricing is subject to Webkul’s understanding of the project requirements, the terms of this policy and the Order Form. Webkul reserves the right to invoice you for additional Customization Services requested by you, or that are required based on incomplete details or specifications provided by you, that are not specified in the Order Form but are provided by Webkul to you, provided that Webkul provides you with notice that such additional Customization Services are not included in the Order Form and are subject to Webkul’s then current time and materials fee schedule for such Customization Services. Invoices for such additional Customization Services shall be subject to payment in accordance with this Section. + + +6. Intellectual Property Rights +------------------------------- +Webkul shall own all intellectual property rights (whether or not patentable or registrable under copyright, trade-mark or similar legislation or subject to analogous protection) in and to the Module, and all work conceived, created, invented, produced, designed or reduced to practice by Webkul and its personnel as a result of or with respect to any and all Customization Services provided to you. Your rights and obligations relating to the use of the Module shall be governed by the terms of the applicable Webkul Software License Agreement regardless of whether you may have contributed to any Module in any way. The foregoing shall not be deemed to transfer ownership to Webkul of any pre-existing intellectual property rights that you may have in the materials that you provide to Webkul in order to permit Webkul to perform the Customization Services; however, to the extent that you have provided such materials to Webkul, you hereby grant Webkul a non-exclusive, non-transferable, royalty-free license to use all such materials for the purposes of performing the Customization Services and providing you with the Module. + + +7. Limited Warranty and Limitation of Liability +----------------------------------------------- +Limited Warranty: Webkul warrants that all services provided by Webkul shall be provided in a competent, professional manner by persons who are fully trained and qualified to perform the Customization Services. Webkul does not represent or warrant that the Customization Services or Module provided hereunder will be capable of achieving a particular result for your business, or that the operation of the Module will be error free or uninterrupted, or that all errors in the Module can be found or corrected, although Webkul shall use commercially reasonable efforts to do so. Without limiting the foregoing, this warranty is valid only for the six (6) months following the acceptance date as set forth in Section 3(b). The above warranty shall not apply to defects or non-conformities resulting from: +improper or inadequate maintenance or installation of the Module +use of the Module in combination with software, interfaces, or other materials that are not supplied or specifically authorized by Webkul, +unauthorized or improper use or modification of the Module, including use that is not contemplated in the Order Form or instructions provided by Webkul, +abuse, negligence, accident, or other damage from external sources, or +improper preparation of your facilities or equipment for installation and use or the Module. +Limitation of Liability: +save as otherwise provided in a written agreement between you and Webkul, and to the maximum extent permitted by applicable law, Webkul makes no warranty or condition, express or implied, statutory or otherwise, with respect to the module or the Customization services, including, without limitation, the implied warranties or conditions of merchantability and fitness for a particular purpose. +in no event shall Webkul be liable to you or any other person for any indirect, special, punitive, exemplary, consequential or incidental damages (including without limitation, damages for loss of revenues or profits, business interruption, loss of business information, and the like) arising out of the use, inability to use or the performance or non-performance of, the module or the provision of the Customization services, even if Webkul has been advised of the possibility of such damage or claim, or it is foreseeable. +in no event shall Webkul’s maximum aggregate liability to you for direct damages exceed the total amount paid by you for the Customization services performed by Webkul within the six (6) months preceding the date on which the claim arose. + + +8. General Terms and Conditions +------------------------------- +As Webkul is primarily a plugin and app development company and its main focus is on constant plugin development fulfilling various latest requirements and keeping up with the latest trends, Webkul has all the right to release the same customized plugin as a new plugin in future to be available to all its customers. The same may include few or every feature of the customisation. Webkul reserve all the rights to do the same as the customisation done for the client is Intellectual property of Webkul. +The customization undertaken by Webkul would be identical to the discussed requirements, and would not include any sort of additional changes or alterations. Any additional changes or alterations would be considered as a separate project and would be charged separately. +Webkul would be providing customization support for only one month from the delivery of the project. For any further support extended to you, the same shall be charged separately which includes specifically any further help or bug /error fix. +The cost of customization doesn’t include the cost of extension installation or exchange of the extension, if it has not been specifically quoted within the project cost. +During the project customization, you ought not to edit or change any of the files and it is also advisable to have a backup every-time a change is made. If you, on your own, are making certain changes, it is advisable to back up the files, folder and database. Before doing anything on your own, you need to inform Webkul if Webkul is working on the project or your support period is subsisting. +The customization charge will include a single template. Any time during or after the customization if you change the template, you shall be wholly and solely liable for any loss or damage emanating from the same. Webkul will not be responsible for any loss or damage done due to the same. +All the communication will take place through Webkul’s help desk system only. If the need arises, the issues can be discussed via Skype once in week or month. Webkul does not allow screen sharing and remote desktop. +Customization cost will not include any free consulting beyond the scope of the project. +If while making any changes by yourself or by your team, something gets damaged, then Webkul will not be responsible for it. This includes any issues faced by you for your own fault even during the support period of the module or project. +Webkul will not be responsible for any damages during the customization. It is advised that you must have a proper backup management system deployed. +The terms and conditions of this Policy shall be governed by Indian Laws, and the courts in Delhi alone shall only have exclusive jurisdiction to resolve/ adjudicate upon any disputes. +If any dispute arises between webkul and you/Licensee at any time, in connection with the validity, interpretation, implementation or alleged breach of any provision of this Agreement, the same shall be referred to a sole Arbitrator who shall be an independent and neutral third party appointed exclusively by Webkul. You shall not object to the appointment of the Arbitrator so appointed by Webkul. The place of arbitration shall be Delhi, India. The Arbitration & Conciliation Act, 1996 as amended by The Arbitration & Conciliation (Amendment) Act, 2015, shall govern the arbitration proceedings. The arbitration proceedings shall be held in the English language. diff --git a/modules/qloblockcontact/LICENSE.txt b/modules/qloblockcontact/LICENSE.txt new file mode 100644 index 000000000..7845cd4a5 --- /dev/null +++ b/modules/qloblockcontact/LICENSE.txt @@ -0,0 +1,223 @@ +SOFTWARE LICENCE AGREEMENT +=============================== + +This AGREEMENT is made effective on the date of the purchase of the software between Webkul Software Pvt. Ltd.,Company incorporated under the Companies Act, 1956 (hereinafter referred to as “Licensor"), and the purchaser of the software/ product (hereinafter referred to as "Licensee"). + +Preamble +================== +Licensor is a web and mobile product based organization engaged in the business of developing and marketing software for enterprise level e-commerce businesses. It is an ISO and NSR (NASSCOM) certified organization having a team of more than 150 creative engineers which come from different backgrounds. It has developed more than 700 web extensions and apps in the past few years for open source platforms which are used and trusted globally. Licensee now wishes to obtain license, and Licensor wishes to grant a license, to allow use of the software so purchased in developing the e-commerce business website/ mobile app of the Licensee, subject to the terms and conditions set forth herein. + + +THEREFORE, with the intent to be legally bound, the parties hereby agree as follows: + + +Agreement +================ + +1.Definitions : +------------------ +As used in this Agreement, the following capitalized terms shall have the definitions set forth below: + + +"Derivative Works" are works developed by Licensee, its officers, agents, contractors or employees, which are based upon, in whole or in part, the Source Code and/or the Documentation and may also be based upon and/or incorporate one or more other preexisting works of the Licensor. Derivative Works may be any improvement, revision, modification, translation (including compilation or recapitulation by computer), abridgment, condensation, expansion, or any other form in which such a preexisting work may be recast, transformed, or adapted. For purposes hereof, a Derivative Work shall also include any compilation that incorporates such a preexisting work. + + +"Documentation" is written, printed or otherwise recorded or stored (digital or paper) material relating to the Software and/or Source Code, including technical specifications and instructions for its use including Software/ Source Code annotations and other descriptions of the principles of its operation and instructions for its use. + + +"Improvements" shall mean, with respect to the Software, all modifications and changes made, developed, acquired or conceived after the date hereof and during the entire term of this Agreement. + + +"Source Code" is the computer programming source code form of the Software in the form maintained by the Licensor, and includes all non-third-party executables, libraries, components, and Documentation created or used in the creation, development, maintenance, and support of the Software as well as all updates, error corrections and revisions thereto provided by Licensor, in whole or in part. + + +2. Software License. +------------------------- + +(a)Grant of License. For the consideration set forth below, Licensor hereby grants to Licensee, and Licensee hereby accepts the worldwide, non-exclusive, perpetual, royalty-free rights and licenses set forth below: + + +(i)The right and license to use and incorporate the software, in whole or in part, to develop its website/ mobile app (including the integration of all or part of the Licensor’s software into Licensee's own software) on one domain ( Except Joomla modules , listed on store are entitled to be used on unlimited domain as per the standard guidelines ) only, solely for the own personal or business use of the Licensee. However, the License does not authorize the Licensee to compile, copy or distribute the said Software or its Derivative Works. + + +(ii)The right and license does not authorize the Licensee to make any backup or archival copies of the Software and / or the Source Code and Documentation. + +(iii)The right and license does not authorize the Licensee to migrate the domain license to another domain. + + +(b)Scope; Rights and Responsibilities. + + +(i)Licensor shall enable the Licensee to download one complete copy of the Software. + + +(ii)The Software is intended for the sole use of the Licensee in development of its own website/ mobile app. + + +(iii)Licensee does not have the right to hand over, sell, distribute, sub-license, rent, lease or lend any portion of the Software or Documentation, whether modified or unmodified, to anyone. Licensee should not place the Software on a server so that it becomes accessible via a public network such as the Internet for distribution purposes. In case the Licensee is using any source code management system like github, it can use the code there only when it has paid subscription from such management system. + + +(iv)Licensee is not authorized to appoint, or work with, third parties to perform any development services using the Source Code, the source code to Derivative Works and/or the Documentation on behalf of, or working with, the Licensee. Release of Source Code, Derivative Work source code and/or Documentation to any third party shall be considered as violation of the Agreement, inter-alia entailing forthwith termination and legal action. + + + +(c)Ownership. + + +(i)Software and Source Code. All right, title, copyright, and interest in the Software, Source Code, Software Modifications and Error corrections will be and remain the property of Licensor. + + +(ii)Derivative Works. As creation of Derivative Works by the Licensee is prohibited, thus, all right, title, copyright, and interest in any and/or all Derivative Works and Improvements created by, or on behalf of, Licensee will also be deemed to the property of Licensor. Licensor shall be entitled to protect copyright / intellectual property in all such Derivative Works and Improvements also in any country as it may deem fit including without limitation seeking copyright and/or patent protection. + + +3.Consideration. +-------------------- + +(a)Licensee shall pay to Licensor the amount as mentioned on the website from where the order is placed, as one-time, upfront fees in consideration for the licenses and rights granted hereunder (hereinafter referred to as the "License Fee"). The License Fee to be paid by Licensee shall be paid upfront at the time of placing the order, and no credit will be allowed under any circumstances. + + +(b)Once paid, the License Fees shall be non-refundable. The Licensee has fully satisfied itself about the Software and has seen the demonstration, and only thereafter has placed the order. Thus, the License Fees or any part thereof is non-refundable. No claim for refund of the Licence Fees shall be entertained under any circumstances. + + + +4.Representations and Warranties. +------------------------------------- + +(a)Mutual. Each of the parties represents and warrants to the other as follows. + + +(i)such party is a legal entity duly organized, validly existing and in good standing; + + +(ii)such party has the power and authority to conduct its business as presently conducted and to enter into, execute, deliver and perform this Agreement. + + +(iii)This Agreement has been duly and validly accepted by such party and constitutes the legal, valid and binding obligations of such party respectively, enforceable against such party in accordance with their respective terms; + + +(iv)the acceptance, execution, delivery and performance of this Agreement does not and will not violate such party's charter or by-laws; nor require any consent, authorization, approval, exemption or other action by any third party or governmental entity. + + +(b)Licensor warrants that, at the time of purchase of the Software: + + +the Software will function materially as set forth in the website or published functionality provided by Licensor to customers and potential customers describing the Software; and + + +Software add-ons, if purchased by the Licensee from the Licensor, will not materially diminish the features or functions of or the specifications of the Software as they existed as of the execution of this Agreement. + + + +(c)Title. Licensor represents and warrants that it is the exclusive owner of all copyright/ intellectual property in the Software (including the Source Code) and has good and marketable title to the Software (including the Source Code) free and clear of all liens, claims and encumbrances of any nature whatsoever (collectively, "Liens"). Licensor's grant of license and rights to Licensee hereunder does not, and will not infringe any third party's property, intellectual property or personal rights. + + + +5.Term. +------------- + +(a)Subject to Licensee's payment obligations, this Agreement shall commence as on the date of making payment of the Software by the Licensee to the Licensor, and shall continue until terminated by either party. + + +(b)The Licensor retains the right to terminate the license at any time, if the Licensee is not abiding by any of the terms of the Agreement. The Licensee may terminate the Agreement at any time at its own discretion by uninstalling the Software and /or by destroying the said Software (or any copies thereof). However, the Licensee shall not be entitled to seek any refund of the amount paid by it to the Licensor, under any circumstances. + + +(c)Survival. In the event this Agreement is terminated for any reason, the provisions set forth in Sections 2(a), 2(b), and 2(c) shall survive. + + + + +6. Indemnification +---------------------- + +The Licensee release the Licensor from, and agree to indemnify, defend and hold harmless the Licensor (and its officers, directors, employees, agents and Affiliates) against, any claim, loss, damage, settlement, cost, taxes, expense or other liability (including, without limitation, attorneys' fees) (each, a "Claim") arising from or related to: (a) any actual or alleged breach of any obligations in this Agreement; (b) any refund, adjustment, or return of Software,(c) any claim for actual or alleged infringement of any Intellectual Property Rights made by any third party or damages related thereto; or (d) Taxes. + + +7. Limitation of Liability +------------------------------ + +The Licensor will not be liable for any direct, indirect, incidental, special, consequential or exemplary damages, including but not limited to, damages for loss of profits, goodwill, use, data or other intangible losses arising out of or in connection with the Software, whether in contract, warranty, tort etc. (including negligence, software liability, any type of civil responsibility or other theory or otherwise) to the Licensee or any other person for cost of software, cover, recovery or recoupment of any investment made by the Licensee or its affiliates in connection with this Agreement, or for any other loss of profit, revenue, business, or data or punitive or consequential damages arising out of or relating to this Agreement. Further, the aggregate liability of the Licensor, arising out of or in connection with this Agreement or the transactions contemplated hereby will not exceed at any time, or under any circumstances, the total amounts received by the Licensor from the Licensee in connection with the particular software giving rise to the claim. + + +8. Force Majeure +--------------------- + +The Licensor will not be liable for any delay or failure to perform any of its obligations under this Agreement by reasons, events or other matters beyond its reasonable control. + + +9. Relationship of Parties +------------------------------ + +The Licensor and Licensee are independent legal entities, and nothing in this Agreement will be construed to create a partnership, joint venture, association of persons, agency, franchise, sales representative, or employment relationship between the parties. The Licensee will have no authority to make or accept any offers or representations on behalf of the Licensor. The relationship between the parties is that of Licensor and Licensee only, and the rights, duties, liabilities of each party shall be governed by this Agreement. + + +10. Modification +------------------------ + +The Licensor may amend any of the terms and conditions contained in this Agreement at any time and solely at its discretion. Any changes will be effective upon the posting of such changes on the Portal/ website, and the Licensee is responsible for reviewing these changes and informing itself of all applicable changes or notices. The continued use of a software by the Licensee after posting of any changes by the Licensor, will constitute the acceptance of such changes or modifications by the Licensee. + + + +11.Miscellaneous. +----------------------- + +(a)General Provisions. This Agreement: (i) may be amended only by a writing signed by each of the parties; (ii) may be executed in several counterparts, each of which shall be deemed an original but all of which shall constitute one and the same instrument; (iii) contains the entire agreement of the parties with respect to the transactions contemplated hereby and supersedes all prior written and oral agreements, and all contemporaneous oral agreements, relating to such transactions; (iv) shall be governed by, and construed and enforced in accordance with, the laws of India; and (v) shall be binding upon, and inure to the benefit of, the parties and their respective successors and permitted assigns. Each of the parties hereby irrevocably submits to the jurisdiction of the Courts at Delhi, India, for the purposes of any action or proceeding arising out of or relating to this Agreement or the subject matter hereof and brought by any other party. + + +(b)Assignment. Licensee cannot assign, pledge or otherwise transfer, whether by operation of law or otherwise, this Agreement, or any of its obligations hereunder, without the prior written consent of Licensor, which consent shall not be unreasonably withheld. + + +(c)Notices. Unless otherwise specifically provided herein, all notices, consents, requests, demands and other communications required or permitted hereunder: + + +(i)shall be in writing; + + +(ii)shall be sent by messenger, certified or registered mail/email, or reliable express delivery service, to the appropriate address(es) set forth below; and + + +(iii)shall be deemed to have been given on the date of receipt by the addressee, as evidenced by a receipt executed by the addressee (or a responsible person in his or her office), the records of the Party delivering such communication or a notice to the effect that such addressee refused to claim or accept such communication, if sent by messenger, mail or express delivery service. + + +All such communications shall be sent to the following addresses or numbers, or to such other addresses or numbers as any party may inform the others by giving five days' prior notice: + + +If to Webkul Software Pvt. Ltd.: + + + +Webkul Software Pvt. Ltd. + +A-67, Sector 63, NOIDA – 201301, + +Uttar Pradesh, India + + +If to Licensee: + +At the address mentioned by the Licensee + +(at the time of placing order of generating Invoice) + + +(d)Severability. It is the intent of the parties that the provisions of this Agreement be enforced to the fullest extent permissible under the laws and public policies of India in which enforcement hereof is sought. In furtherance of the foregoing, each provision hereof shall be severable from each other provision, and any provision hereof which is/ becomes unenforceable shall be subject to the following: (i) if such provision is contrary to or conflicts with any requirement of any statute, rule or regulation in effect, then such requirement shall be incorporated into, or substituted for, such unenforceable provision to the minimum extent necessary to make such provision enforceable; (ii) the court, agency or arbitrator considering the matter is hereby authorized to (or, if such court, agency or arbitrator is unwilling or fails to do so, then the parties shall) amend such provision to the minimum extent necessary to make such provision enforceable, and the parties hereby consent to the entry of an order so amending such provision; and (iii) if any such provision cannot be or is not reformed and made enforceable pursuant to clause (i) or (ii) above, then such provision shall be ineffective to the minimum extent necessary to make the remainder of this Agreement enforceable. Any application of the foregoing provisions to any provision hereof shall not effect the validity or enforceability of any other provision hereof. + + +(e)By purchasing the Software, the Licensee acknowledge that it has read this Agreement, and that it agrees to the content of the Agreement, its terms and agree to use the Software in compliance with this Agreement. + + +(f)The Licensor holds the sole copyright of the Software. The Software or any portion thereof is a copyrightable matter and is liable to be protected by the applicable laws. Copyright infringement in any manner can lead to prosecution according to the current law. The Licensor reserves the right to revoke the license of any user who is not holding any license or is holding an invalid license. + + +(g)This Agreement gives the right to use only one copy of the Software on one domain solely for the own personal or business use of the Licensee, subject to all the terms and conditions of this Agreement. A separate License has to be purchased for each new Software installation. Any distribution of the Software without the written consent of the Licensor (including non-commercial distribution) is regarded as violation of this Agreement, and will entail immediate termination of the Agreement and may invite liability, both civil and criminal, as per applicable laws. + + +(h)The Licensor reserves the rights to publish a selected list of users/ Licensees of its Software, and no permission of any Licensee is needed in this regard. The Licensee agrees that the Licensor may, in its sole discretion, disclose or make available any information provided or submitted by the Licensee or related to it under this Agreement to any judicial, quasi-judicial, governmental, regulatory or any other authority as may be required by the Licensor to co-operate and / or comply with any of their orders, instructions or directions or to fulfill any requirements under applicable Laws. + + +(i)If the Licensee continues to use the Software even after the sending of the notice by the Licensor for termination, the Licensee agree to accept an injunction to restrain itself from its further use, and to pay all costs (including but not limited to reasonable attorney fees) to enforce injunction or to revoke the License, and any damages suffered by the Licensor because of the misuse of the Software by the Licensee. + + +12. Arbitration +----------------------- + +If any dispute arises between the Licensor and the Licensee at any time, in connection with the validity, interpretation, implementation or alleged breach of any provision of this Agreement, the same shall be referred to a sole Arbitrator who shall be an independent and neutral third party appointed exclusively by the Licensor. The Licensee shall not object to the appointment of the Arbitrator so appointed by the Licensor. The place of arbitration shall be Delhi, India. The Arbitration & Conciliation Act, 1996 as amended by The Arbitration & Conciliation (Amendment) Act, 2015, shall govern the arbitration proceedings. The arbitration proceedings shall be held in the English language. \ No newline at end of file diff --git a/modules/qloblockcontact/README.md b/modules/qloblockcontact/README.md new file mode 100644 index 000000000..14dbcb878 --- /dev/null +++ b/modules/qloblockcontact/README.md @@ -0,0 +1 @@ +## QloApps Contact Block v1.0.0 \ No newline at end of file diff --git a/modules/qloblockcontact/index.php b/modules/qloblockcontact/index.php new file mode 100644 index 000000000..0a4a63f52 --- /dev/null +++ b/modules/qloblockcontact/index.php @@ -0,0 +1,29 @@ +name = 'qloblockcontact'; + $this->tab = 'front_office_features'; + $this->version = '1.0.0'; + $this->ps_versions_compliancy = array('min' => '1.6', 'max' => '1.6'); + $this->author = 'Webkul'; + $this->bootstrap = true; + parent::__construct(); + $this->displayName = $this->l('QloApps Contact Block'); + $this->description = $this->l('Allows admin to add customer service information to website navigation bar.'); + $this->confirmUnsinstall = $this->l('Are you sure you want to uninstall?'); + } + + public function install() + { + if (!parent::install() + || !Configuration::updateValue('QBC_PHONE', '') + || !Configuration::updateValue('QBC_EMAIL', '') + || !$this->registerHook('actionFrontControllerSetMedia') + || !$this->registerHook('displayNav') + || !$this->registerHook('displayExternalNavigationHook') + ) { + return false; + } + return true; + } + + public function getContent() + { + if (Tools::isSubmit('submitModuleConfig')) { + Configuration::updateValue('QBC_PHONE', Tools::getValue('QBC_PHONE')); + Configuration::updateValue('QBC_EMAIL', Tools::getValue('QBC_EMAIL')); + Tools::redirectAdmin( + $this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&conf=6' + ); + } + return $this->renderForm(); + } + + public function hookActionFrontControllerSetMedia() + { + $this->context->controller->addCSS($this->getPathUri().'views/css/hook/display-nav.css'); + } + + public function hookDisplayNav() + { + $this->smarty->assign(array( + 'phone' => Configuration::get('QBC_PHONE'), + 'email' => Configuration::get('QBC_EMAIL'), + )); + return $this->display(__FILE__, 'display-nav.tpl'); + } + + public function renderForm() + { + $fields_form = array( + 'form' => array( + 'legend' => array( + 'title' => $this->l('Configuration'), + 'icon' => 'icon-cogs', + ), + 'input' => array( + array( + 'type' => 'text', + 'label' => $this->l('Phone'), + 'hint' => $this->l('The phone number used for customer service.'), + 'name' => 'QBC_PHONE', + 'class' => 'fixed-width-xxl', + ), + array( + 'type' => 'text', + 'label' => $this->l('Email'), + 'hint' => $this->l('The email used for customer service.'), + 'name' => 'QBC_EMAIL', + 'class' => 'fixed-width-xxl', + ), + ), + 'submit' => array( + 'title' => $this->l('Save'), + ) + ), + ); + + $helper = new HelperForm(); + $helper->show_toolbar = false; + $helper->table = $this->table; + $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); + $helper->default_form_language = $lang->id; + $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; + $this->fields_form = array(); + + $helper->identifier = $this->identifier; + $helper->submit_action = 'submitModuleConfig'; + $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; + $helper->token = Tools::getAdminTokenLite('AdminModules'); + $helper->tpl_vars = array( + 'fields_value' => $this->getConfigFieldsValues(), + 'languages' => $this->context->controller->getLanguages(), + 'id_language' => $this->context->language->id + ); + return $helper->generateForm(array($fields_form)); + } + + public function hookDisplayExternalNavigationHook() + { + $this->smarty->assign(array( + 'phone' => Configuration::get('QBC_PHONE'), + 'email' => Configuration::get('QBC_EMAIL'), + )); + return $this->display(__FILE__, 'external-navigation-hook.tpl'); + } + + public function getConfigFieldsValues() + { + return array( + 'QBC_PHONE' => Tools::getValue('QBC_PHONE', Configuration::get('QBC_PHONE')), + 'QBC_EMAIL' => Tools::getValue('QBC_EMAIL', Configuration::get('QBC_EMAIL')), + ); + } + + public function uninstall() + { + if (!parent::uninstall() + || !Configuration::deleteByName('QBC_PHONE') + || !Configuration::deleteByName('QBC_EMAIL') + ) { + return false; + } + return true; + } +} diff --git a/modules/qloblockcontact/views/css/hook/display-nav.css b/modules/qloblockcontact/views/css/hook/display-nav.css new file mode 100644 index 000000000..80d7c3d24 --- /dev/null +++ b/modules/qloblockcontact/views/css/hook/display-nav.css @@ -0,0 +1,43 @@ +/** +* 2010-2022 Webkul. +* +* NOTICE OF LICENSE +* +* All right is reserved, +* Please go through LICENSE.txt file inside our module +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade this module to newer +* versions in the future. If you wish to customize this module for your +* needs please refer to CustomizationPolicy.txt file inside our module for more information. +* +* @author Webkul IN +* @copyright 2010-2022 Webkul IN +* @license LICENSE.txt +*/ + +#nav-main .contact-item a { + color: #fff; +} + +#nav-main .contact-item { + margin-right: 24px; +} + +#nav-main .contact-item i { + font-size: 14px; + padding-right: 2px; + position: relative; + top: 1px; +} + +@media (max-width: 767px) { + #nav-main .contact-item { + display: none; + } +} + +#nav-main i.icon-phone { + font-size: 15px; +} diff --git a/modules/qloblockcontact/views/css/hook/index.php b/modules/qloblockcontact/views/css/hook/index.php new file mode 100644 index 000000000..0a4a63f52 --- /dev/null +++ b/modules/qloblockcontact/views/css/hook/index.php @@ -0,0 +1,29 @@ + + + {$email} + +{/if} +{if $phone} +
+ + {$phone} +
+{/if} diff --git a/modules/qloblockcontact/views/templates/hook/external-navigation-hook.tpl b/modules/qloblockcontact/views/templates/hook/external-navigation-hook.tpl new file mode 100644 index 000000000..4c20672cb --- /dev/null +++ b/modules/qloblockcontact/views/templates/hook/external-navigation-hook.tpl @@ -0,0 +1,39 @@ +{* +* 2010-2022 Webkul. +* +* NOTICE OF LICENSE +* +* All right is reserved, +* Please go through LICENSE.txt file inside our module +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade this module to newer +* versions in the future. If you wish to customize this module for your +* needs please refer to CustomizationPolicy.txt file inside our module for more information. +* +* @author Webkul IN +* @copyright 2010-2022 Webkul IN +* @license LICENSE.txt +*} + +{if $email || $phone} + +{/if} diff --git a/modules/qloblockcontact/views/templates/hook/index.php b/modules/qloblockcontact/views/templates/hook/index.php new file mode 100644 index 000000000..499810d54 --- /dev/null +++ b/modules/qloblockcontact/views/templates/hook/index.php @@ -0,0 +1,29 @@ +html .= ' - + diff --git a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php index 552fef51e..d89e7711a 100644 --- a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php +++ b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php @@ -70,7 +70,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController ), ); - $this->informations[] = $this->l('For better view, upload hotel interior image in multiple of 3.'); + $this->informations[] = $this->l('Keep interior images in a multiple of 3 for the best view.'); $this->addRowAction('edit'); $this->addRowAction('delete'); @@ -165,7 +165,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController public function renderForm() { - $imageUrl = $imageSize = false; + $imgUrl = $imageSize = $imgExist = $image = false; if ($this->display == 'edit') { $idHtlInterior = Tools::getValue('id_interior_image'); @@ -190,6 +190,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController } } + $this->fields_form = array( 'legend' => array( 'title' => $this->l('Add New Hotel Interior Image'), diff --git a/modules/wkfooteraboutblock/wkfooteraboutblock.php b/modules/wkfooteraboutblock/wkfooteraboutblock.php index 0c4b82c55..0c42926f0 100644 --- a/modules/wkfooteraboutblock/wkfooteraboutblock.php +++ b/modules/wkfooteraboutblock/wkfooteraboutblock.php @@ -29,7 +29,7 @@ class WkFooterAboutBlock extends Module $this->name = 'wkfooteraboutblock'; $this->tab = 'front_office_features'; $this->version = '1.0.3'; - $this->author = 'webkul'; + $this->author = 'Webkul'; $this->need_instance = 0; $this->bootstrap = true; @@ -40,7 +40,7 @@ class WkFooterAboutBlock extends Module $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); } - public function hookFooter($params) + public function hookDisplayFooterMostLeftBlock($params) { $this->context->smarty->assign( array('WK_HTL_SHORT_DESC' => Configuration::get('WK_HTL_SHORT_DESC', $this->context->language->id)) @@ -50,29 +50,10 @@ class WkFooterAboutBlock extends Module return $this->display(__FILE__, 'wkFooterAboutBlock.tpl'); } - public function hookDisplayFooterMostLeftBlock($params) - { - $languages = Language::getLanguages(true, $this->context->shop->id); - $currencies = Currency::getCurrencies(false, true); - if ((count($languages) <= 1) && (count($currencies) <= 1)) { - return $this->hookFooter($params); - } - } - - public function hookdisplayFooterPaymentInfo($params) - { - $languages = Language::getLanguages(true, $this->context->shop->id); - $currencies = Currency::getCurrencies(false, true); - if ((count($languages) > 1) || (count($currencies) > 1)) { - return $this->hookFooter($params); - } - } - public function install() { if (!parent::install() - ||!$this->registerHook('displayFooterMostLeftBlock') - ||!$this->registerHook('displayFooterPaymentInfo') + || !$this->registerHook('displayFooterMostLeftBlock') ) { return false; } diff --git a/modules/wkhotelfilterblock/views/js/wkhotelfilterblock.js b/modules/wkhotelfilterblock/views/js/wkhotelfilterblock.js index 8db2a1a01..01a9dfd9b 100644 --- a/modules/wkhotelfilterblock/views/js/wkhotelfilterblock.js +++ b/modules/wkhotelfilterblock/views/js/wkhotelfilterblock.js @@ -178,19 +178,14 @@ $(document).ready(function() data.sort_value = sort_value; } - filter_ajax = $.ajax( - { - url: cat_link, - type: 'POST', - dataType: 'html', - data: data, - success: function (result) - { - if (result) { - $('#category_data_cont').html(result); - } else { - var html = '
'+noRoomAvailTxt+'
'; - $('#category_data_cont').html(html); + filter_ajax = $.ajax({ + url: cat_link, + type: 'POST', + dataType: 'JSON', + data: data, + success: function (response) { + if (response.status) { + $('#category_data_cont').html(response.html_room_type_list); } } }); diff --git a/modules/wkroomsearchblock/wkroomsearchblock.php b/modules/wkroomsearchblock/wkroomsearchblock.php index 2a05b8fb0..e8cd779f4 100644 --- a/modules/wkroomsearchblock/wkroomsearchblock.php +++ b/modules/wkroomsearchblock/wkroomsearchblock.php @@ -74,14 +74,14 @@ class WkRoomSearchBlock extends Module // apply assets as per pages if ('category' == $controller) { - $this->context->controller->addCSS(_PS_MODULE_DIR_.$this->name.'/views/css/wk-category-search.css'); + $this->context->controller->addCSS($this->_path.'views/css/wk-category-search.css'); } if ('index' == $controller) { - $this->context->controller->addCSS(_PS_MODULE_DIR_.$this->name.'/views/css/wk-landing-page-search.css'); + $this->context->controller->addCSS($this->_path.'views/css/wk-landing-page-search.css'); } if ('product' == $controller) { - $this->context->controller->addCSS(_PS_MODULE_DIR_.$this->name.'/views/css/wk-roomtype-search.css'); - $this->context->controller->addJS(_PS_MODULE_DIR_.$this->name.'/views/js/wk-roomtype-search.js'); + $this->context->controller->addCSS($this->_path.'views/css/wk-roomtype-search.css'); + $this->context->controller->addJS($this->_path.'views/js/wk-roomtype-search.js'); } } diff --git a/modules/wktestimonialblock/wktestimonialblock.php b/modules/wktestimonialblock/wktestimonialblock.php index de379ea38..a90d4c9d5 100644 --- a/modules/wktestimonialblock/wktestimonialblock.php +++ b/modules/wktestimonialblock/wktestimonialblock.php @@ -55,7 +55,7 @@ class WkTestimonialBlock extends Module { $this->context->controller->addCSS(_PS_JS_DIR_.'/owl-carousel/assets/owl.carousel.min.css'); $this->context->controller->addCSS(_PS_JS_DIR_.'/owl-carousel/assets/owl.theme.default.min.css'); - $this->context->controller->addJS(_PS_JS_DIR_.'/owl-carousel/owl.carousel.min'); + $this->context->controller->addJS(_PS_JS_DIR_.'/owl-carousel/owl.carousel.min.js'); $this->context->controller->addCSS($this->_path.'/views/css/WkTestimonialBlockFront.css'); $this->context->controller->addJS($this->_path.'/views/js/WkTestimonialBlockFront.js'); diff --git a/themes/hotel-reservation-theme/_partials/booking-form.tpl b/themes/hotel-reservation-theme/_partials/booking-form.tpl new file mode 100644 index 000000000..708a46fb9 --- /dev/null +++ b/themes/hotel-reservation-theme/_partials/booking-form.tpl @@ -0,0 +1,126 @@ +{* +* 2010-2022 Webkul. +* +* NOTICE OF LICENSE +* +* All right is reserved, +* Please go through LICENSE.txt file inside our module +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade this module to newer +* versions in the future. If you wish to customize this module for your +* needs please refer to CustomizationPolicy.txt file inside our module for more information. +* +* @author Webkul IN +* @copyright 2010-2022 Webkul IN +* @license LICENSE.txt +*} + +
+
+
+
+ +

{$hotel_location|escape:'html':'UTF-8'}

+
+ {if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE && !$order_date_restrict} +
+
+ + +
+
+ + +
+
+
+ {if $total_available_rooms > 0} +
+
quantity <= 0) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}> + +
+
+ + + + +
+ +
+ +
+
+ {if isset($has_room_type_demands) && $has_room_type_demands} +
+
+
+ +

+ {convertPrice price=$rooms_price|floatval} + + +

+
+
+ +

+ {if isset($demands_price)}{convertPrice price=$demands_price}{else}{convertPrice price=0}{/if} +

+
+
+
+ {/if} +
+
+
+ +

{convertPrice price=$total_price|floatval}

+
+ {if $total_available_rooms <= $warning_count} +
+ + {$total_available_rooms|escape:'html':'UTF-8'} + + {if $total_available_rooms > 1} {l s='rooms left!'} {else} {l s='room left!'} {/if} +
+ {/if} +
+ +
+ {if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE || $order_date_restrict} + {else} +

+ +

+ {/if} +
+ {else} +
+ {l s='All rooms sold out!'} +
+ {/if} + {/if} + {if $order_date_restrict} +
+ {l s='You can\'t book rooms after %s.' sprintf=[{dateFormat date=$max_order_date full=0}]} +
+ {/if} + +
+
\ No newline at end of file diff --git a/themes/hotel-reservation-theme/css/global.css b/themes/hotel-reservation-theme/css/global.css index 3d6097e79..f0a7e72f5 100644 --- a/themes/hotel-reservation-theme/css/global.css +++ b/themes/hotel-reservation-theme/css/global.css @@ -5794,10 +5794,17 @@ header { max-height: 100%; } header .banner .row { margin: 0px; } - header .nav { - background-color: none; } - header .nav .row { + header #nav-main { + background-color: #333; + color: #fff; } + header #nav-main nav > div { + display: inline-block; + padding: 8px 0; } + header .nav .row, + header #nav-main .row { margin: 0px; } + #nav-main .nav-main-item-right:not(:last-of-type) { + margin-left: 24px; } header .nav nav { width: 100%; } header .row { diff --git a/themes/hotel-reservation-theme/css/modules/blockcurrencies/blockcurrencies.css b/themes/hotel-reservation-theme/css/modules/blockcurrencies/blockcurrencies.css deleted file mode 100644 index 2fd112500..000000000 --- a/themes/hotel-reservation-theme/css/modules/blockcurrencies/blockcurrencies.css +++ /dev/null @@ -1,91 +0,0 @@ -#.footer-container currencies-block-top { - position: relative; -} -/*@media (max-width:479px) { - .footer-container #currencies-block-top { - width: 25%; - } -}*/ -.footer-container #currencies-block-top span.firstWord { - display: none; -} -.footer-container #currencies-block-top div.current { - background-color: #3a3a3a; - border: 1px solid #868686; - color: #bfbfbf; - cursor: pointer; - font-size: 16px; - font-weight: 400; - line-height: 18px; - padding: 10px; - position: relative; - text-shadow: 1px 1px rgba(0, 0, 0, 0.2); -} -/*@media (max-width:479px) { - .footer-container #currencies-block-top div.current { - text-align: center; - padding: 9px 5px 10px; - font-size: 11px; - } -}*/ -.footer-container #currencies-block-top div.current strong { - color: #777777; -} - -/* .footer-container #currencies-block-top div.current:hover, .footer-container #currencies-block-top div.current.active { - background: #2b2b2b; } */ -.footer-container #currencies-block-top div.current:after { - content: "\f0d7"; - font-family: "FontAwesome"; - font-size: 12px; - position: absolute; - right: 10px; - line-height: 18px; - color: #bfbfbf; - vertical-align: 0px; - padding-left: 7px; -} -/*@media (max-width:479px) { - .footer-container #currencies-block-top div.current:after { - padding-left: 2px; - font-size: 13px; - line-height: 13px; - vertical-align: 0; - } -}*/ -/*@media (max-width:479px) { - .footer-container #currencies-block-top div.current .cur-label { - display: none; - } -}*/ -.footer-container #currencies-block-top ul { - display: none; - position: absolute; - top: 41px; - right: 0; - left: 0; /*width: 157px;*/ - background: #fff; - z-index: 1000; -} -.footer-container #currencies-block-top ul li { - font-weight: 400; - color: #ffffff; - line-height: 28px; - font-size: 16px; - padding: 0px; -} -.footer-container #currencies-block-top ul li a, .footer-container #currencies-block-top ul li > span { - font-weight: normal; - text-shadow: unset; - padding: 3px 10px; - display: block; - color: #555555; -} -.footer-container #currencies-block-top ul li.selected, .footer-container #currencies-block-top ul li:hover a { - background: #3594E6; -} -.footer-container #currencies-block-top ul li.selected > a, .footer-container #currencies-block-top ul li:hover a { - color: #fff; -} - -/*# sourceMappingURL=blockcurrencies.css.map */ \ No newline at end of file diff --git a/themes/hotel-reservation-theme/css/modules/blocklanguages/blocklanguages.css b/themes/hotel-reservation-theme/css/modules/blocklanguages/blocklanguages.css deleted file mode 100644 index 0210003ae..000000000 --- a/themes/hotel-reservation-theme/css/modules/blocklanguages/blocklanguages.css +++ /dev/null @@ -1,77 +0,0 @@ -.footer-container #languages-block-top { - /*float: right; - margin-right: 10px;*/ - /*border-left: 1px solid #515151;*/ - position: relative; } - /*@media (max-width: 479px) { - .footer-container #languages-block-top { - width: 25%; } }*/ - .footer-container #languages-block-top span.firstWord { - display: none; } - .footer-container #languages-block-top div.current { - background-color: #3a3a3a; - border: 1px solid #868686; - color: #bfbfbf; - cursor: pointer; - font-size: 16px; - font-weight: 400; - line-height: 18px; - padding: 10px; - position: relative; - text-shadow: 1px 1px rgba(0, 0, 0, 0.2); } - /*@media (max-width: 479px) { - .footer-container #languages-block-top div.current { - text-align: center; - padding: 9px 5px 10px; - font-size: 11px; } }*/ - - .footer-container #languages-block-top div.current strong { - color: #777777; } - .footer-container #languages-block-top div.current:after { - content: "\f0d7"; - font-family: "FontAwesome"; - font-size: 12px; - position: absolute; - right: 10px; - line-height: 18px; - color: #bfbfbf; - vertical-align: 0px; - padding-left: 7px; } - /*@media (max-width: 479px) { - .footer-container #languages-block-top div.current:after { - padding-left: 2px; - font-size: 13px; - line-height: 13px; - vertical-align: 0; } }*/ - - @media (max-width: 479px) { - .footer-container #languages-block-top div.current .cur-label { - display: none; } } - .footer-container #languages-block-top ul { - display: none; - position: absolute; - top: 41px; - right: 0; - left: 0; - background: #fff; - padding: 2px 0px 0px; - z-index: 10; } - .footer-container #languages-block-top ul li { - font-weight: 400; - color: #ffffff; - line-height: 28px; - font-size: 16px; - padding: 0px; } - .footer-container #languages-block-top ul li a, - .footer-container #languages-block-top ul li > span { - font-weight: normal; - text-shadow: unset; - padding: 3px 10px; - display: block; - color: #555555; } - .footer-container #languages-block-top ul li.selected, .footer-container #languages-block-top ul li:hover a { - background: #3594E6; } - .footer-container #languages-block-top ul li.selected > span, .footer-container #languages-block-top ul li:hover a { - color: #fff; } - -/*# sourceMappingURL=blocklanguages.css.map */ diff --git a/themes/hotel-reservation-theme/css/modules/blocklanguages/index.php b/themes/hotel-reservation-theme/css/modules/blocklanguages/index.php deleted file mode 100644 index 9a99a8662..000000000 --- a/themes/hotel-reservation-theme/css/modules/blocklanguages/index.php +++ /dev/null @@ -1,35 +0,0 @@ - -* @copyright 2007-2017 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); -header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); - -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); - -header("Location: ../"); -exit; diff --git a/themes/hotel-reservation-theme/header.tpl b/themes/hotel-reservation-theme/header.tpl index bd2ea24f4..b19aa1f10 100644 --- a/themes/hotel-reservation-theme/header.tpl +++ b/themes/hotel-reservation-theme/header.tpl @@ -92,7 +92,7 @@ -
{l s='Total Amount' mod='hotelreservationsystem'}{l s='Total Amount (Tax incl.):' mod='hotelreservationsystem'} {if isset($cart_tamount)}{convertPrice price=$cart_tamount}{else}0{/if}
'.$row['fix_date'].''.Tools::displayDate($row['fix_date']).' '.$visits_today.' '.(int)$row['registrations'].' '.(int)$row['countOrders'].'
- - - - - - - - - - - - {if isset($list)} - {foreach from=$list key=data_k item=data_v} - {foreach from=$data_v['date_diff'] key=rm_k item=rm_v} - {if isset($rm_v['extra_demands']) && $rm_v['extra_demands']} - {assign var=roomCount value=1} - {foreach $rm_v['extra_demands'] as $roomDemand} - {foreach name=demandRow from=$roomDemand['extra_demands'] item=demand} - - {if $smarty.foreach.demandRow.first} - - {/if} - - - - {/foreach} - {assign var=roomCount value=$roomCount+1} - {/foreach} - {/if} - {/foreach} - {/foreach} - {/if} - -
{l s='Extra Demands Details'}
{l s='Room Type'}{l s='Extra demand name'}{l s='Total'}
{l s='(Tax excl.)'}
- - {$data_v['name']}
- {$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}
- {l s='Room'} - {$roomCount} -
-
- - {$demand['name']} - - - - {convertPrice price=$demand['total_price_tax_excl']} - -
- -{/if} diff --git a/translations/custom_mails/booking_extra_demands.txt b/translations/custom_mails/booking_extra_demands.txt deleted file mode 100644 index 3139f8ce3..000000000 --- a/translations/custom_mails/booking_extra_demands.txt +++ /dev/null @@ -1,40 +0,0 @@ -{if isset($list)} - {l s='Extra Demands Details'} - {l s='Room Type'} - {l s='Extra demand name'} - {l s='Total'} {l s='(Tax excl.)'} - - {if isset($list)} - {foreach from=$list key=data_k item=data_v} - {foreach from=$data_v['date_diff'] key=rm_k item=rm_v} - {if isset($rm_v['extra_demands']) && $rm_v['extra_demands']} - {assign var=roomCount value=1} - {foreach $rm_v['extra_demands'] as $roomDemand} - {foreach name=demandRow from=$roomDemand['extra_demands'] item=demand} - {if $smarty.foreach.demandRow.first} -
- - {$data_v['name']}
- {$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}
- {l s='Room'} - {$roomCount} -
-
- - {$demand['name']} - - - - {convertPrice price=$demand['total_price_tax_excl']} - -
- - - - - - -
  - - - -  
-
- - - - - - -
  - - {$data_v['name']} - -  
-
- - - - - - -
  - - - {$data_v['adult']} {l s='Adults'}, {$data_v['children']} {l s='Children'} - - -  
-
- - - - - - -
  - - {convertPrice price=$data_v['unit_price']} - -  
-
- - - - - - -
  - - {$rm_v['num_rm']} - -  
-
- - - - - - -
  - - {$rm_v['data_form']|date_format:"%d-%b-%G"} - -  
-
- - - - - - -
  - - {$rm_v['data_to']|date_format:"%d-%b-%G"} - -  
-
- - - - - - -
  - - {convertPrice price=$rm_v['amount']} - -  
-
- - - - - -
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - Hi {firstname} {lastname},
- Thank you for selecting our hotel! -
-
- - - - - - -
  - -

- Order details

- - Order: {order_name} Placed on {date}

- Payment: {payment} -
-
-
 
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Room ImageRoom DescriptionRoom CapcityUnit PriceRooms QtyCheck-in DateCheck-out DateTotal
-   {cart_booking_data_html} -
- {extra_demands_details_html} -
-   {discounts} -
- - - - - - -
  - - Total Rooms Cost - -  
-
- - - - - - -
  - - {total_products} - -  
-
- - - - - - -
  - - Total Additional Facilities Cost - -  
-
- - - - - - -
  - - {total_extra_demands_te} - -  
-
- - - - - - -
  - - Discounts - -  
-
- - - - - - -
  - - {total_discounts} - -  
-
- - - - - - -
  - - Total Rooms Tax - -  
-
- - - - - - -
  - - {total_tax_paid} - -  
-
- - - - - - -
  - - Additional Facilities Tax - -  
-
- - - - - - -
  - - {extra_demands_tax} - -  
-
- - - - - - -
  - - Final Booking Amount - -  
-
- - - - - - -
  - - {total_paid} - -  
-
-
-
- - - - - -
  - - - - - - -
  - -

- Customer address

- - {invoice_block_html} - - -
-
 
-
-
- - - You can review your order and download your invoice from the "Order history" section of your customer account by clicking "My account" on our shop. - -
- - - If you have a guest account, you can follow your order via the "Guest Tracking" section on our shop. - -
-
 
- - \ No newline at end of file diff --git a/translations/custom_mails/order_conf.txt b/translations/custom_mails/order_conf.txt deleted file mode 100644 index e5ed48ab5..000000000 --- a/translations/custom_mails/order_conf.txt +++ /dev/null @@ -1,53 +0,0 @@ -Message from {shop_name} -Hi {firstname} {lastname}, -Thank you for selecting our hotel! -Order details -Order: {order_name} Placed on {date} -Room Image< -Room Description< -Room Capcity -Unit Price -Rooms Qty -Check-in Date -Check-out Date -Total - -{cart_booking_data_html} - -{extra_demands_details_html} - -{discounts} - -Total Rooms Cost -{total_products} - -Total Additional Facilities Cost -{total_extra_demands_te} - -Discounts -{total_discounts} - -Total Rooms Tax -{total_tax_paid} - -Additional Facilities Tax -{extra_demands_tax} - -Final Booking Amount -{total_paid} - -Customer address -{invoice_block_html} - -You can review your order and download your invoice from the -"Order history" [{history_url}] section of your -customer account by clicking "My account" -[{my_account_url}] on our shop. - -If you have a guest account, you can follow your order via the -"Guest Tracking" -[{guest_tracking_url}?id_order={order_name}] section -on our shop. - -{shop_name} [{shop_url}] powered by -Webkul(tm) [https://webkul.com] \ No newline at end of file diff --git a/translations/custom_mails/order_conf_admin.html b/translations/custom_mails/order_conf_admin.html deleted file mode 100755 index 83bc1f399..000000000 --- a/translations/custom_mails/order_conf_admin.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - - Message from {shop_name} - - - - - - - - - - - - -
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - Hi {firstname} {lastname},
- New Bookings created on {shop_name}! -
-
- - - - - - -
  - -

- Customer details

- - Name: {customer_name}

- Email: {customer_email} -
-
-
 
-
- - - - - - -
  - -

- Order details

- - Order: {order_name} Placed on {date}

- Payment: {payment} -
-
-
 
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Room ImageRoom DescriptionRoom CapcityUnit PriceRooms QtyCheck-in DateCheck-out DateTotal
-   {cart_booking_data_html} -
- {extra_demands_details_html} -
-   {discounts} -
- - - - - - -
  - - Total Rooms Cost - -  
-
- - - - - - -
  - - {total_products} - -  
-
- - - - - - -
  - - Total Additional Facilities Cost - -  
-
- - - - - - -
  - - {total_extra_demands_te} - -  
-
- - - - - - -
  - - Discounts - -  
-
- - - - - - -
  - - {total_discounts} - -  
-
- - - - - - -
  - - Total Rooms Tax - -  
-
- - - - - - -
  - - {total_tax_paid} - -  
-
- - - - - - -
  - - Additional Facilities Tax - -  
-
- - - - - - -
  - - {extra_demands_tax} - -  
-
- - - - - - -
  - - Final Booking Amount - -  
-
- - - - - - -
  - - {total_paid} - -  
-
-
-
-
 
- - \ No newline at end of file diff --git a/translations/custom_mails/order_conf_admin.txt b/translations/custom_mails/order_conf_admin.txt deleted file mode 100644 index 57f2f8e75..000000000 --- a/translations/custom_mails/order_conf_admin.txt +++ /dev/null @@ -1,46 +0,0 @@ -Message from {shop_name} -Hi {firstname} {lastname}, - -New Bookings created on {shop_name}! - -Customer details -Name: {customer_name} -Email: {customer_email} - -Order details -Order: {order_name} Placed on {date} -Payment: {payment} -Room Image -Room Description -Room Capcity -Unit Price -Rooms Qty -Check-in Date -Check-out Date - -Total -{cart_booking_data_html} - -{extra_demands_details_html} - -{discounts} - -Total Rooms Cost -{total_products} - -Total Additional Facilities Cost -{total_extra_demands_te} - -Discounts -{total_discounts} - -Total Rooms Tax -{total_tax_paid} - -Additional Facilities Tax -{extra_demands_tax} - -Final Booking Amount -{total_paid} - -{shop_name} powered by Webkul™ \ No newline at end of file diff --git a/translations/en.gzip b/translations/en.gzip index 855b7c8e1..bbaedf31e 100644 Binary files a/translations/en.gzip and b/translations/en.gzip differ diff --git a/translations/fr.gzip b/translations/fr.gzip deleted file mode 100644 index ad02c464b..000000000 Binary files a/translations/fr.gzip and /dev/null differ