[REF] fix precommit

This commit is contained in:
Robin Keunen
2023-06-21 15:26:14 +02:00
committed by Darío Lodeiros
parent 587aac7f96
commit 66a985eb36
74 changed files with 3677 additions and 1838 deletions

View File

@@ -124,6 +124,7 @@ repos:
- id: flake8 - id: flake8
name: flake8 name: flake8
additional_dependencies: ["flake8-bugbear==20.1.4"] additional_dependencies: ["flake8-bugbear==20.1.4"]
exclude: get-pip.py
- repo: https://github.com/OCA/pylint-odoo - repo: https://github.com/OCA/pylint-odoo
rev: 7.0.2 rev: 7.0.2
hooks: hooks:

View File

@@ -28,18 +28,20 @@ if this_python < min_version:
message_parts = [ message_parts = [
"This script does not work on Python {}.{}".format(*this_python), "This script does not work on Python {}.{}".format(*this_python),
"The minimum supported Python version is {}.{}.".format(*min_version), "The minimum supported Python version is {}.{}.".format(*min_version),
"Please use https://bootstrap.pypa.io/pip/{}.{}/get-pip.py instead.".format(*this_python), "Please use https://bootstrap.pypa.io/pip/{}.{}/get-pip.py instead.".format(
*this_python
),
] ]
print("ERROR: " + " ".join(message_parts)) print("ERROR: " + " ".join(message_parts)) # pylint: disable=print-used
sys.exit(1) sys.exit(1)
import argparse
import importlib
import os.path import os.path
import pkgutil import pkgutil
import shutil import shutil
import tempfile import tempfile
import argparse
import importlib
from base64 import b85decode from base64 import b85decode
@@ -113,6 +115,7 @@ def bootstrap(tmpdir):
# Execute the included pip and use it to install the latest pip and # Execute the included pip and use it to install the latest pip and
# setuptools from PyPI # setuptools from PyPI
from pip._internal.cli.main import main as pip_entry_point from pip._internal.cli.main import main as pip_entry_point
args = determine_pip_install_arguments() args = determine_pip_install_arguments()
sys.exit(pip_entry_point(args)) sys.exit(pip_entry_point(args))

View File

@@ -381,7 +381,7 @@ class PortalPrecheckin(CustomerPortal):
) )
except (AccessError, MissingError): except (AccessError, MissingError):
return request.redirect("/my") return request.redirect("/my")
values.update({"no_breadcrumbs": True,"folio": folio_sudo}) values.update({"no_breadcrumbs": True, "folio": folio_sudo})
return request.render("pms.portal_my_prechekin_folio", values) return request.render("pms.portal_my_prechekin_folio", values)
@http.route( @http.route(
@@ -391,24 +391,36 @@ class PortalPrecheckin(CustomerPortal):
website=True, website=True,
csrf=False, csrf=False,
) )
def portal_precheckin_reservation(self, folio_id, reservation_id, access_token=None, **kw): def portal_precheckin_reservation(
self, folio_id, reservation_id, access_token=None, **kw
):
folio = request.env["pms.folio"].sudo().browse(folio_id) folio = request.env["pms.folio"].sudo().browse(folio_id)
reservation = request.env["pms.reservation"].sudo().browse(reservation_id) reservation = request.env["pms.reservation"].sudo().browse(reservation_id)
values = {} values = {}
values.update({"folio": folio}) values.update({"folio": folio})
values.update({"no_breadcrumbs": True,"folio_access_token": access_token, "reservation": reservation}) values.update(
{
"no_breadcrumbs": True,
"folio_access_token": access_token,
"reservation": reservation,
}
)
return request.render("pms.portal_my_prechekin_reservation", values) return request.render("pms.portal_my_prechekin_reservation", values)
@http.route( @http.route(
[ [
"/my/folios/<int:folio_id>/reservations/<int:reservation_id>/checkins/<int:checkin_partner_id>" "/my/folios/<int:folio_id>"
"/reservations/<int:reservation_id>"
"/checkins/<int:checkin_partner_id>"
], ],
type="http", type="http",
auth="public", auth="public",
website=True, website=True,
csrf=False, csrf=False,
) )
def portal_precheckin(self, folio_id, reservation_id, checkin_partner_id, access_token=None, **kw): def portal_precheckin(
self, folio_id, reservation_id, checkin_partner_id, access_token=None, **kw
):
folio = request.env["pms.folio"].sudo().browse(folio_id) folio = request.env["pms.folio"].sudo().browse(folio_id)
reservation = request.env["pms.reservation"].sudo().browse(reservation_id) reservation = request.env["pms.reservation"].sudo().browse(reservation_id)
try: try:
@@ -452,7 +464,9 @@ class PortalPrecheckin(CustomerPortal):
@http.route( @http.route(
[ [
"/my/folios/<int:folio_id>/reservations/<int:reservation_id>/checkins/<int:checkin_partner_id>/submit" "/my/folios/<int:folio_id>"
"/reservations/<int:reservation_id>"
"/checkins/<int:checkin_partner_id>/submit"
], ],
type="http", type="http",
auth="public", auth="public",

File diff suppressed because it is too large Load Diff

View File

@@ -20,7 +20,7 @@
left: 0; left: 0;
} }
.datepicker-dropdown:before { .datepicker-dropdown:before {
content: ''; content: "";
display: inline-block; display: inline-block;
border-left: 7px solid transparent; border-left: 7px solid transparent;
border-right: 7px solid transparent; border-right: 7px solid transparent;
@@ -31,7 +31,7 @@
left: 6px; left: 6px;
} }
.datepicker-dropdown:after { .datepicker-dropdown:after {
content: ''; content: "";
display: inline-block; display: inline-block;
border-left: 6px solid transparent; border-left: 6px solid transparent;
border-right: 6px solid transparent; border-right: 6px solid transparent;

View File

@@ -2,13 +2,48 @@
* Bulgarian translation for bootstrap-datepicker * Bulgarian translation for bootstrap-datepicker
* Apostol Apostolov <apostol.s.apostolov@gmail.com> * Apostol Apostolov <apostol.s.apostolov@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['bg'] = { $.fn.datepicker.dates.bg = {
days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"], days: [
"Неделя",
"Понеделник",
"Вторник",
"Сряда",
"Четвъртък",
"Петък",
"Събота",
"Неделя",
],
daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"], daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"],
daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"], daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"],
months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], months: [
monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], "Януари",
today: "днес" "Февруари",
"Март",
"Април",
"Май",
"Юни",
"Юли",
"Август",
"Септември",
"Октомври",
"Ноември",
"Декември",
],
monthsShort: [
"Ян",
"Фев",
"Мар",
"Апр",
"Май",
"Юни",
"Юли",
"Авг",
"Сеп",
"Окт",
"Ное",
"Дек",
],
today: "днес",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Catalan translation for bootstrap-datepicker * Catalan translation for bootstrap-datepicker
* J. Garcia <jogaco.en@gmail.com> * J. Garcia <jogaco.en@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['ca'] = { $.fn.datepicker.dates.ca = {
days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"], days: [
"Diumenge",
"Dilluns",
"Dimarts",
"Dimecres",
"Dijous",
"Divendres",
"Dissabte",
"Diumenge",
],
daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"], daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"],
daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"], daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"],
months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], months: [
monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], "Gener",
today: "Avui" "Febrer",
"Març",
"Abril",
"Maig",
"Juny",
"Juliol",
"Agost",
"Setembre",
"Octubre",
"Novembre",
"Desembre",
],
monthsShort: [
"Gen",
"Feb",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ago",
"Set",
"Oct",
"Nov",
"Des",
],
today: "Avui",
}; };
}(jQuery)); })(jQuery);

View File

@@ -3,13 +3,48 @@
* Matěj Koubík <matej@koubik.name> * Matěj Koubík <matej@koubik.name>
* Fixes by Michal Remiš <michal.remis@gmail.com> * Fixes by Michal Remiš <michal.remis@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['cs'] = { $.fn.datepicker.dates.cs = {
days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"], days: [
"Neděle",
"Pondělí",
"Úterý",
"Středa",
"Čtvrtek",
"Pátek",
"Sobota",
"Neděle",
],
daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"], daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"],
daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"], daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"],
months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], months: [
monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], "Leden",
today: "Dnes" "Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec",
],
monthsShort: [
"Led",
"Úno",
"Bře",
"Dub",
"Kvě",
"Čer",
"Čnc",
"Srp",
"Zář",
"Říj",
"Lis",
"Pro",
],
today: "Dnes",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Danish translation for bootstrap-datepicker * Danish translation for bootstrap-datepicker
* Christian Pedersen <http://github.com/chripede> * Christian Pedersen <http://github.com/chripede>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['da'] = { $.fn.datepicker.dates.da = {
days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], days: [
"Søndag",
"Mandag",
"Tirsdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lørdag",
"Søndag",
],
daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], "Januar",
today: "I Dag" "Februar",
"Marts",
"April",
"Maj",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"December",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec",
],
today: "I Dag",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,14 +2,49 @@
* German translation for bootstrap-datepicker * German translation for bootstrap-datepicker
* Sam Zurcher <sam@orelias.ch> * Sam Zurcher <sam@orelias.ch>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['de'] = { $.fn.datepicker.dates.de = {
days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], days: [
"Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag",
"Sonntag",
],
daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"], daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"],
daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"],
months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], months: [
monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], "Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember",
],
monthsShort: [
"Jan",
"Feb",
"Mär",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dez",
],
today: "Heute", today: "Heute",
weekStart: 1 weekStart: 1,
}; };
}(jQuery)); })(jQuery);

View File

@@ -1,13 +1,48 @@
/** /**
* Greek translation for bootstrap-datepicker * Greek translation for bootstrap-datepicker
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['el'] = { $.fn.datepicker.dates.el = {
days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"], days: [
"Κυριακή",
"Δευτέρα",
"Τρίτη",
"Τετάρτη",
"Πέμπτη",
"Παρασκευή",
"Σάββατο",
"Κυριακή",
],
daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"], daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"],
daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"], daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"],
months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], months: [
monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], "Ιανουάριος",
today: "Σήμερα" "Φεβρουάριος",
"Μάρτιος",
"Απρίλιος",
"Μάιος",
"Ιούνιος",
"Ιούλιος",
"Αύγουστος",
"Σεπτέμβριος",
"Οκτώβριος",
"Νοέμβριος",
"Δεκέμβριος",
],
monthsShort: [
"Ιαν",
"Φεβ",
"Μαρ",
"Απρ",
"Μάι",
"Ιουν",
"Ιουλ",
"Αυγ",
"Σεπ",
"Οκτ",
"Νοε",
"Δεκ",
],
today: "Σήμερα",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Spanish translation for bootstrap-datepicker * Spanish translation for bootstrap-datepicker
* Bruno Bonamin <bruno.bonamin@gmail.com> * Bruno Bonamin <bruno.bonamin@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['es'] = { $.fn.datepicker.dates.es = {
days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"], days: [
"Domingo",
"Lunes",
"Martes",
"Miércoles",
"Jueves",
"Viernes",
"Sábado",
"Domingo",
],
daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"], daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"],
daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"], daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"],
months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], months: [
monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], "Enero",
today: "Hoy" "Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre",
],
monthsShort: [
"Ene",
"Feb",
"Mar",
"Abr",
"May",
"Jun",
"Jul",
"Ago",
"Sep",
"Oct",
"Nov",
"Dic",
],
today: "Hoy",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Finnish translation for bootstrap-datepicker * Finnish translation for bootstrap-datepicker
* Jaakko Salonen <https://github.com/jsalonen> * Jaakko Salonen <https://github.com/jsalonen>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['fi'] = { $.fn.datepicker.dates.fi = {
days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"], days: [
"sunnuntai",
"maanantai",
"tiistai",
"keskiviikko",
"torstai",
"perjantai",
"lauantai",
"sunnuntai",
],
daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"], daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"],
daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"], daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"],
months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], months: [
monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], "tammikuu",
today: "tänään" "helmikuu",
"maaliskuu",
"huhtikuu",
"toukokuu",
"kesäkuu",
"heinäkuu",
"elokuu",
"syyskuu",
"lokakuu",
"marraskuu",
"joulukuu",
],
monthsShort: [
"tam",
"hel",
"maa",
"huh",
"tou",
"kes",
"hei",
"elo",
"syy",
"lok",
"mar",
"jou",
],
today: "tänään",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,14 +2,49 @@
* French translation for bootstrap-datepicker * French translation for bootstrap-datepicker
* Nico Mollet <nico.mollet@gmail.com> * Nico Mollet <nico.mollet@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['fr'] = { $.fn.datepicker.dates.fr = {
days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], days: [
"Dimanche",
"Lundi",
"Mardi",
"Mercredi",
"Jeudi",
"Vendredi",
"Samedi",
"Dimanche",
],
daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"],
daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"],
months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], months: [
monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"], "Janvier",
"Février",
"Mars",
"Avril",
"Mai",
"Juin",
"Juillet",
"Août",
"Septembre",
"Octobre",
"Novembre",
"Décembre",
],
monthsShort: [
"Jan",
"Fev",
"Mar",
"Avr",
"Mai",
"Jui",
"Jul",
"Aou",
"Sep",
"Oct",
"Nov",
"Dec",
],
today: "Aujourd'hui", today: "Aujourd'hui",
weekStart: 1 weekStart: 1,
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,14 +2,40 @@
* Hebrew translation for bootstrap-datepicker * Hebrew translation for bootstrap-datepicker
* Sagie Maoz <sagie@maoz.info> * Sagie Maoz <sagie@maoz.info>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['he'] = { $.fn.datepicker.dates.he = {
days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"],
daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], months: [
monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], "ינואר",
"פברואר",
"מרץ",
"אפריל",
"מאי",
"יוני",
"יולי",
"אוגוסט",
"ספטמבר",
"אוקטובר",
"נובמבר",
"דצמבר",
],
monthsShort: [
"ינו",
"פבר",
"מרץ",
"אפר",
"מאי",
"יונ",
"יול",
"אוג",
"ספט",
"אוק",
"נוב",
"דצמ",
],
today: "היום", today: "היום",
rtl: true rtl: true,
}; };
}(jQuery)); })(jQuery);

View File

@@ -1,13 +1,48 @@
/** /**
* Croatian localisation * Croatian localisation
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['hr'] = { $.fn.datepicker.dates.hr = {
days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"], days: [
"Nedjelja",
"Ponedjelja",
"Utorak",
"Srijeda",
"Četrtak",
"Petak",
"Subota",
"Nedjelja",
],
daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"], daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"],
daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"], daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"],
months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], months: [
monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"], "Siječanj",
today: "Danas" "Veljača",
"Ožujak",
"Travanj",
"Svibanj",
"Lipanj",
"Srpanj",
"Kolovoz",
"Rujan",
"Listopad",
"Studeni",
"Prosinac",
],
monthsShort: [
"Sije",
"Velj",
"Ožu",
"Tra",
"Svi",
"Lip",
"Jul",
"Kol",
"Ruj",
"Lis",
"Stu",
"Pro",
],
today: "Danas",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,12 +2,47 @@
* Bahasa translation for bootstrap-datepicker * Bahasa translation for bootstrap-datepicker
* Azwar Akbar <azwar.akbar@gmail.com> * Azwar Akbar <azwar.akbar@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['id'] = { $.fn.datepicker.dates.id = {
days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], days: [
"Minggu",
"Senin",
"Selasa",
"Rabu",
"Kamis",
"Jumat",
"Sabtu",
"Minggu",
],
daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"], daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"],
daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"], daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"],
months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"] "Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Mei",
"Jun",
"Jul",
"Ags",
"Sep",
"Okt",
"Nov",
"Des",
],
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Icelandic translation for bootstrap-datepicker * Icelandic translation for bootstrap-datepicker
* Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> * Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['is'] = { $.fn.datepicker.dates.is = {
days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"], days: [
"Sunnudagur",
"Mánudagur",
"Þriðjudagur",
"Miðvikudagur",
"Fimmtudagur",
"Föstudagur",
"Laugardagur",
"Sunnudagur",
],
daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"], daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"],
daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"], daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"],
months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], "Janúar",
today: "Í Dag" "Febrúar",
"Mars",
"Apríl",
"Maí",
"Júní",
"Júlí",
"Ágúst",
"September",
"Október",
"Nóvember",
"Desember",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Maí",
"Jún",
"Júl",
"Ágú",
"Sep",
"Okt",
"Nóv",
"Des",
],
today: "Í Dag",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Italian translation for bootstrap-datepicker * Italian translation for bootstrap-datepicker
* Enrico Rubboli <rubboli@gmail.com> * Enrico Rubboli <rubboli@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['it'] = { $.fn.datepicker.dates.it = {
days: ["Domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"], days: [
"Domenica",
"Lunedi",
"Martedi",
"Mercoledi",
"Giovedi",
"Venerdi",
"Sabato",
"Domenica",
],
daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"],
daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"],
months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], months: [
monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], "Gennaio",
today: "Oggi" "Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre",
],
monthsShort: [
"Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic",
],
today: "Oggi",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,12 +2,38 @@
* Japanese translation for bootstrap-datepicker * Japanese translation for bootstrap-datepicker
* Norio Suzuki <https://github.com/suzuki/> * Norio Suzuki <https://github.com/suzuki/>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['ja'] = { $.fn.datepicker.dates.ja = {
days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"], days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"],
daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"], daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"],
daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"], daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"],
months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], months: [
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] "1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月",
],
monthsShort: [
"1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月",
],
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,12 +2,47 @@
* Korean translation for bootstrap-datepicker * Korean translation for bootstrap-datepicker
* Gu Youn <http://github.com/guyoun> * Gu Youn <http://github.com/guyoun>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['kr'] = { $.fn.datepicker.dates.kr = {
days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], days: [
"일요일",
"월요일",
"화요일",
"수요일",
"목요일",
"금요일",
"토요일",
"일요일",
],
daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"],
daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"],
months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], months: [
monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] "1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월",
],
monthsShort: [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월",
],
}; };
}(jQuery)); })(jQuery);

View File

@@ -3,14 +3,49 @@
* Šarūnas Gliebus <ssharunas@yahoo.co.uk> * Šarūnas Gliebus <ssharunas@yahoo.co.uk>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['lt'] = { $.fn.datepicker.dates.lt = {
days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"], days: [
"Sekmadienis",
"Pirmadienis",
"Antradienis",
"Trečiadienis",
"Ketvirtadienis",
"Penktadienis",
"Šeštadienis",
"Sekmadienis",
],
daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"], daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"],
daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"], daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"],
months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], months: [
monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], "Sausis",
"Vasaris",
"Kovas",
"Balandis",
"Gegužė",
"Birželis",
"Liepa",
"Rugpjūtis",
"Rugsėjis",
"Spalis",
"Lapkritis",
"Gruodis",
],
monthsShort: [
"Sau",
"Vas",
"Kov",
"Bal",
"Geg",
"Bir",
"Lie",
"Rugp",
"Rugs",
"Spa",
"Lap",
"Gru",
],
today: "Šiandien", today: "Šiandien",
weekStart: 1 weekStart: 1,
}; };
}(jQuery)); })(jQuery);

View File

@@ -3,14 +3,49 @@
* Artis Avotins <artis@apit.lv> * Artis Avotins <artis@apit.lv>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['lv'] = { $.fn.datepicker.dates.lv = {
days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"], days: [
"Svētdiena",
"Pirmdiena",
"Otrdiena",
"Trešdiena",
"Ceturtdiena",
"Piektdiena",
"Sestdiena",
"Svētdiena",
],
daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"], daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"],
daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"], daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"],
months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."], "Janvāris",
"Februāris",
"Marts",
"Aprīlis",
"Maijs",
"Jūnijs",
"Jūlijs",
"Augusts",
"Septembris",
"Oktobris",
"Novembris",
"Decembris",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Mai",
"Jūn",
"Jūl",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec.",
],
today: "Šodien", today: "Šodien",
weekStart: 1 weekStart: 1,
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,39 @@
* Malay translation for bootstrap-datepicker * Malay translation for bootstrap-datepicker
* Ateman Faiz <noorulfaiz@gmail.com> * Ateman Faiz <noorulfaiz@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['ms'] = { $.fn.datepicker.dates.ms = {
days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"], days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"],
daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"], daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"],
daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"], daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"],
months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], "Januari",
today: "Hari Ini" "Februari",
"Mac",
"April",
"Mei",
"Jun",
"Julai",
"Ogos",
"September",
"Oktober",
"November",
"Disember",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Mei",
"Jun",
"Jul",
"Ogo",
"Sep",
"Okt",
"Nov",
"Dis",
],
today: "Hari Ini",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Norwegian (bokmål) translation for bootstrap-datepicker * Norwegian (bokmål) translation for bootstrap-datepicker
* Fredrik Sundmyhr <http://github.com/fsundmyhr> * Fredrik Sundmyhr <http://github.com/fsundmyhr>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['nb'] = { $.fn.datepicker.dates.nb = {
days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], days: [
"Søndag",
"Mandag",
"Tirsdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lørdag",
"Søndag",
],
daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], "Januar",
today: "I Dag" "Februar",
"Mars",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Desember",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Des",
],
today: "I Dag",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Dutch translation for bootstrap-datepicker * Dutch translation for bootstrap-datepicker
* Reinier Goltstein <mrgoltstein@gmail.com> * Reinier Goltstein <mrgoltstein@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['nl'] = { $.fn.datepicker.dates.nl = {
days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], days: [
"Zondag",
"Maandag",
"Dinsdag",
"Woensdag",
"Donderdag",
"Vrijdag",
"Zaterdag",
"Zondag",
],
daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], months: [
monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], "Januari",
today: "Vandaag" "Februari",
"Maart",
"April",
"Mei",
"Juni",
"Juli",
"Augustus",
"September",
"Oktober",
"November",
"December",
],
monthsShort: [
"Jan",
"Feb",
"Mrt",
"Apr",
"Mei",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec",
],
today: "Vandaag",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,14 +2,49 @@
* Polish translation for bootstrap-datepicker * Polish translation for bootstrap-datepicker
* Robert <rtpm@gazeta.pl> * Robert <rtpm@gazeta.pl>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['pl'] = { $.fn.datepicker.dates.pl = {
days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], days: [
"Niedziela",
"Poniedziałek",
"Wtorek",
"Środa",
"Czwartek",
"Piątek",
"Sobota",
"Niedziela",
],
daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"],
daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"],
months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], months: [
monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], "Styczeń",
"Luty",
"Marzec",
"Kwiecień",
"Maj",
"Czerwiec",
"Lipiec",
"Sierpień",
"Wrzesień",
"Październik",
"Listopad",
"Grudzień",
],
monthsShort: [
"Sty",
"Lu",
"Mar",
"Kw",
"Maj",
"Cze",
"Lip",
"Sie",
"Wrz",
"Pa",
"Lis",
"Gru",
],
today: "Dzisiaj", today: "Dzisiaj",
weekStart: 1 weekStart: 1,
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Brazilian translation for bootstrap-datepicker * Brazilian translation for bootstrap-datepicker
* Cauan Cabral <cauan@radig.com.br> * Cauan Cabral <cauan@radig.com.br>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['pt-BR'] = { $.fn.datepicker.dates["pt-BR"] = {
days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], days: [
"Domingo",
"Segunda",
"Terça",
"Quarta",
"Quinta",
"Sexta",
"Sábado",
"Domingo",
],
daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], months: [
monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], "Janeiro",
today: "Hoje" "Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro",
],
monthsShort: [
"Jan",
"Fev",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ago",
"Set",
"Out",
"Nov",
"Dez",
],
today: "Hoje",
}; };
}(jQuery)); })(jQuery);

View File

@@ -3,12 +3,47 @@
* Original code: Cauan Cabral <cauan@radig.com.br> * Original code: Cauan Cabral <cauan@radig.com.br>
* Tiago Melo <tiago.blackcode@gmail.com> * Tiago Melo <tiago.blackcode@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['pt'] = { $.fn.datepicker.dates.pt = {
days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], days: [
"Domingo",
"Segunda",
"Terça",
"Quarta",
"Quinta",
"Sexta",
"Sábado",
"Domingo",
],
daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], months: [
monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"] "Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro",
],
monthsShort: [
"Jan",
"Fev",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ago",
"Set",
"Out",
"Nov",
"Dez",
],
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,14 +2,49 @@
* Romanian translation for bootstrap-datepicker * Romanian translation for bootstrap-datepicker
* Cristian Vasile <cristi.mie@gmail.com> * Cristian Vasile <cristi.mie@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['ro'] = { $.fn.datepicker.dates.ro = {
days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"], days: [
"Duminică",
"Luni",
"Marţi",
"Miercuri",
"Joi",
"Vineri",
"Sâmbătă",
"Duminică",
],
daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"], daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"],
daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"], daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"],
months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], months: [
monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], "Ianuarie",
"Februarie",
"Martie",
"Aprilie",
"Mai",
"Iunie",
"Iulie",
"August",
"Septembrie",
"Octombrie",
"Noiembrie",
"Decembrie",
],
monthsShort: [
"Ian",
"Feb",
"Mar",
"Apr",
"Mai",
"Iun",
"Iul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
],
today: "Astăzi", today: "Astăzi",
weekStart: 1 weekStart: 1,
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Serbian latin translation for bootstrap-datepicker * Serbian latin translation for bootstrap-datepicker
* Bojan Milosavlević <milboj@gmail.com> * Bojan Milosavlević <milboj@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['rs'] = { $.fn.datepicker.dates.rs = {
days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"], days: [
"Nedelja",
"Ponedeljak",
"Utorak",
"Sreda",
"Četvrtak",
"Petak",
"Subota",
"Nedelja",
],
daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"], daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"],
daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"], daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"],
months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], "Januar",
today: "Danas" "Februar",
"Mart",
"April",
"Maj",
"Jun",
"Jul",
"Avgust",
"Septembar",
"Oktobar",
"Novembar",
"Decembar",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Avg",
"Sep",
"Okt",
"Nov",
"Dec",
],
today: "Danas",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Serbian cyrillic translation for bootstrap-datepicker * Serbian cyrillic translation for bootstrap-datepicker
* Bojan Milosavlević <milboj@gmail.com> * Bojan Milosavlević <milboj@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['rs'] = { $.fn.datepicker.dates.rs = {
days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"], days: [
"Недеља",
"Понедељак",
"Уторак",
"Среда",
"Четвртак",
"Петак",
"Субота",
"Недеља",
],
daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"], daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"],
daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"], daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"],
months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], months: [
monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], "Јануар",
today: "Данас" "Фебруар",
"Март",
"Април",
"Мај",
"Јун",
"Јул",
"Август",
"Септембар",
"Октобар",
"Новембар",
"Децембар",
],
monthsShort: [
"Јан",
"Феб",
"Мар",
"Апр",
"Мај",
"Јун",
"Јул",
"Авг",
"Сеп",
"Окт",
"Нов",
"Дец",
],
today: "Данас",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Russian translation for bootstrap-datepicker * Russian translation for bootstrap-datepicker
* Victor Taranenko <darwin@snowdale.com> * Victor Taranenko <darwin@snowdale.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['ru'] = { $.fn.datepicker.dates.ru = {
days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], days: [
"Воскресенье",
"Понедельник",
"Вторник",
"Среда",
"Четверг",
"Пятница",
"Суббота",
"Воскресенье",
],
daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"], daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"],
daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"],
months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], months: [
monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], "Январь",
today: "Сегодня" "Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь",
],
monthsShort: [
"Янв",
"Фев",
"Мар",
"Апр",
"Май",
"Июн",
"Июл",
"Авг",
"Сен",
"Окт",
"Ноя",
"Дек",
],
today: "Сегодня",
}; };
}(jQuery)); })(jQuery);

View File

@@ -3,13 +3,48 @@
* Marek Lichtner <marek@licht.sk> * Marek Lichtner <marek@licht.sk>
* Fixes by Michal Remiš <michal.remis@gmail.com> * Fixes by Michal Remiš <michal.remis@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates["sk"] = { $.fn.datepicker.dates.sk = {
days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"], days: [
"Nedeľa",
"Pondelok",
"Utorok",
"Streda",
"Štvrtok",
"Piatok",
"Sobota",
"Nedeľa",
],
daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"], daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"],
daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"], daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"],
months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], "Január",
today: "Dnes" "Február",
"Marec",
"Apríl",
"Máj",
"Jún",
"Júl",
"August",
"September",
"Október",
"November",
"December",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Máj",
"Jún",
"Júl",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec",
],
today: "Dnes",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Slovene translation for bootstrap-datepicker * Slovene translation for bootstrap-datepicker
* Gregor Rudolf <gregor.rudolf@gmail.com> * Gregor Rudolf <gregor.rudolf@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['sl'] = { $.fn.datepicker.dates.sl = {
days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"], days: [
"Nedelja",
"Ponedeljek",
"Torek",
"Sreda",
"Četrtek",
"Petek",
"Sobota",
"Nedelja",
],
daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"], daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"],
daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"], daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"],
months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], "Januar",
today: "Danes" "Februar",
"Marec",
"April",
"Maj",
"Junij",
"Julij",
"Avgust",
"September",
"Oktober",
"November",
"December",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Avg",
"Sep",
"Okt",
"Nov",
"Dec",
],
today: "Danes",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Swedish translation for bootstrap-datepicker * Swedish translation for bootstrap-datepicker
* Patrik Ragnarsson <patrik@starkast.net> * Patrik Ragnarsson <patrik@starkast.net>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['sv'] = { $.fn.datepicker.dates.sv = {
days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"], days: [
"Söndag",
"Måndag",
"Tisdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lördag",
"Söndag",
],
daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"], daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"],
daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"], daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"],
months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], months: [
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], "Januari",
today: "I Dag" "Februari",
"Mars",
"April",
"Maj",
"Juni",
"Juli",
"Augusti",
"September",
"Oktober",
"November",
"December",
],
monthsShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec",
],
today: "I Dag",
}; };
}(jQuery)); })(jQuery);

View File

@@ -3,13 +3,48 @@
* Edwin Mugendi <https://github.com/edwinmugendi> * Edwin Mugendi <https://github.com/edwinmugendi>
* Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['sw'] = { $.fn.datepicker.dates.sw = {
days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"], days: [
"Jumapili",
"Jumatatu",
"Jumanne",
"Jumatano",
"Alhamisi",
"Ijumaa",
"Jumamosi",
"Jumapili",
],
daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"], daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"],
daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"], daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"],
months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], months: [
monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], "Januari",
today: "Leo" "Februari",
"Machi",
"Aprili",
"Mei",
"Juni",
"Julai",
"Agosti",
"Septemba",
"Oktoba",
"Novemba",
"Desemba",
],
monthsShort: [
"Jan",
"Feb",
"Mac",
"Apr",
"Mei",
"Jun",
"Jul",
"Ago",
"Sep",
"Okt",
"Nov",
"Des",
],
today: "Leo",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Thai translation for bootstrap-datepicker * Thai translation for bootstrap-datepicker
* Suchau Jiraprapot <seroz24@gmail.com> * Suchau Jiraprapot <seroz24@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['th'] = { $.fn.datepicker.dates.th = {
days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], days: [
"อาทิตย์",
"จันทร์",
"อังคาร",
"พุธ",
"พฤหัส",
"ศุกร์",
"เสาร์",
"อาทิตย์",
],
daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], months: [
monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], "มกราคม",
today: "วันนี้" "กุมภาพันธ์",
"มีนาคม",
"เมษายน",
"พฤษภาคม",
"มิถุนายน",
"กรกฎาคม",
"สิงหาคม",
"กันยายน",
"ตุลาคม",
"พฤศจิกายน",
"ธันวาคม",
],
monthsShort: [
"ม.ค.",
"ก.พ.",
"มี.ค.",
"เม.ย.",
"พ.ค.",
"มิ.ย.",
"ก.ค.",
"ส.ค.",
"ก.ย.",
"ต.ค.",
"พ.ย.",
"ธ.ค.",
],
today: "วันนี้",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,14 +2,48 @@
* Turkish translation for bootstrap-datepicker * Turkish translation for bootstrap-datepicker
* Serkan Algur <kaisercrazy_2@hotmail.com> * Serkan Algur <kaisercrazy_2@hotmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['tr'] = { $.fn.datepicker.dates.tr = {
days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"], days: [
"Pazar",
"Pazartesi",
"Salı",
"Çarşamba",
"Perşembe",
"Cuma",
"Cumartesi",
"Pazar",
],
daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"], daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"],
daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"], daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"],
months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], months: [
monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], "Ocak",
today: "Bugün" "Şubat",
"Mart",
"Nisan",
"Mayıs",
"Haziran",
"Temmuz",
"Ağustos",
"Eylül",
"Ekim",
"Kasım",
"Aralık",
],
monthsShort: [
"Oca",
"Şub",
"Mar",
"Nis",
"May",
"Haz",
"Tem",
"Ağu",
"Eyl",
"Eki",
"Kas",
"Ara",
],
today: "Bugün",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Ukrainian translation for bootstrap-datepicker * Ukrainian translation for bootstrap-datepicker
* Andrey Vityuk <andrey [dot] vityuk [at] gmail.com> * Andrey Vityuk <andrey [dot] vityuk [at] gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['uk'] = { $.fn.datepicker.dates.uk = {
days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"], days: [
"Неділя",
"Понеділок",
"Вівторок",
"Середа",
"Четвер",
"П'ятниця",
"Субота",
"Неділя",
],
daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"],
daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"],
months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], months: [
monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], "Січень",
today: "Сьогодні" "Лютий",
"Березень",
"Квітень",
"Травень",
"Червень",
"Липень",
"Серпень",
"Вересень",
"Жовтень",
"Листопад",
"Грудень",
],
monthsShort: [
"Січ",
"Лют",
"Бер",
"Кві",
"Тра",
"Чер",
"Лип",
"Сер",
"Вер",
"Жов",
"Лис",
"Гру",
],
today: "Сьогодні",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,13 +2,48 @@
* Simplified Chinese translation for bootstrap-datepicker * Simplified Chinese translation for bootstrap-datepicker
* Yuan Cheung <advanimal@gmail.com> * Yuan Cheung <advanimal@gmail.com>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['zh-CN'] = { $.fn.datepicker.dates["zh-CN"] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], days: [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期日",
],
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], months: [
monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "一月",
today: "今日" "二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月",
],
monthsShort: [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月",
],
today: "今日",
}; };
}(jQuery)); })(jQuery);

View File

@@ -2,12 +2,47 @@
* Traditional Chinese translation for bootstrap-datepicker * Traditional Chinese translation for bootstrap-datepicker
* Rung-Sheng Jang <daniel@i-trend.co.cc> * Rung-Sheng Jang <daniel@i-trend.co.cc>
*/ */
;(function($){ (function ($) {
$.fn.datepicker.dates['zh-TW'] = { $.fn.datepicker.dates["zh-TW"] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], days: [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期日",
],
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], months: [
monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "一月", "十二月"] "一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月",
],
monthsShort: [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月",
],
}; };
}(jQuery)); })(jQuery);

View File

@@ -5,6 +5,7 @@ from freezegun import freeze_time
from odoo import fields from odoo import fields
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.tests import Form from odoo.tests import Form
from .common import TestPms from .common import TestPms

View File

@@ -7,7 +7,7 @@
<form string="Sale Channel"> <form string="Sale Channel">
<sheet> <sheet>
<group> <group>
<field name="icon" widget="image"/> <field name="icon" widget="image" />
<field name="name" colspan="1" /> <field name="name" colspan="1" />
<field name="channel_type" /> <field name="channel_type" />
<field name="is_on_line" /> <field name="is_on_line" />

View File

@@ -69,10 +69,7 @@
<t t-call="portal.portal_layout"> <t t-call="portal.portal_layout">
<t t-set="checkins_count" t-value="1" /> <t t-set="checkins_count" t-value="1" />
<t t-foreach="reservation.checkin_partner_ids" t-as="checkin_partner"> <t t-foreach="reservation.checkin_partner_ids" t-as="checkin_partner">
<form <form t-att-action="checkin_partner.get_portal_url()" method="post">
t-att-action="checkin_partner.get_portal_url()"
method="post"
>
<div class="checkin-card"> <div class="checkin-card">
<input <input
class="d-none" class="d-none"
@@ -1081,7 +1078,9 @@
</form> </form>
</div> </div>
<center> <center>
<t t-if="len(folio.checkin_partner_ids.filtered(lambda c: c.state in ['dummy','draft'])) &gt;= 1"> <t
t-if="len(folio.checkin_partner_ids.filtered(lambda c: c.state in ['dummy','draft'])) &gt;= 1"
>
<div> <div>
If you wish, you can share with the rest of the guests the access to their check-in so that they can fill it out.<br If you wish, you can share with the rest of the guests the access to their check-in so that they can fill it out.<br
/> />

View File

@@ -6,9 +6,6 @@ POS PMS LINK
.. contents:: .. contents::
:local: :local:
POS PMS LINK
-----------------------
Settings Settings
-------- --------

0
pos_pms_link/__init__.py Executable file → Normal file
View File

0
pos_pms_link/models/__init__.py Executable file → Normal file
View File

View File

@@ -17,15 +17,22 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
from odoo import models, api from odoo import api, models
class PMSReservation(models.Model): class PMSReservation(models.Model):
_inherit = 'pms.reservation' _inherit = "pms.reservation"
@api.model @api.model
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
if self.env.context.get("pos_user_force", False): if self.env.context.get("pos_user_force", False):
return super().sudo().with_context(pos_user_force=False).search_read(domain, fields, offset, limit, order) return (
super()
.sudo()
.with_context(pos_user_force=False)
.search_read(domain, fields, offset, limit, order)
)
else: else:
return super(PMSReservation, self).search_read(domain, fields, offset, limit, order) return super(PMSReservation, self).search_read(
domain, fields, offset, limit, order
)

View File

@@ -17,14 +17,22 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
from odoo import models, api from odoo import api, models
class PMSService(models.Model): class PMSService(models.Model):
_inherit = 'pms.service' _inherit = "pms.service"
@api.model @api.model
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
if self.env.context.get("pos_user_force", False): if self.env.context.get("pos_user_force", False):
return super().sudo().with_context(pos_user_force=False).search_read(domain, fields, offset, limit, order) return (
super()
.sudo()
.with_context(pos_user_force=False)
.search_read(domain, fields, offset, limit, order)
)
else: else:
return super(PMSService, self).search_read(domain, fields, offset, limit, order) return super(PMSService, self).search_read(
domain, fields, offset, limit, order
)

View File

@@ -17,14 +17,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
from odoo import fields, models, api, _ from odoo import api, fields, models
from odoo.osv.expression import AND
import pytz
from datetime import timedelta
from odoo.addons.point_of_sale.wizard.pos_box import PosBox
class PMSServiceLine(models.Model): class PMSServiceLine(models.Model):
_inherit = 'pms.service.line' _inherit = "pms.service.line"
pos_order_line_ids = fields.One2many( pos_order_line_ids = fields.One2many(
string="POS lines", string="POS lines",
@@ -35,6 +32,13 @@ class PMSServiceLine(models.Model):
@api.model @api.model
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
if self.env.context.get("pos_user_force", False): if self.env.context.get("pos_user_force", False):
return super().sudo().with_context(pos_user_force=False).search_read(domain, fields, offset, limit, order) return (
super()
.sudo()
.with_context(pos_user_force=False)
.search_read(domain, fields, offset, limit, order)
)
else: else:
return super(PMSServiceLine, self).search_read(domain, fields, offset, limit, order) return super(PMSServiceLine, self).search_read(
domain, fields, offset, limit, order
)

View File

@@ -18,24 +18,34 @@
# #
############################################################################## ##############################################################################
import json
from odoo import api, fields, models, _
from odoo.exceptions import Warning, UserError
import logging import logging
from odoo import api, fields, models
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class PosConfig(models.Model): class PosConfig(models.Model):
_inherit = 'pos.config' _inherit = "pos.config"
pay_on_reservation = fields.Boolean('Pay on reservation', default=False) pay_on_reservation = fields.Boolean("Pay on reservation", default=False)
pay_on_reservation_method_id = fields.Many2one('pos.payment.method', string='Pay on reservation method') pay_on_reservation_method_id = fields.Many2one(
reservation_allowed_propertie_ids = fields.Many2many('pms.property', string='Reservation allowed properties') "pos.payment.method", string="Pay on reservation method"
)
reservation_allowed_propertie_ids = fields.Many2many(
"pms.property", string="Reservation allowed properties"
)
@api.model @api.model
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
if self.env.context.get("pos_user_force", False): if self.env.context.get("pos_user_force", False):
return super().sudo().with_context(pos_user_force=False).search_read(domain, fields, offset, limit, order) return (
super()
.sudo()
.with_context(pos_user_force=False)
.search_read(domain, fields, offset, limit, order)
)
else: else:
return super(PosConfig, self).search_read(domain, fields, offset, limit, order) return super(PosConfig, self).search_read(
domain, fields, offset, limit, order
)

View File

@@ -17,52 +17,61 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
from odoo import fields, models, api, _ from datetime import datetime
from odoo.osv.expression import AND
import pytz from odoo import _, api, fields, models
from datetime import datetime, timedelta
from odoo.addons.point_of_sale.wizard.pos_box import PosBox
from odoo.exceptions import UserError from odoo.exceptions import UserError
class PosOrder(models.Model):
_inherit = 'pos.order'
paid_on_reservation = fields.Boolean('Paid on reservation', default=False) class PosOrder(models.Model):
pms_reservation_id = fields.Many2one('pms.reservation', string='PMS reservation') _inherit = "pos.order"
paid_on_reservation = fields.Boolean("Paid on reservation", default=False)
pms_reservation_id = fields.Many2one("pms.reservation", string="PMS reservation")
def _get_fields_for_draft_order(self): def _get_fields_for_draft_order(self):
res = super(PosOrder, self)._get_fields_for_draft_order() res = super(PosOrder, self)._get_fields_for_draft_order()
res.append('paid_on_reservation') res.append("paid_on_reservation")
res.append('pms_reservation_id') res.append("pms_reservation_id")
return res return res
@api.model @api.model
def _order_fields(self, ui_order): def _order_fields(self, ui_order):
order_fields = super(PosOrder, self)._order_fields(ui_order) order_fields = super(PosOrder, self)._order_fields(ui_order)
order_fields['paid_on_reservation'] = ui_order.get('paid_on_reservation', False) order_fields["paid_on_reservation"] = ui_order.get("paid_on_reservation", False)
order_fields['pms_reservation_id'] = ui_order.get('pms_reservation_id', False) order_fields["pms_reservation_id"] = ui_order.get("pms_reservation_id", False)
return order_fields return order_fields
def _get_fields_for_order_line(self): def _get_fields_for_order_line(self):
res = super(PosOrder, self)._get_fields_for_order_line() res = super(PosOrder, self)._get_fields_for_order_line()
res.append('pms_service_line_id') res.append("pms_service_line_id")
return res return res
def _get_order_lines(self, orders): def _get_order_lines(self, orders):
super(PosOrder, self)._get_order_lines(orders) super(PosOrder, self)._get_order_lines(orders)
for order in orders: for order in orders:
if 'lines' in order: if "lines" in order:
for line in order['lines']: for line in order["lines"]:
line[2]['pms_service_line_id'] = line[2]['pms_service_line_id'][0] if line[2]['pms_service_line_id'] else False line[2]["pms_service_line_id"] = (
line[2]["pms_service_line_id"][0]
if line[2]["pms_service_line_id"]
else False
)
@api.model @api.model
def _process_order(self, pos_order, draft, existing_order): def _process_order(self, pos_order, draft, existing_order):
data = pos_order.get('data', False) data = pos_order.get("data", False)
if data and data.get("paid_on_reservation", False) and data.get("pms_reservation_id", False): if (
pms_reservation_id = data.pop('pms_reservation_id') data
and data.get("paid_on_reservation", False)
and data.get("pms_reservation_id", False)
):
pms_reservation_id = data.pop("pms_reservation_id")
res = super(PosOrder, self)._process_order(pos_order, draft, existing_order) res = super(PosOrder, self)._process_order(pos_order, draft, existing_order)
order_id = self.env['pos.order'].browse(res) order_id = self.env["pos.order"].browse(res)
pms_reservation_id = self.sudo().env['pms.reservation'].browse(pms_reservation_id) pms_reservation_id = (
self.sudo().env["pms.reservation"].browse(pms_reservation_id)
)
if not pms_reservation_id: if not pms_reservation_id:
raise UserError(_("Reservation does not exists.")) raise UserError(_("Reservation does not exists."))
order_id.pms_reservation_id = pms_reservation_id.id order_id.pms_reservation_id = pms_reservation_id.id
@@ -72,12 +81,15 @@ class PosOrder(models.Model):
return super()._process_order(pos_order, draft, existing_order) return super()._process_order(pos_order, draft, existing_order)
def add_order_lines_to_reservation(self, pms_reservation_id): def add_order_lines_to_reservation(self, pms_reservation_id):
self.lines.filtered(lambda x: not x.pms_service_line_id)._generate_pms_service(pms_reservation_id) self.lines.filtered(lambda x: not x.pms_service_line_id)._generate_pms_service(
pms_reservation_id
)
class PosOrderLine(models.Model): class PosOrderLine(models.Model):
_inherit = 'pos.order.line' _inherit = "pos.order.line"
pms_service_line_id = fields.Many2one('pms.service.line', string='PMS Service line') pms_service_line_id = fields.Many2one("pms.service.line", string="PMS Service line")
def _generate_pms_service(self, pms_reservation_id): def _generate_pms_service(self, pms_reservation_id):
for line in self: for line in self:
@@ -100,6 +112,4 @@ class PosOrderLine(models.Model):
} }
service = self.sudo().env["pms.service"].create(vals) service = self.sudo().env["pms.service"].create(vals)
line.write({ line.write({"pms_service_line_id": service.service_line_ids.id})
'pms_service_line_id': service.service_line_ids.id
})

View File

@@ -17,16 +17,20 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
from odoo import api, fields, models, _ from odoo import api, models
class PosPayment(models.Model): class PosPayment(models.Model):
_inherit = "pos.payment" _inherit = "pos.payment"
@api.constrains('payment_method_id') @api.constrains("payment_method_id")
def _check_payment_method_id(self): def _check_payment_method_id(self):
for payment in self: for payment in self:
if payment.session_id.config_id.pay_on_reservation and payment.session_id.config_id.pay_on_reservation_method_id == payment.payment_method_id: if (
payment.session_id.config_id.pay_on_reservation
and payment.session_id.config_id.pay_on_reservation_method_id
== payment.payment_method_id
):
continue continue
else: else:
super(PosPayment, payment)._check_payment_method_id() super(PosPayment, payment)._check_payment_method_id()

View File

@@ -18,26 +18,35 @@
# #
############################################################################## ##############################################################################
from collections import defaultdict
import json
from odoo import api, fields, models, _
from odoo.exceptions import Warning, UserError
import logging import logging
from collections import defaultdict
from odoo import models
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class PosSession(models.Model): class PosSession(models.Model):
_inherit = 'pos.session' _inherit = "pos.session"
def _accumulate_amounts(self, data): def _accumulate_amounts(self, data): # noqa: C901 # too-complex
res = super(PosSession, self)._accumulate_amounts(data) res = super(PosSession, self)._accumulate_amounts(data)
if self.config_id.pay_on_reservation and self.config_id.pay_on_reservation_method_id: if (
amounts = lambda: {'amount': 0.0, 'amount_converted': 0.0} self.config_id.pay_on_reservation
tax_amounts = lambda: {'amount': 0.0, 'amount_converted': 0.0, 'base_amount': 0.0, 'base_amount_converted': 0.0} and self.config_id.pay_on_reservation_method_id
):
amounts = lambda: {"amount": 0.0, "amount_converted": 0.0} # noqa E731
tax_amounts = lambda: { # noqa: E731
"amount": 0.0,
"amount_converted": 0.0,
"base_amount": 0.0,
"base_amount_converted": 0.0,
}
sales = defaultdict(amounts) sales = defaultdict(amounts)
taxes = defaultdict(tax_amounts) taxes = defaultdict(tax_amounts)
rounded_globally = self.company_id.tax_calculation_rounding_method == 'round_globally' rounded_globally = (
self.company_id.tax_calculation_rounding_method == "round_globally"
)
reservation_orders = self.order_ids.filtered(lambda x: x.pms_reservation_id) reservation_orders = self.order_ids.filtered(lambda x: x.pms_reservation_id)
@@ -47,22 +56,32 @@ class PosSession(models.Model):
# Combine sales/refund lines # Combine sales/refund lines
sale_key = ( sale_key = (
# account # account
line['income_account_id'], line["income_account_id"],
# sign # sign
-1 if line['amount'] < 0 else 1, -1 if line["amount"] < 0 else 1,
# for taxes # for taxes
tuple((tax['id'], tax['account_id'], tax['tax_repartition_line_id']) for tax in line['taxes']), tuple(
line['base_tags'], (tax["id"], tax["account_id"], tax["tax_repartition_line_id"])
for tax in line["taxes"]
),
line["base_tags"],
)
sales[sale_key] = self._update_amounts(
sales[sale_key], {"amount": line["amount"]}, line["date_order"]
) )
sales[sale_key] = self._update_amounts(sales[sale_key], {'amount': line['amount']}, line['date_order'])
# Combine tax lines # Combine tax lines
for tax in line['taxes']: for tax in line["taxes"]:
tax_key = (tax['account_id'] or line['income_account_id'], tax['tax_repartition_line_id'], tax['id'], tuple(tax['tag_ids'])) tax_key = (
tax["account_id"] or line["income_account_id"],
tax["tax_repartition_line_id"],
tax["id"],
tuple(tax["tag_ids"]),
)
order_taxes[tax_key] = self._update_amounts( order_taxes[tax_key] = self._update_amounts(
order_taxes[tax_key], order_taxes[tax_key],
{'amount': tax['amount'], 'base_amount': tax['base']}, {"amount": tax["amount"], "base_amount": tax["base"]},
tax['date_order'], tax["date_order"],
round=not rounded_globally round=not rounded_globally,
) )
for tax_key, amounts in order_taxes.items(): for tax_key, amounts in order_taxes.items():
if rounded_globally: if rounded_globally:
@@ -72,25 +91,37 @@ class PosSession(models.Model):
for element, value in dict(res["taxes"]).items(): for element, value in dict(res["taxes"]).items():
if element in taxes: if element in taxes:
value['amount'] = value['amount'] - taxes[element]['amount'] value["amount"] = value["amount"] - taxes[element]["amount"]
value['amount_converted'] = value['amount_converted'] - taxes[element]['amount_converted'] value["amount_converted"] = (
value['base_amount'] = value['base_amount'] - taxes[element]['base_amount'] value["amount_converted"] - taxes[element]["amount_converted"]
value['base_amount_converted'] = value['base_amount_converted'] - taxes[element]['base_amount_converted'] )
value["base_amount"] = (
value["base_amount"] - taxes[element]["base_amount"]
)
value["base_amount_converted"] = (
value["base_amount_converted"]
- taxes[element]["base_amount_converted"]
)
for element, value in dict(res["sales"]).items(): for element, value in dict(res["sales"]).items():
if element in sales: if element in sales:
value['amount'] = value['amount'] - sales[element]['amount'] value["amount"] = value["amount"] - sales[element]["amount"]
value['amount_converted'] = value['amount_converted'] - sales[element]['amount_converted'] value["amount_converted"] = (
value["amount_converted"] - sales[element]["amount_converted"]
)
if self.config_id.pay_on_reservation_method_id.split_transactions: if self.config_id.pay_on_reservation_method_id.split_transactions:
for element, value in dict(res["split_receivables"]).items(): for element, value in dict(res["split_receivables"]).items():
if element.payment_method_id == self.config_id.pay_on_reservation_method_id: if (
value['amount'] = 0.0 element.payment_method_id
value['amount_converted'] = 0.0 == self.config_id.pay_on_reservation_method_id
):
value["amount"] = 0.0
value["amount_converted"] = 0.0
else: else:
for element, value in dict(res["combine_receivables"]).items(): for element, value in dict(res["combine_receivables"]).items():
if element == self.config_id.pay_on_reservation_method_id: if element == self.config_id.pay_on_reservation_method_id:
value['amount'] = 0.0 value["amount"] = 0.0
value['amount_converted'] = 0.0 value["amount_converted"] = 0.0
return res return res

View File

@@ -17,24 +17,40 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
from odoo import models, api from odoo import api, models
class ProductPricelist(models.Model): class ProductPricelist(models.Model):
_inherit = 'product.pricelist' _inherit = "product.pricelist"
@api.model @api.model
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
if self.env.context.get("pos_user_force", False): if self.env.context.get("pos_user_force", False):
return super().sudo().with_context(pos_user_force=False).search_read(domain, fields, offset, limit, order) return (
super()
.sudo()
.with_context(pos_user_force=False)
.search_read(domain, fields, offset, limit, order)
)
else: else:
return super(ProductPricelist, self).search_read(domain, fields, offset, limit, order) return super(ProductPricelist, self).search_read(
domain, fields, offset, limit, order
)
class ProductPricelistItem(models.Model): class ProductPricelistItem(models.Model):
_inherit = 'product.pricelist.item' _inherit = "product.pricelist.item"
@api.model @api.model
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
if self.env.context.get("pos_user_force", False): if self.env.context.get("pos_user_force", False):
return super().sudo().with_context(pos_user_force=False).search_read(domain, fields, offset, limit, order) return (
super()
.sudo()
.with_context(pos_user_force=False)
.search_read(domain, fields, offset, limit, order)
)
else: else:
return super(ProductPricelistItem, self).search_read(domain, fields, offset, limit, order) return super(ProductPricelistItem, self).search_read(
domain, fields, offset, limit, order
)

View File

@@ -1,12 +1,12 @@
odoo.define('pos_pms_link.ReservationSelectionButton', function(require) { odoo.define("pos_pms_link.ReservationSelectionButton", function (require) {
'use strict'; "use strict";
const PosComponent = require('point_of_sale.PosComponent'); const PosComponent = require("point_of_sale.PosComponent");
const ProductScreen = require('point_of_sale.ProductScreen'); const ProductScreen = require("point_of_sale.ProductScreen");
const { useListener } = require('web.custom_hooks'); const {useListener} = require("web.custom_hooks");
const Registries = require('point_of_sale.Registries'); const Registries = require("point_of_sale.Registries");
const { Gui } = require('point_of_sale.Gui'); const {Gui} = require("point_of_sale.Gui");
var core = require('web.core'); var core = require("web.core");
var QWeb = core.qweb; var QWeb = core.qweb;
var _t = core._t; var _t = core._t;
@@ -14,26 +14,26 @@ odoo.define('pos_pms_link.ReservationSelectionButton', function(require) {
class ReservationSelectionButton extends PosComponent { class ReservationSelectionButton extends PosComponent {
constructor() { constructor() {
super(...arguments); super(...arguments);
useListener('click', this.onClick); useListener("click", this.onClick);
} }
get currentOrder() { get currentOrder() {
return this.env.pos.get_order(); return this.env.pos.get_order();
} }
async onClick() { async onClick() {
const { confirmed, payload: newReservation } = await this.showTempScreen( const {
'ReservationListScreen', confirmed,
{ reservation: null } payload: newReservation,
); } = await this.showTempScreen("ReservationListScreen", {reservation: null});
if (confirmed) { if (confirmed) {
this.currentOrder.add_reservation_services(newReservation); this.currentOrder.add_reservation_services(newReservation);
} }
} }
} }
ReservationSelectionButton.template = 'ReservationSelectionButton'; ReservationSelectionButton.template = "ReservationSelectionButton";
ProductScreen.addControlButton({ ProductScreen.addControlButton({
component: ReservationSelectionButton, component: ReservationSelectionButton,
condition: function() { condition: function () {
return true; return true;
}, },
}); });

View File

@@ -1,37 +1,44 @@
odoo.define('pos_pms_link.PaymentScreen', function (require) { odoo.define("pos_pms_link.PaymentScreen", function (require) {
'use strict'; "use strict";
const PaymentScreen = require('point_of_sale.PaymentScreen'); const PaymentScreen = require("point_of_sale.PaymentScreen");
const Registries = require('point_of_sale.Registries'); const Registries = require("point_of_sale.Registries");
const session = require('web.session'); const session = require("web.session");
const PosPMSLinkPaymentScreen = (PaymentScreen) => const PosPMSLinkPaymentScreen = (PaymentScreen) =>
class extends PaymentScreen { class extends PaymentScreen {
async selectReservation() { async selectReservation() {
const { confirmed, payload: newReservation } = await this.showTempScreen( const {confirmed, payload: newReservation} = await this.showTempScreen(
'ReservationListScreen', "ReservationListScreen",
{ reservation: null } {
reservation: null,
}
); );
if (confirmed) { if (confirmed) {
var self = this; var self = this;
const { confirmed } = await this.showPopup('ConfirmPopup', { const {confirmed} = await this.showPopup("ConfirmPopup", {
title: this.env._t('Pay order with reservation ?'), title: this.env._t("Pay order with reservation ?"),
body: this.env._t( body: this.env._t(
'This operation will add all the products in the order to the reservation. RESERVATION: ' + newReservation['name'] + ' PARTNER : ' + newReservation['partner_name'] + ' ROOM: ' + newReservation['rooms'] "This operation will add all the products in the order to the reservation. RESERVATION: " +
newReservation.name +
" PARTNER : " +
newReservation.partner_name +
" ROOM: " +
newReservation.rooms
), ),
}); });
if (confirmed) { if (confirmed) {
var payment_method = { var payment_method = {
'id': self.env.pos.config.pay_on_reservation_method_id[0], id: self.env.pos.config.pay_on_reservation_method_id[0],
'name': self.env.pos.config.pay_on_reservation_method_id[1], name: self.env.pos.config.pay_on_reservation_method_id[1],
'is_cash_count': false, is_cash_count: false,
'pos_mercury_config_id': false, pos_mercury_config_id: false,
'use_payment_terminal': false, use_payment_terminal: false,
} };
self.trigger('new-payment-line', payment_method); self.trigger("new-payment-line", payment_method);
this.currentOrder.set_paid_on_reservation(true); this.currentOrder.set_paid_on_reservation(true);
this.currentOrder.set_pms_reservation_id(newReservation['id']); this.currentOrder.set_pms_reservation_id(newReservation.id);
self.validateOrder(false); self.validateOrder(false);
} }
} }

View File

@@ -1,9 +1,9 @@
odoo.define('pos_pms_link.OrderReceipt', function (require) { odoo.define("pos_pms_link.OrderReceipt", function (require) {
'use strict'; "use strict";
const OrderReceipt = require('point_of_sale.OrderReceipt'); const OrderReceipt = require("point_of_sale.OrderReceipt");
const Registries = require('point_of_sale.Registries'); const Registries = require("point_of_sale.Registries");
const session = require('web.session'); const session = require("web.session");
const PosPMSLinkOrderReceipt = (OrderReceipt) => const PosPMSLinkOrderReceipt = (OrderReceipt) =>
class extends OrderReceipt { class extends OrderReceipt {
@@ -11,7 +11,11 @@ odoo.define('pos_pms_link.OrderReceipt', function (require) {
return this.receiptEnv.receipt.paid_on_reservation; return this.receiptEnv.receipt.paid_on_reservation;
} }
get reservation_name() { get reservation_name() {
return this.env.pos.db.get_reservation_by_id(this.receiptEnv.receipt.pms_reservation_id).partner_name || ""; return (
this.env.pos.db.get_reservation_by_id(
this.receiptEnv.receipt.pms_reservation_id
).partner_name || ""
);
} }
}; };

View File

@@ -1,10 +1,10 @@
odoo.define('pos_pms_link.ReservationDetailsEdit', function(require) { odoo.define("pos_pms_link.ReservationDetailsEdit", function (require) {
'use strict'; "use strict";
const { _t } = require('web.core'); const {_t} = require("web.core");
const { getDataURLFromFile } = require('web.utils'); const {getDataURLFromFile} = require("web.utils");
const PosComponent = require('point_of_sale.PosComponent'); const PosComponent = require("point_of_sale.PosComponent");
const Registries = require('point_of_sale.Registries'); const Registries = require("point_of_sale.Registries");
class ReservationDetailsEdit extends PosComponent { class ReservationDetailsEdit extends PosComponent {
constructor() { constructor() {
@@ -12,10 +12,10 @@ odoo.define('pos_pms_link.ReservationDetailsEdit', function(require) {
const reservation = this.props.reservation; const reservation = this.props.reservation;
} }
mounted() { mounted() {
this.env.bus.on('save-reservation', this, this.saveChanges); this.env.bus.on("save-reservation", this, this.saveChanges);
} }
willUnmount() { willUnmount() {
this.env.bus.off('save-reservation', this); this.env.bus.off("save-reservation", this);
} }
/** /**
* Save to field `changes` all input changes from the form fields. * Save to field `changes` all input changes from the form fields.
@@ -24,25 +24,27 @@ odoo.define('pos_pms_link.ReservationDetailsEdit', function(require) {
this.changes[event.target.name] = event.target.value; this.changes[event.target.name] = event.target.value;
} }
saveChanges() { saveChanges() {
let processedChanges = {}; const processedChanges = {};
for (let [key, value] of Object.entries(this.changes)) { for (const [key, value] of Object.entries(this.changes)) {
if (this.intFields.includes(key)) { if (this.intFields.includes(key)) {
processedChanges[key] = parseInt(value) || false; processedChanges[key] = parseInt(value) || false;
} else { } else {
processedChanges[key] = value; processedChanges[key] = value;
} }
} }
if ((!this.props.reservation.name && !processedChanges.name) || if (
processedChanges.name === '' ){ (!this.props.reservation.name && !processedChanges.name) ||
return this.showPopup('ErrorPopup', { processedChanges.name === ""
title: _t('A Customer Name Is Required'), ) {
return this.showPopup("ErrorPopup", {
title: _t("A Customer Name Is Required"),
}); });
} }
processedChanges.id = this.props.reservation.id || false; processedChanges.id = this.props.reservation.id || false;
this.trigger('save-changes', { processedChanges }); this.trigger("save-changes", {processedChanges});
} }
} }
ReservationDetailsEdit.template = 'ReservationDetailsEdit'; ReservationDetailsEdit.template = "ReservationDetailsEdit";
Registries.Component.add(ReservationDetailsEdit); Registries.Component.add(ReservationDetailsEdit);

View File

@@ -1,15 +1,17 @@
odoo.define('pos_pms_link.ReservationLine', function(require) { odoo.define("pos_pms_link.ReservationLine", function (require) {
'use strict'; "use strict";
const PosComponent = require('point_of_sale.PosComponent'); const PosComponent = require("point_of_sale.PosComponent");
const Registries = require('point_of_sale.Registries'); const Registries = require("point_of_sale.Registries");
class ReservationLine extends PosComponent { class ReservationLine extends PosComponent {
get highlight() { get highlight() {
return this.props.reservation !== this.props.selectedReservation ? '' : 'highlight'; return this.props.reservation !== this.props.selectedReservation
? ""
: "highlight";
} }
} }
ReservationLine.template = 'ReservationLine'; ReservationLine.template = "ReservationLine";
Registries.Component.add(ReservationLine); Registries.Component.add(ReservationLine);

View File

@@ -1,12 +1,12 @@
odoo.define('pos_pms_link.ReservationListScreen', function(require) { odoo.define("pos_pms_link.ReservationListScreen", function (require) {
'use strict'; "use strict";
const { debounce } = owl.utils; const {debounce} = owl.utils;
const PosComponent = require('point_of_sale.PosComponent'); const PosComponent = require("point_of_sale.PosComponent");
const Registries = require('point_of_sale.Registries'); const Registries = require("point_of_sale.Registries");
const { useListener } = require('web.custom_hooks'); const {useListener} = require("web.custom_hooks");
const { isRpcError } = require('point_of_sale.utils'); const {isRpcError} = require("point_of_sale.utils");
const { useAsyncLockedMethod } = require('point_of_sale.custom_hooks'); const {useAsyncLockedMethod} = require("point_of_sale.custom_hooks");
/** /**
* Render this screen using `showTempScreen` to select client. * Render this screen using `showTempScreen` to select client.
@@ -27,9 +27,9 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
constructor() { constructor() {
super(...arguments); super(...arguments);
this.lockedSaveChanges = useAsyncLockedMethod(this.saveChanges); this.lockedSaveChanges = useAsyncLockedMethod(this.saveChanges);
useListener('click-save', () => this.env.bus.trigger('save-customer')); useListener("click-save", () => this.env.bus.trigger("save-customer"));
useListener('click-edit', () => this.editReservation()); useListener("click-edit", () => this.editReservation());
useListener('save-changes', this.lockedSaveChanges); useListener("save-changes", this.lockedSaveChanges);
// We are not using useState here because the object // We are not using useState here because the object
// passed to useState converts the object and its contents // passed to useState converts the object and its contents
@@ -42,7 +42,7 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
detailIsShown: false, detailIsShown: false,
isEditMode: false, isEditMode: false,
editModeProps: { editModeProps: {
reservation: {} reservation: {},
}, },
}; };
this.updateReservationList = debounce(this.updateReservationList, 70); this.updateReservationList = debounce(this.updateReservationList, 70);
@@ -50,17 +50,20 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
// Lifecycle hooks // Lifecycle hooks
back() { back() {
if(this.state.detailIsShown) { if (this.state.detailIsShown) {
this.state.detailIsShown = false; this.state.detailIsShown = false;
this.render(); this.render();
} else { } else {
this.props.resolve({ confirmed: false, payload: false }); this.props.resolve({confirmed: false, payload: false});
this.trigger('close-temp-screen'); this.trigger("close-temp-screen");
} }
} }
confirm() { confirm() {
this.props.resolve({ confirmed: true, payload: this.state.selectedReservation }); this.props.resolve({
this.trigger('close-temp-screen'); confirmed: true,
payload: this.state.selectedReservation,
});
this.trigger("close-temp-screen");
} }
// Getters // Getters
@@ -69,14 +72,13 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
} }
get reservations() { get reservations() {
if (this.state.query && this.state.query.trim() !== '') { if (this.state.query && this.state.query.trim() !== "") {
return this.env.pos.db.search_reservation(this.state.query.trim()); return this.env.pos.db.search_reservation(this.state.query.trim());
} else { }
return this.env.pos.db.get_reservations_sorted(1000); return this.env.pos.db.get_reservations_sorted(1000);
} }
}
get isNextButtonVisible() { get isNextButtonVisible() {
return this.state.selectedReservation ? true : false; return Boolean(this.state.selectedReservation);
} }
/** /**
* Returns the text and command of the next button. * Returns the text and command of the next button.
@@ -84,12 +86,14 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
*/ */
get nextButton() { get nextButton() {
if (!this.props.reservation) { if (!this.props.reservation) {
return { command: 'set', text: this.env._t('Set Reservation') }; return {command: "set", text: this.env._t("Set Reservation")};
} else if (this.props.reservation && this.props.reservation === this.state.selectedReservation) { } else if (
return { command: 'deselect', text: this.env._t('Deselect Reservation') }; this.props.reservation &&
} else { this.props.reservation === this.state.selectedReservation
return { command: 'set', text: this.env._t('Change Reservation') }; ) {
return {command: "deselect", text: this.env._t("Deselect Reservation")};
} }
return {command: "set", text: this.env._t("Change Reservation")};
} }
// Methods // Methods
@@ -99,7 +103,7 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
updateReservationList(event) { updateReservationList(event) {
this.state.query = event.target.value; this.state.query = event.target.value;
const reservations = this.reservations; const reservations = this.reservations;
if (event.code === 'Enter' && reservations.length === 1) { if (event.code === "Enter" && reservations.length === 1) {
this.state.selectedReservation = reservations[0]; this.state.selectedReservation = reservations[0];
this.clickNext(); this.clickNext();
} else { } else {
@@ -107,7 +111,7 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
} }
} }
clickReservation(event) { clickReservation(event) {
let reservation = event.detail.reservation; const reservation = event.detail.reservation;
if (this.state.selectedReservation === reservation) { if (this.state.selectedReservation === reservation) {
this.state.selectedCReservation = null; this.state.selectedCReservation = null;
} else { } else {
@@ -123,11 +127,14 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
this.render(); this.render();
} }
clickNext() { clickNext() {
this.state.selectedReservation = this.nextButton.command === 'set' ? this.state.selectedReservation : null; this.state.selectedReservation =
this.nextButton.command === "set"
? this.state.selectedReservation
: null;
this.confirm(); this.confirm();
} }
activateEditMode(event) { activateEditMode(event) {
const { isNewReservation } = event.detail; const {isNewReservation} = event.detail;
this.state.isEditMode = true; this.state.isEditMode = true;
this.state.detailIsShown = true; this.state.detailIsShown = true;
this.state.isNewReservation = isNewReservation; this.state.isNewReservation = isNewReservation;
@@ -149,7 +156,7 @@ odoo.define('pos_pms_link.ReservationListScreen', function(require) {
this.deactivateEditMode(); this.deactivateEditMode();
} }
} }
ReservationListScreen.template = 'ReservationListScreen'; ReservationListScreen.template = "ReservationListScreen";
Registries.Component.add(ReservationListScreen); Registries.Component.add(ReservationListScreen);

View File

@@ -34,48 +34,61 @@ odoo.define("pos_pms_link.db", function (require) {
this.reservation_search_string = ""; this.reservation_search_string = "";
this.reservation_id = null; this.reservation_id = null;
}, },
get_reservation_by_id: function(id){ get_reservation_by_id: function (id) {
return this.reservation_by_id[id]; return this.reservation_by_id[id];
}, },
get_reservations_sorted: function(max_count){ get_reservations_sorted: function (max_count) {
max_count = max_count ? Math.min(this.reservation_sorted.length, max_count) : this.reservation_sorted.length; max_count = max_count
? Math.min(this.reservation_sorted.length, max_count)
: this.reservation_sorted.length;
var reservations = []; var reservations = [];
for (var i = 0; i < max_count; i++) { for (var i = 0; i < max_count; i++) {
reservations.push(this.reservation_by_id[this.reservation_sorted[i]]); reservations.push(this.reservation_by_id[this.reservation_sorted[i]]);
} }
return reservations; return reservations;
}, },
search_reservation: function(query){ search_reservation: function (query) {
try { try {
query = query.replace(/[\[\]\(\)\+\*\?\.\-\!\&\^\$\|\~\_\{\}\:\,\\\/]/g,'.'); query = query.replace(
query = query.replace(/ /g,'.+'); /[\[\]\(\)\+\*\?\.\-\!\&\^\$\|\~\_\{\}\:\,\\\/]/g,
var re = RegExp("([0-9]+):.*?"+utils.unaccent(query),"gi"); "."
}catch(e){ );
query = query.replace(/ /g, ".+");
var re = RegExp("([0-9]+):.*?" + utils.unaccent(query), "gi");
} catch (e) {
return []; return [];
} }
var results = []; var results = [];
for(var i = 0; i < this.limit; i++){ for (var i = 0; i < this.limit; i++) {
var r = re.exec(this.reservation_search_string); var r = re.exec(this.reservation_search_string);
if(r){ if (r) {
var id = Number(r[1]); var id = Number(r[1]);
results.push(this.get_reservation_by_id(id)); results.push(this.get_reservation_by_id(id));
}else{ } else {
break; break;
} }
} }
return results; return results;
}, },
_reservation_search_string: function(reservation){ _reservation_search_string: function (reservation) {
var str = reservation.name || ''; var str = reservation.name || "";
var room_str = reservation.rooms || ''; var room_str = reservation.rooms || "";
var partner_str = reservation.partner_name || ''; var partner_str = reservation.partner_name || "";
str = '' + reservation.id + ':' + str.replace(':', '').replace(/\n/g, ' ') + ':' + room_str.replace(':', '').replace(/\n/g, ' ') + ':' + partner_str.replace(':', '').replace(/\n/g, ' ') + '\n'; str =
String(reservation.id) +
":" +
str.replace(":", "").replace(/\n/g, " ") +
":" +
room_str.replace(":", "").replace(/\n/g, " ") +
":" +
partner_str.replace(":", "").replace(/\n/g, " ") +
"\n";
return str; return str;
}, },
add_reservations: function(reservations){ add_reservations: function (reservations) {
var updated_count = 0; var updated_count = 0;
var reservation; var reservation;
for(var i = 0, len = reservations.length; i < len; i++){ for (var i = 0, len = reservations.length; i < len; i++) {
reservation = reservations[i]; reservation = reservations[i];
if (!this.reservation_by_id[reservation.id]) { if (!this.reservation_by_id[reservation.id]) {
@@ -93,13 +106,17 @@ odoo.define("pos_pms_link.db", function (require) {
for (var id in this.reservation_by_id) { for (var id in this.reservation_by_id) {
reservation = this.reservation_by_id[id]; reservation = this.reservation_by_id[id];
if(reservation.barcode){ if (reservation.barcode) {
this.reservation_by_barcode[reservation.barcode] = reservation; this.reservation_by_barcode[reservation.barcode] = reservation;
} }
this.reservation_search_string += this._reservation_search_string(reservation); this.reservation_search_string += this._reservation_search_string(
reservation
);
} }
this.reservation_search_string = utils.unaccent(this.reservation_search_string); this.reservation_search_string = utils.unaccent(
this.reservation_search_string
);
} }
return updated_count; return updated_count;
}, },

View File

@@ -20,130 +20,157 @@
############################################################################## ##############################################################################
*/ */
odoo.define('pos_pms_link.models', function (require) { odoo.define("pos_pms_link.models", function (require) {
"use strict"; "use strict";
var models = require('point_of_sale.models'); var models = require("point_of_sale.models");
var utils = require('web.utils'); var utils = require("web.utils");
var round_di = utils.round_decimals; var round_di = utils.round_decimals;
var core = require('web.core'); var core = require("web.core");
const { Gui } = require('point_of_sale.Gui'); const {Gui} = require("point_of_sale.Gui");
var QWeb = core.qweb; var QWeb = core.qweb;
const session = require('web.session'); const session = require("web.session");
var _t = core._t; var _t = core._t;
var _super_order = models.Order.prototype; var _super_order = models.Order.prototype;
models.Order = models.Order.extend({ models.Order = models.Order.extend({
initialize: function(attr, options) { initialize: function (attr, options) {
_super_order.initialize.apply(this,arguments); _super_order.initialize.apply(this, arguments);
this.paid_on_reservation = this.paid_on_reservation || null; this.paid_on_reservation = this.paid_on_reservation || null;
this.pms_reservation_id = this.pms_reservation_id || null; this.pms_reservation_id = this.pms_reservation_id || null;
}, },
get_paid_on_reservation: function() { get_paid_on_reservation: function () {
var paid_on_reservation = this.paid_on_reservation; var paid_on_reservation = this.paid_on_reservation;
return paid_on_reservation; return paid_on_reservation;
}, },
set_paid_on_reservation: function(value) { set_paid_on_reservation: function (value) {
this.paid_on_reservation = value; this.paid_on_reservation = value;
this.trigger('change', this); this.trigger("change", this);
}, },
get_pms_reservation_id: function() { get_pms_reservation_id: function () {
var pms_reservation_id = this.pms_reservation_id; var pms_reservation_id = this.pms_reservation_id;
return pms_reservation_id; return pms_reservation_id;
}, },
set_pms_reservation_id: function(value) { set_pms_reservation_id: function (value) {
this.pms_reservation_id = value; this.pms_reservation_id = value;
this.trigger('change', this); this.trigger("change", this);
}, },
export_as_JSON: function() { export_as_JSON: function () {
var json = _super_order.export_as_JSON.apply(this,arguments); var json = _super_order.export_as_JSON.apply(this, arguments);
json.paid_on_reservation = this.paid_on_reservation; json.paid_on_reservation = this.paid_on_reservation;
json.pms_reservation_id = this.pms_reservation_id; json.pms_reservation_id = this.pms_reservation_id;
return json; return json;
}, },
init_from_JSON: function(json) { init_from_JSON: function (json) {
_super_order.init_from_JSON.apply(this,arguments); _super_order.init_from_JSON.apply(this, arguments);
this.paid_on_reservation = json.paid_on_reservation; this.paid_on_reservation = json.paid_on_reservation;
this.pms_reservation_id = json.pms_reservation_id; this.pms_reservation_id = json.pms_reservation_id;
}, },
apply_ms_data: function(data) { apply_ms_data: function (data) {
if (typeof data.paid_on_reservation !== "undefined") { if (typeof data.paid_on_reservation !== "undefined") {
this.set_paid_on_reservation(data.paid_on_reservation); this.set_paid_on_reservation(data.paid_on_reservation);
} }
if (typeof data.pms_reservation_id !== "undefined") { if (typeof data.pms_reservation_id !== "undefined") {
this.set_pms_reservation_id(data.pms_reservation_id); this.set_pms_reservation_id(data.pms_reservation_id);
} }
this.trigger('change', this); this.trigger("change", this);
}, },
add_reservation_services: function(reservation) { add_reservation_services: function (reservation) {
var self = this; var self = this;
var d = new Date(); var d = new Date();
var month = d.getMonth()+1; var month = d.getMonth() + 1;
var day = d.getDate(); var day = d.getDate();
var current_date = d.getFullYear() + '-' + var current_date =
(month<10 ? '0' : '') + month + '-' + d.getFullYear() +
(day<10 ? '0' : '') + day; "-" +
(month < 10 ? "0" : "") +
month +
"-" +
(day < 10 ? "0" : "") +
day;
var service_line_ids = reservation.service_ids.map(x => x.service_line_ids) || false; var service_line_ids =
var today_service_lines = [] reservation.service_ids.map((x) => x.service_line_ids) || false;
_.each(service_line_ids, function(service_array){ var today_service_lines = [];
today_service_lines.push(service_array.find(x => x.date === current_date)); _.each(service_line_ids, function (service_array) {
today_service_lines.push(
service_array.find((x) => x.date === current_date)
);
}); });
_.each(today_service_lines, function(service_line_id){ _.each(today_service_lines, function (service_line_id) {
if (service_line_id){ if (service_line_id) {
var qty = service_line_id.day_qty var qty = service_line_id.day_qty;
if (service_line_id.pos_order_line_ids.length > 0) { if (service_line_id.pos_order_line_ids.length > 0) {
_.each(service_line_id.pos_order_line_ids, function(order_line_id){ _.each(service_line_id.pos_order_line_ids, function (
order_line_id
) {
qty -= order_line_id.qty; qty -= order_line_id.qty;
}); });
} }
if (qty > 0) { if (qty > 0) {
var options = { var options = {
'quantity': qty, quantity: qty,
'pms_service_line_id': service_line_id.id, pms_service_line_id: service_line_id.id,
'price': 0.0, price: 0.0,
}; };
var service_product = self.pos.db.get_product_by_id(service_line_id.product_id[0]); var service_product = self.pos.db.get_product_by_id(
service_line_id.product_id[0]
);
self.pos.get_order().add_product(service_product, options); self.pos.get_order().add_product(service_product, options);
var last_line = self.pos.get_order().get_last_orderline(); var last_line = self.pos.get_order().get_last_orderline();
last_line.set_note("RESERVATION: " + reservation.name + " ROOMS: " + reservation.rooms); last_line.set_note(
var r_service_line_id = reservation.service_ids.map(x => x.service_line_ids)[0].find(x=>x.id==service_line_id.id); "RESERVATION: " +
reservation.name +
" ROOMS: " +
reservation.rooms
);
var r_service_line_id = reservation.service_ids
.map((x) => x.service_line_ids)[0]
.find((x) => x.id == service_line_id.id);
if (r_service_line_id.pos_order_line_ids.length == 0) { if (r_service_line_id.pos_order_line_ids.length == 0) {
r_service_line_id.pos_order_line_ids.push({ r_service_line_id.pos_order_line_ids.push({
'id': 0, id: 0,
'qty': parseInt(qty) qty: parseInt(qty),
}); });
} else if (r_service_line_id.pos_order_line_ids.length == 1 && r_service_line_id.pos_order_line_ids[0].id == 0){ } else if (
r_service_line_id.pos_order_line_ids.length == 1 &&
r_service_line_id.pos_order_line_ids[0].id == 0
) {
r_service_line_id.pos_order_line_ids[0].qty = parseInt(qty); r_service_line_id.pos_order_line_ids[0].qty = parseInt(qty);
} else if (r_service_line_id.pos_order_line_ids.length == 1 && r_service_line_id.pos_order_line_ids[0].id != 0){ } else if (
r_service_line_id.pos_order_line_ids.length == 1 &&
r_service_line_id.pos_order_line_ids[0].id != 0
) {
r_service_line_id.pos_order_line_ids.push({ r_service_line_id.pos_order_line_ids.push({
'id': 0, id: 0,
'qty': parseInt(qty) qty: parseInt(qty),
}); });
} else if (r_service_line_id.pos_order_line_ids.length > 1){ } else if (r_service_line_id.pos_order_line_ids.length > 1) {
var id_in_lines = false; var id_in_lines = false;
_.each(r_service_line_id.pos_order_line_ids, function(pos_line_id){ _.each(r_service_line_id.pos_order_line_ids, function (
if(pos_line_id.id == self.id) { pos_line_id
) {
if (pos_line_id.id == self.id) {
pos_line_id.qty = parseInt(qty); pos_line_id.qty = parseInt(qty);
id_in_lines = true; id_in_lines = true;
} }
}); });
if (id_in_lines == false) { if (id_in_lines == false) {
r_service_line_id.pos_order_line_ids.push({ r_service_line_id.pos_order_line_ids.push({
'id': self.id, id: self.id,
'qty': parseInt(qty) qty: parseInt(qty),
}); });
} }
} }
@@ -152,62 +179,62 @@ odoo.define('pos_pms_link.models', function (require) {
}); });
}, },
add_product: function(product, options){ add_product: function (product, options) {
_super_order.add_product.apply(this,arguments); _super_order.add_product.apply(this, arguments);
if (options.pms_service_line_id) { if (options.pms_service_line_id) {
this.selected_orderline.set_pms_service_line_id(options.pms_service_line_id); this.selected_orderline.set_pms_service_line_id(
options.pms_service_line_id
);
} }
}, },
export_for_printing: function () { export_for_printing: function () {
let result = _super_order.export_for_printing.apply(this, arguments); const result = _super_order.export_for_printing.apply(this, arguments);
result.paid_on_reservation = this.paid_on_reservation; result.paid_on_reservation = this.paid_on_reservation;
result.pms_reservation_id = this.pms_reservation_id; result.pms_reservation_id = this.pms_reservation_id;
return result; return result;
}, },
});
})
var _super_orderline = models.Orderline.prototype; var _super_orderline = models.Orderline.prototype;
models.Orderline = models.Orderline.extend({ models.Orderline = models.Orderline.extend({
initialize: function (attr, options) {
initialize: function(attr, options) { _super_orderline.initialize.call(this, attr, options);
_super_orderline.initialize.call(this,attr,options);
this.server_id = this.server_id || null; this.server_id = this.server_id || null;
this.pms_service_line_id = this.pms_service_line_id || null; this.pms_service_line_id = this.pms_service_line_id || null;
}, },
get_pms_service_line_id: function() { get_pms_service_line_id: function () {
var pms_service_line_id = this.pms_service_line_id; var pms_service_line_id = this.pms_service_line_id;
return pms_service_line_id; return pms_service_line_id;
}, },
set_pms_service_line_id: function(value) { set_pms_service_line_id: function (value) {
this.pms_service_line_id = value; this.pms_service_line_id = value;
this.trigger('change', this); this.trigger("change", this);
}, },
export_as_JSON: function() { export_as_JSON: function () {
var json = _super_orderline.export_as_JSON.apply(this,arguments); var json = _super_orderline.export_as_JSON.apply(this, arguments);
json.pms_service_line_id = this.pms_service_line_id; json.pms_service_line_id = this.pms_service_line_id;
return json; return json;
}, },
init_from_JSON: function(json) { init_from_JSON: function (json) {
_super_orderline.init_from_JSON.apply(this,arguments); _super_orderline.init_from_JSON.apply(this, arguments);
this.pms_service_line_id = json.pms_service_line_id; this.pms_service_line_id = json.pms_service_line_id;
this.server_id = json.server_id; this.server_id = json.server_id;
}, },
apply_ms_data: function(data) { apply_ms_data: function (data) {
if (typeof data.pms_service_line_id !== "undefined") { if (typeof data.pms_service_line_id !== "undefined") {
this.set_pms_service_line_id(data.pms_service_line_id); this.set_pms_service_line_id(data.pms_service_line_id);
} }
this.trigger('change', this); this.trigger("change", this);
}, },
set_quantity: function(quantity, keep_price) { set_quantity: function (quantity, keep_price) {
_super_orderline.set_quantity.apply(this, arguments); _super_orderline.set_quantity.apply(this, arguments);
var is_real_qty = true; var is_real_qty = true;
if (!quantity || quantity == "remove") { if (!quantity || quantity == "remove") {
@@ -215,123 +242,167 @@ odoo.define('pos_pms_link.models', function (require) {
} }
var self = this; var self = this;
if (self.pms_service_line_id) { if (self.pms_service_line_id) {
this.pos.reservations.map(function(x) { this.pos.reservations.map(function (x) {
_.each(x.service_ids, function(service){ _.each(x.service_ids, function (service) {
_.each(service.service_line_ids, function(line){ _.each(service.service_line_ids, function (line) {
if (line.id == self.pms_service_line_id) { if (line.id == self.pms_service_line_id) {
if (line.pos_order_line_ids.length == 0 && is_real_qty) { if (
line.pos_order_line_ids.length == 0 &&
is_real_qty
) {
line.pos_order_line_ids.push({ line.pos_order_line_ids.push({
'id': self.server_id || 0, id: self.server_id || 0,
'qty': parseInt(quantity) qty: parseInt(quantity),
}); });
} else if (line.pos_order_line_ids.length == 1 && line.pos_order_line_ids[0].id == self.server_id){ } else if (
line.pos_order_line_ids.length == 1 &&
line.pos_order_line_ids[0].id == self.server_id
) {
if (is_real_qty) { if (is_real_qty) {
line.pos_order_line_ids[0].qty = parseInt(quantity); line.pos_order_line_ids[0].qty = parseInt(
quantity
);
} else { } else {
line.pos_order_line_ids.pop(line.pos_order_line_ids[0]); line.pos_order_line_ids.pop(
line.pos_order_line_ids[0]
);
} }
} else if (line.pos_order_line_ids.length == 1 && line.pos_order_line_ids[0].id != self.server_id && is_real_qty){ } else if (
line.pos_order_line_ids.length == 1 &&
line.pos_order_line_ids[0].id != self.server_id &&
is_real_qty
) {
line.pos_order_line_ids.push({ line.pos_order_line_ids.push({
'id': self.server_id || 0, id: self.server_id || 0,
'qty': parseInt(quantity) qty: parseInt(quantity),
}); });
} else if (line.pos_order_line_ids.length > 1){ } else if (line.pos_order_line_ids.length > 1) {
var id_in_lines = false; var id_in_lines = false;
_.each(line.pos_order_line_ids, function(pos_line_id){ _.each(line.pos_order_line_ids, function (
if(pos_line_id.id == self.server_id) { pos_line_id
) {
if (pos_line_id.id == self.server_id) {
if (is_real_qty) { if (is_real_qty) {
pos_line_id.qty = parseInt(quantity); pos_line_id.qty = parseInt(quantity);
} else { } else {
line.pos_order_line_ids.pop(pos_line_id); line.pos_order_line_ids.pop(
pos_line_id
);
} }
id_in_lines = true; id_in_lines = true;
} }
}); });
_.each(line.pos_order_line_ids, function(pos_line_id){ _.each(line.pos_order_line_ids, function (
if(pos_line_id.id == 0) { pos_line_id
) {
if (pos_line_id.id == 0) {
if (is_real_qty) { if (is_real_qty) {
pos_line_id.qty = parseInt(quantity); pos_line_id.qty = parseInt(quantity);
} else { } else {
line.pos_order_line_ids.pop(pos_line_id); line.pos_order_line_ids.pop(
pos_line_id
);
} }
id_in_lines = true; id_in_lines = true;
} }
}); });
if (id_in_lines == false && is_real_qty) { if (id_in_lines == false && is_real_qty) {
line.pos_order_line_ids.push({ line.pos_order_line_ids.push({
'id': self.server_id || 0, id: self.server_id || 0,
'qty': parseInt(quantity) qty: parseInt(quantity),
}); });
} }
} }
} }
}); });
}); });
}) });
} }
}, },
}); });
var _super_posmodel = models.PosModel.prototype; var _super_posmodel = models.PosModel.prototype;
models.PosModel = models.PosModel.extend({ models.PosModel = models.PosModel.extend({
initialize: function(attr, options) { initialize: function (attr, options) {
_super_posmodel.initialize.apply(this,arguments); _super_posmodel.initialize.apply(this, arguments);
this.reservations = []; this.reservations = [];
}, },
}); });
models.load_models({ models.load_models({
model: 'pms.reservation', model: "pms.reservation",
fields: ['name', 'id', 'state', 'service_ids', 'partner_name', 'adults', 'children', 'checkin', 'checkout', 'folio_internal_comment', 'rooms'], fields: [
context: function(self){ "name",
var ctx_copy = session.user_context "id",
ctx_copy['pos_user_force'] = true; "state",
"service_ids",
"partner_name",
"adults",
"children",
"checkin",
"checkout",
"folio_internal_comment",
"rooms",
],
context: function (self) {
var ctx_copy = session.user_context;
ctx_copy.pos_user_force = true;
return ctx_copy; return ctx_copy;
}, },
domain: function(self){ domain: function (self) {
var d = new Date(); var d = new Date();
var month = d.getMonth()+1; var month = d.getMonth() + 1;
var day = d.getDate(); var day = d.getDate();
var current_date = d.getFullYear() + '-' + var current_date =
(month<10 ? '0' : '') + month + '-' + d.getFullYear() +
(day<10 ? '0' : '') + day; "-" +
(month < 10 ? "0" : "") +
month +
"-" +
(day < 10 ? "0" : "") +
day;
var domain = [ var domain = [
'|', ['state', '=', 'onboard'], "|",
'&', ['checkout', '=', current_date], ["state", "=", "onboard"],
['state', '!=', 'cancel'] "&",
["checkout", "=", current_date],
["state", "!=", "cancel"],
]; ];
if (self.config_id && self.config.reservation_allowed_propertie_ids) domain.push(['pms_property_id', 'in', self.config.reservation_allowed_propertie_ids]); if (self.config_id && self.config.reservation_allowed_propertie_ids)
domain.push([
"pms_property_id",
"in",
self.config.reservation_allowed_propertie_ids,
]);
return domain; return domain;
}, },
loaded: function(self, reservations) { loaded: function (self, reservations) {
self.reservations = reservations; self.reservations = reservations;
self.db.add_reservations(reservations); self.db.add_reservations(reservations);
}, },
}); });
models.load_models({ models.load_models({
model: 'pms.service', model: "pms.service",
fields: ['name', 'id', 'service_line_ids', 'product_id', 'reservation_id'], fields: ["name", "id", "service_line_ids", "product_id", "reservation_id"],
context: function(self){ context: function (self) {
var ctx_copy = session.user_context var ctx_copy = session.user_context;
ctx_copy['pos_user_force'] = true; ctx_copy.pos_user_force = true;
return ctx_copy; return ctx_copy;
}, },
domain: function(self){ domain: function (self) {
return [['reservation_id', 'in', self.reservations.map(x => x.id)]]; return [["reservation_id", "in", self.reservations.map((x) => x.id)]];
}, },
loaded: function (self, services){ loaded: function (self, services) {
self.services = services; self.services = services;
var services = [] var services = [];
_.each(self.reservations, function(reservation){ _.each(self.reservations, function (reservation) {
services = []; services = [];
_.each(reservation.service_ids, function(service_id){ _.each(reservation.service_ids, function (service_id) {
services.push(self.services.find(x => x.id === service_id)); services.push(self.services.find((x) => x.id === service_id));
}); });
reservation.service_ids = services; reservation.service_ids = services;
}); });
@@ -339,24 +410,33 @@ odoo.define('pos_pms_link.models', function (require) {
}); });
models.load_models({ models.load_models({
model: 'pms.service.line', model: "pms.service.line",
fields: ['date', 'service_id', 'id', 'product_id', 'day_qty', 'pos_order_line_ids'], fields: [
context: function(self){ "date",
var ctx_copy = session.user_context "service_id",
ctx_copy['pos_user_force'] = true; "id",
"product_id",
"day_qty",
"pos_order_line_ids",
],
context: function (self) {
var ctx_copy = session.user_context;
ctx_copy.pos_user_force = true;
return ctx_copy; return ctx_copy;
}, },
domain: function(self){ domain: function (self) {
return [['service_id', 'in', self.services.map(x => x.id)]]; return [["service_id", "in", self.services.map((x) => x.id)]];
}, },
loaded: function (self, service_lines){ loaded: function (self, service_lines) {
self.service_lines = service_lines; self.service_lines = service_lines;
var service_lines = [] var service_lines = [];
_.each(self.reservations, function(reservation){ _.each(self.reservations, function (reservation) {
_.each(reservation.service_ids, function(service_id){ _.each(reservation.service_ids, function (service_id) {
service_lines = []; service_lines = [];
_.each(service_id.service_line_ids, function(line_id){ _.each(service_id.service_line_ids, function (line_id) {
service_lines.push(self.service_lines.find(x => x.id === line_id)); service_lines.push(
self.service_lines.find((x) => x.id === line_id)
);
}); });
service_id.service_line_ids = service_lines; service_id.service_line_ids = service_lines;
}); });
@@ -365,25 +445,27 @@ odoo.define('pos_pms_link.models', function (require) {
}); });
models.load_models({ models.load_models({
model: 'pos.order.line', model: "pos.order.line",
fields: ['qty', 'id'], fields: ["qty", "id"],
domain: function(self){ domain: function (self) {
var order_line_ids = []; var order_line_ids = [];
_.each(self.service_lines, function(service_line) { _.each(self.service_lines, function (service_line) {
if(service_line.pos_order_line_ids.length > 0) { if (service_line.pos_order_line_ids.length > 0) {
_.each(service_line.pos_order_line_ids, function(line_id) { _.each(service_line.pos_order_line_ids, function (line_id) {
order_line_ids.push(line_id); order_line_ids.push(line_id);
}) });
} }
}); });
return [['id', 'in', order_line_ids]]; return [["id", "in", order_line_ids]];
}, },
loaded: function (self, pos_order_lines){ loaded: function (self, pos_order_lines) {
self.pos_order_lines = pos_order_lines; self.pos_order_lines = pos_order_lines;
_.each(self.service_lines, function(service_line){ _.each(self.service_lines, function (service_line) {
var order_lines = [] var order_lines = [];
_.each(service_line.pos_order_line_ids, function(order_line){ _.each(service_line.pos_order_line_ids, function (order_line) {
order_lines.push(self.pos_order_lines.find(x => x.id === order_line)); order_lines.push(
self.pos_order_lines.find((x) => x.id === order_line)
);
}); });
service_line.pos_order_line_ids = order_lines; service_line.pos_order_line_ids = order_lines;
}); });
@@ -405,5 +487,4 @@ odoo.define('pos_pms_link.models', function (require) {
}; };
return true; return true;
}); });
}); });

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve"> <templates id="template" xml:space="preserve">
<t t-name="ReservationSelectionButton" owl="1"> <t t-name="ReservationSelectionButton" owl="1">

View File

@@ -1,10 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve"> <templates id="template" xml:space="preserve">
<t t-name="pos_pms_link.PaymentScreen" t-inherit="point_of_sale.PaymentScreen" t-inherit-mode="extension" owl="1"> <t
t-name="pos_pms_link.PaymentScreen"
t-inherit="point_of_sale.PaymentScreen"
t-inherit-mode="extension"
owl="1"
>
<xpath expr="//div[hasclass('paymentmethods')]" position="inside"> <xpath expr="//div[hasclass('paymentmethods')]" position="inside">
<div class="button paymentmethod"> <div class="button paymentmethod">
<div class="payment-name" t-if="env.pos.config.pay_on_reservation and currentOrder.paymentlines.length == 0" t-on-click="selectReservation">Reservation</div> <div
class="payment-name"
t-if="env.pos.config.pay_on_reservation and currentOrder.paymentlines.length == 0"
t-on-click="selectReservation"
>Reservation</div>
</div> </div>
</xpath> </xpath>
</t> </t>

View File

@@ -1,13 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve"> <templates id="template" xml:space="preserve">
<t t-name="OrderReceipt" t-inherit="point_of_sale.OrderReceipt" t-inherit-mode="extension" owl="1"> <t
t-name="OrderReceipt"
t-inherit="point_of_sale.OrderReceipt"
t-inherit-mode="extension"
owl="1"
>
<xpath expr="//div[hasclass('before-footer')]" position="before"> <xpath expr="//div[hasclass('before-footer')]" position="before">
<t t-if="paid_on_reservation"> <t t-if="paid_on_reservation">
<br/><br/> <br /><br />
<div> <div>
Signature: <br/><br/> Signature: <br /><br />
<span t-esc="reservation_name" style="font-size: 100%;"/><br/> <span t-esc="reservation_name" style="font-size: 100%;" /><br />
------------------- -------------------
</div> </div>
</t> </t>

View File

@@ -1,17 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve"> <templates id="template" xml:space="preserve">
<t t-name="ReservationDetailsEdit" owl="1"> <t t-name="ReservationDetailsEdit" owl="1">
<section class="client-details edit"> <section class="client-details edit">
<h3 class="detail client-name" t-esc="props.reservation.name"/> <h3 class="detail client-name" t-esc="props.reservation.name" />
<div class="client-details-box clearfix"> <div class="client-details-box clearfix">
<div class="client-details-row"> <div class="client-details-row">
Name: <span class="detail client-partner-name" t-esc="props.reservation.partner_name"/><br/> Name: <span
Checkin: <span class="detail client-aduls" t-esc="props.reservation.checkin"/><br/> class="detail client-partner-name"
Checkout: <span class="detail client-aduls" t-esc="props.reservation.checkout"/><br/> t-esc="props.reservation.partner_name"
Adults: <span class="detail client-aduls" t-esc="props.reservation.adults"/><br/> /><br />
Children: <span class="detail client-children" t-esc="props.reservation.children"/><br/> Checkin: <span
Internal comment: <span class="detail client-aduls" t-esc="props.reservation.folio_internal_comment"/><br/> class="detail client-aduls"
t-esc="props.reservation.checkin"
/><br />
Checkout: <span
class="detail client-aduls"
t-esc="props.reservation.checkout"
/><br />
Adults: <span
class="detail client-aduls"
t-esc="props.reservation.adults"
/><br />
Children: <span
class="detail client-children"
t-esc="props.reservation.children"
/><br />
Internal comment: <span
class="detail client-aduls"
t-esc="props.reservation.folio_internal_comment"
/><br />
</div> </div>
<h3 class="detail client-name">Services:</h3> <h3 class="detail client-name">Services:</h3>
<div class="client-details-row"> <div class="client-details-row">
@@ -23,14 +41,28 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<t t-foreach="props.reservation.service_ids" t-as="service" t-key="service.id"> <t
t-foreach="props.reservation.service_ids"
t-as="service"
t-key="service.id"
>
<tr> <tr>
<td t-esc="service_value['name']"/> <td t-esc="service_value['name']" />
<td> <td>
<ul> <ul>
<t t-foreach="service_value['service_line_ids']" t-as="line_service" t-key="line_service.id"> <t
t-foreach="service_value['service_line_ids']"
t-as="line_service"
t-key="line_service.id"
>
<li> <li>
<span t-esc="line_service_value['date']"/> - <span t-esc="line_service_value['product_id'][1]"/> - <span t-esc="line_service_value['day_qty']"/> <span
t-esc="line_service_value['date']"
/> - <span
t-esc="line_service_value['product_id'][1]"
/> - <span
t-esc="line_service_value['day_qty']"
/>
</li> </li>
</t> </t>
</ul> </ul>

View File

@@ -1,13 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve"> <templates id="template" xml:space="preserve">
<t t-name="ReservationLine" owl="1"> <t t-name="ReservationLine" owl="1">
<tr t-attf-class="client-line {{highlight}}" t-att-data-id="props.reservation.id" <tr
t-on-click="trigger('click-reservation', {reservation: props.reservation})"> t-attf-class="client-line {{highlight}}"
t-att-data-id="props.reservation.id"
t-on-click="trigger('click-reservation', {reservation: props.reservation})"
>
<td> <td>
<t t-esc="props.reservation.name" /> <t t-esc="props.reservation.name" />
<span t-if="highlight"> <span t-if="highlight">
<br/><button class="edit-client-button" t-on-click.stop="trigger('click-edit')">VIEW</button> <br /><button
class="edit-client-button"
t-on-click.stop="trigger('click-edit')"
>VIEW</button>
</span> </span>
</td> </td>
<td> <td>

View File

@@ -1,43 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve"> <templates id="template" xml:space="preserve">
<t t-name="ReservationListScreen" owl="1"> <t t-name="ReservationListScreen" owl="1">
<div class="clientlist-screen screen" t-on-activate-edit-mode="activateEditMode"> <div
class="clientlist-screen screen"
t-on-activate-edit-mode="activateEditMode"
>
<div class="screen-content"> <div class="screen-content">
<div class="top-content"> <div class="top-content">
<div t-if="isNextButtonVisible" t-on-click="clickNext" <div
class="button next highlight"> t-if="isNextButtonVisible"
t-on-click="clickNext"
class="button next highlight"
>
<t t-if="!env.isMobile"> <t t-if="!env.isMobile">
<t t-esc="nextButton.text" /> <t t-esc="nextButton.text" />
</t> </t>
<t t-else=""> <t t-else="">
<i t-if="nextButton.command === 'deselect'" class="fa fa-trash"></i> <i
<i t-if="nextButton.command === 'set'" class="fa fa-check"></i> t-if="nextButton.command === 'deselect'"
class="fa fa-trash"
/>
<i
t-if="nextButton.command === 'set'"
class="fa fa-check"
/>
</t> </t>
</div> </div>
<div class="button back" t-on-click="back"> <div class="button back" t-on-click="back">
<t t-if="!env.isMobile">Discard</t> <t t-if="!env.isMobile">Discard</t>
<t t-else=""> <t t-else="">
<i class="fa fa-undo"></i> <i class="fa fa-undo" />
</t> </t>
</div> </div>
<div t-if="!state.detailIsShown" class="searchbox-client top-content-center"> <div
<input placeholder="Search Reservations" size="1" t-on-keyup="updateReservationList" /> t-if="!state.detailIsShown"
<span class="search-clear-client"></span> class="searchbox-client top-content-center"
>
<input
placeholder="Search Reservations"
size="1"
t-on-keyup="updateReservationList"
/>
<span class="search-clear-client" />
</div> </div>
</div> </div>
<section class="full-content"> <section class="full-content">
<div class="client-window"> <div class="client-window">
<section class="subwindow collapsed"> <section class="subwindow collapsed">
<div class="subwindow-container collapsed"> <div class="subwindow-container collapsed">
<div t-if="state.detailIsShown" class="client-details-contents subwindow-container-fix"> <div
<ReservationDetailsEdit t-props="state.editModeProps" t-on-cancel-edit="cancelEdit"/> t-if="state.detailIsShown"
class="client-details-contents subwindow-container-fix"
>
<ReservationDetailsEdit
t-props="state.editModeProps"
t-on-cancel-edit="cancelEdit"
/>
</div> </div>
</div> </div>
</section> </section>
<section class="subwindow list"> <section class="subwindow list">
<div class="subwindow-container"> <div class="subwindow-container">
<div t-if="!state.detailIsShown" class="subwindow-container-fix scrollable-y"> <div
t-if="!state.detailIsShown"
class="subwindow-container-fix scrollable-y"
>
<table class="client-list"> <table class="client-list">
<thead> <thead>
<tr> <tr>
@@ -51,12 +79,17 @@
</tr> </tr>
</thead> </thead>
<tbody class="client-list-contents"> <tbody class="client-list-contents">
<t t-foreach="reservations" t-as="reservation" <t
t-key="reservation.id"> t-foreach="reservations"
<ReservationLine reservation="reservation" t-as="reservation"
t-key="reservation.id"
>
<ReservationLine
reservation="reservation"
selectedReservation="state.selectedReservation" selectedReservation="state.selectedReservation"
detailIsShown="state.detailIsShown" detailIsShown="state.detailIsShown"
t-on-click-reservation="clickReservation" /> t-on-click-reservation="clickReservation"
/>
</t> </t>
</tbody> </tbody>
</table> </table>

View File

@@ -1,16 +1,34 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<template id="assets" name="pos_pms_link assets" inherit_id="point_of_sale.assets"> <template id="assets" name="pos_pms_link assets" inherit_id="point_of_sale.assets">
<xpath expr="." position="inside"> <xpath expr="." position="inside">
<script type="text/javascript" src="/pos_pms_link/static/src/js/db.js"></script> <script type="text/javascript" src="/pos_pms_link/static/src/js/db.js" />
<script type="text/javascript" src="/pos_pms_link/static/src/js/models.js"></script> <script type="text/javascript" src="/pos_pms_link/static/src/js/models.js" />
<script type="text/javascript" src="/pos_pms_link/static/src/js/ReservationSelectionButton.js"></script> <script
<script type="text/javascript" src="/pos_pms_link/static/src/js/Screens/ReservationListScreen/ReservationDetailsEdit.js"></script> type="text/javascript"
<script type="text/javascript" src="/pos_pms_link/static/src/js/Screens/ReservationListScreen/ReservationLine.js"></script> src="/pos_pms_link/static/src/js/ReservationSelectionButton.js"
<script type="text/javascript" src="/pos_pms_link/static/src/js/Screens/ReservationListScreen/ReservationListScreen.js"></script> />
<script type="text/javascript" src="/pos_pms_link/static/src/js/Screens/PaymentScreen/PaymentScreen.js"></script> <script
<script type="text/javascript" src="/pos_pms_link/static/src/js/Screens/ReceiptScreen/OrderReceipt.js"></script> type="text/javascript"
src="/pos_pms_link/static/src/js/Screens/ReservationListScreen/ReservationDetailsEdit.js"
/>
<script
type="text/javascript"
src="/pos_pms_link/static/src/js/Screens/ReservationListScreen/ReservationLine.js"
/>
<script
type="text/javascript"
src="/pos_pms_link/static/src/js/Screens/ReservationListScreen/ReservationListScreen.js"
/>
<script
type="text/javascript"
src="/pos_pms_link/static/src/js/Screens/PaymentScreen/PaymentScreen.js"
/>
<script
type="text/javascript"
src="/pos_pms_link/static/src/js/Screens/ReceiptScreen/OrderReceipt.js"
/>
</xpath> </xpath>
</template> </template>

View File

@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<record id="pms_service_line_view_tree" model="ir.ui.view"> <record id="pms_service_line_view_tree" model="ir.ui.view">
<field name="name">inherit.pms.service.line.view.tree</field> <field name="name">inherit.pms.service.line.view.tree</field>
<field name="model">pms.service.line</field> <field name="model">pms.service.line</field>
<field name="inherit_id" ref="pms.pms_service_line_view_tree"/> <field name="inherit_id" ref="pms.pms_service_line_view_tree" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='price_day_total']" position="after"> <xpath expr="//field[@name='price_day_total']" position="after">
<field name="pos_order_line_ids" widget="many2many_tags"/> <field name="pos_order_line_ids" widget="many2many_tags" />
</xpath> </xpath>
</field> </field>
</record> </record>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<!-- pos.config --> <!-- pos.config -->
@@ -6,28 +6,34 @@
<record id="pos_config_view_form" model="ir.ui.view"> <record id="pos_config_view_form" model="ir.ui.view">
<field name="name">pos.config.form.view</field> <field name="name">pos.config.form.view</field>
<field name="model">pos.config</field> <field name="model">pos.config</field>
<field name="inherit_id" ref="point_of_sale.pos_config_view_form"/> <field name="inherit_id" ref="point_of_sale.pos_config_view_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//div[@id='category_reference']" position="before"> <xpath expr="//div[@id='category_reference']" position="before">
<div class="col-12 col-lg-6 o_setting_box"> <div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane"> <div class="o_setting_left_pane">
<field name="pay_on_reservation"/> <field name="pay_on_reservation" />
</div> </div>
<div class="o_setting_right_pane" attrs="{'invisible': [('pay_on_reservation', '=', False)]}"> <div
<label for="pay_on_reservation"/> class="o_setting_right_pane"
attrs="{'invisible': [('pay_on_reservation', '=', False)]}"
>
<label for="pay_on_reservation" />
<div class="text-muted"> <div class="text-muted">
Allow pay on reservations Allow pay on reservations
</div> </div>
<div class="content-group mt16"> <div class="content-group mt16">
<field name="pay_on_reservation_method_id"/> <field name="pay_on_reservation_method_id" />
</div> </div>
<label for="pay_on_reservation"/> <label for="pay_on_reservation" />
<div class="text-muted"> <div class="text-muted">
Allowed properties Allowed properties
</div> </div>
<div class="content-group mt16"> <div class="content-group mt16">
<field name="reservation_allowed_propertie_ids" widget="many2many_tags"/> <field
name="reservation_allowed_propertie_ids"
widget="many2many_tags"
/>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,13 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<record id="view_pos_pos_form" model="ir.ui.view"> <record id="view_pos_pos_form" model="ir.ui.view">
<field name="name">inherit.view.pos.pos.form</field> <field name="name">inherit.view.pos.pos.form</field>
<field name="model">pos.order</field> <field name="model">pos.order</field>
<field name="inherit_id" ref="point_of_sale.view_pos_pos_form"/> <field name="inherit_id" ref="point_of_sale.view_pos_pos_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//page[@name='products']//field[@name='price_subtotal_incl']" position="after"> <xpath
<field name="pms_service_line_id"/> expr="//page[@name='products']//field[@name='price_subtotal_incl']"
position="after"
>
<field name="pms_service_line_id" />
</xpath> </xpath>
</field> </field>
</record> </record>