From 0d3ae3cc179df5b7fb5195d887e982473e0d73cb Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Thu, 21 Feb 2019 10:12:39 +0100 Subject: [PATCH] Initial input --- .gitignore | 2 + css/app.css | 65 + css/calendar.css | 91 + css/creorga.css | 267 + css/creorga.epic.css | 8814 +++++++++++++++++ css/style.css | 0 img/creorga.png | Bin 0 -> 25613 bytes img/dks_1000.png | Bin 0 -> 68554 bytes index.html | 54 + js/app.js | 75 + js/creorga.js | 434 + js/database.js | 86 + js/lang/summernote-fr-FR.js | 144 + js/lang/summernote-fr-FR.min.js | 2 + js/locale/datatable_de.json | 23 + js/locale/datatable_fr.json | 22 + js/moduleglobal.js | 26 + js/old/data.js | 54 + js/old/database.js | 324 + js/old/encrypt.js | 200 + js/old/init.js | 59 + js/old/license.js | 142 + js/old/navigation.js | 61 + js/old/preferences.js | 168 + js/old/sync.js | 0 js/old/system.js | 421 + js/old/tools.js | 189 + js/preferences.js | 144 + js/webdatabase.js | 80 + js/webpreferences.js | 144 + main.js | 83 + modules/accounting/accounting.html | 192 + modules/accounting/accounting.xul | 26 + modules/accounting/accountingchild.html | 189 + modules/accounting/accountingopeninvoice.html | 154 + modules/accounting/accountingyear.html | 69 + modules/accounting/checkservice.html | 110 + modules/accounting/img/accounting.png | Bin 0 -> 1141 bytes modules/accounting/js/accounting.js | 740 ++ modules/accounting/js/accountingchild.js | 633 ++ .../accounting/js/accountingopeninvoice.js | 284 + modules/accounting/js/accountingyear.js | 501 + modules/accounting/js/checkservice.js | 137 + modules/calendar/calactivity.html | 483 + modules/calendar/calchilds.html | 96 + modules/calendar/calendar.xul | 15 + modules/calendar/calglobal.html | 200 + modules/calendar/callunch.html | 125 + modules/calendar/calvacancy.html | 205 + modules/calendar/img/calendar.png | Bin 0 -> 915 bytes modules/calendar/js/calactivity.js | 1133 +++ modules/calendar/js/calchilds.js | 904 ++ modules/calendar/js/calglobal.js | 326 + modules/calendar/js/callunch.js | 216 + modules/calendar/js/calvacancy.js | 685 ++ modules/calendar/js/nlp.js | 1042 ++ modules/calendar/js/rrule.js | 2278 +++++ modules/childs/child.html | 803 ++ modules/childs/child.js | 939 ++ modules/childs/filters.js | 51 + modules/childs/index.html | 51 + modules/childs/index.js | 163 + modules/creche/creche.html | 753 ++ modules/creche/creche.js | 510 + modules/dashboard/index.html | 50 + modules/dashboard/index.js | 17 + modules/forms/forms.html | 106 + modules/forms/forms.xul | 8 + modules/forms/img/doc.png | Bin 0 -> 761 bytes modules/forms/img/form.png | Bin 0 -> 333 bytes modules/forms/js/forms.js | 93 + modules/logbook/img/logbook.png | Bin 0 -> 466 bytes modules/logbook/js/logactivity.js | 326 + modules/logbook/js/logactivity_basic.js | 282 + modules/logbook/js/logchild.js | 359 + modules/logbook/js/logcominterne.js | 328 + modules/logbook/js/logcominterne_basic.js | 296 + modules/logbook/js/logstaff.js | 1 + modules/logbook/logactivity.html | 165 + modules/logbook/logactivity_basic.html | 125 + modules/logbook/logbook.xul | 19 + modules/logbook/logbook_basic.xul | 18 + modules/logbook/logchild.html | 126 + modules/logbook/logcominterne.html | 165 + modules/logbook/logcominterne_basic.html | 163 + modules/logbook/logstaff.html | 0 modules/presences/dailypresences.html | 174 + modules/presences/img/presence.png | Bin 0 -> 804 bytes modules/presences/js/dailypresences.js | 400 + modules/presences/js/weeklypresences.js | 464 + modules/presences/presences.xul | 19 + modules/presences/weeklypresences.html | 173 + modules/reports/css/print.css | 138 + modules/reports/dlg/dlgpdfviewer.xul | 42 + modules/reports/dlg/dlgprint.xul | 164 + modules/reports/img/logoprint.png | Bin 0 -> 8121 bytes modules/reports/img/print.png | Bin 0 -> 559 bytes modules/reports/img/save.png | Bin 0 -> 597 bytes modules/reports/img/settings.png | Bin 0 -> 796 bytes modules/reports/js/print.js | 64 + modules/reports/js/print_book.js | 41 + modules/reports/js/print_calendar.js | 35 + modules/reports/js/print_child.js | 155 + modules/reports/js/print_loaddata.js | 67 + modules/reports/js/print_logchild.js | 45 + modules/reports/js/print_multilist.js | 75 + modules/reports/js/print_table.js | 92 + modules/reports/js/printpdf.js | 85 + modules/reports/js/printutils.js | 41 + modules/reports/print_book.html | 43 + modules/reports/print_calendar.html | 53 + modules/reports/print_child.html | 134 + modules/reports/print_list.html | 69 + modules/reports/print_logchild.html | 44 + modules/reports/print_multilist.html | 63 + modules/reports/print_table.html | 45 + modules/reports/reports.xul | 10 + modules/settings/db.html | 85 + modules/settings/dbconfig.js | 7 + modules/settings/index.html | 67 + modules/settings/index.js | 7 + modules/settings/js/multisite_reader.js | 58 + modules/settings/multisite.xul | 16 + modules/settings/support/js/multisite.js | 385 + modules/settings/support/js/update.js | 58 + modules/settings/support/multisite.html | 272 + modules/settings/support/support.xul | 12 + modules/settings/support/update.html | 47 + modules/staff/coworker.html | 610 ++ modules/staff/coworker_basic.html | 332 + modules/staff/img/staff.png | Bin 0 -> 597 bytes modules/staff/js/coworker.js | 1150 +++ modules/staff/js/coworker_basic.js | 827 ++ modules/staff/js/staff.js | 120 + modules/staff/js/staff_basic.js | 122 + modules/staff/staff.html | 69 + modules/staff/staff.xul | 8 + modules/staff/staff_basic.html | 77 + modules/staff/staff_basic.xul | 8 + modules/waitlist/waitlist.html | 130 + modules/waitlist/waitlist.js | 206 + package-lock.json | 1261 +++ package.json | 22 + 143 files changed, 37525 insertions(+) create mode 100644 .gitignore create mode 100644 css/app.css create mode 100644 css/calendar.css create mode 100644 css/creorga.css create mode 100644 css/creorga.epic.css create mode 100644 css/style.css create mode 100644 img/creorga.png create mode 100644 img/dks_1000.png create mode 100644 index.html create mode 100644 js/app.js create mode 100644 js/creorga.js create mode 100644 js/database.js create mode 100644 js/lang/summernote-fr-FR.js create mode 100644 js/lang/summernote-fr-FR.min.js create mode 100644 js/locale/datatable_de.json create mode 100644 js/locale/datatable_fr.json create mode 100644 js/moduleglobal.js create mode 100644 js/old/data.js create mode 100644 js/old/database.js create mode 100644 js/old/encrypt.js create mode 100644 js/old/init.js create mode 100644 js/old/license.js create mode 100644 js/old/navigation.js create mode 100644 js/old/preferences.js create mode 100644 js/old/sync.js create mode 100644 js/old/system.js create mode 100644 js/old/tools.js create mode 100644 js/preferences.js create mode 100644 js/webdatabase.js create mode 100644 js/webpreferences.js create mode 100644 main.js create mode 100644 modules/accounting/accounting.html create mode 100644 modules/accounting/accounting.xul create mode 100644 modules/accounting/accountingchild.html create mode 100644 modules/accounting/accountingopeninvoice.html create mode 100644 modules/accounting/accountingyear.html create mode 100644 modules/accounting/checkservice.html create mode 100644 modules/accounting/img/accounting.png create mode 100644 modules/accounting/js/accounting.js create mode 100644 modules/accounting/js/accountingchild.js create mode 100644 modules/accounting/js/accountingopeninvoice.js create mode 100644 modules/accounting/js/accountingyear.js create mode 100644 modules/accounting/js/checkservice.js create mode 100644 modules/calendar/calactivity.html create mode 100644 modules/calendar/calchilds.html create mode 100644 modules/calendar/calendar.xul create mode 100644 modules/calendar/calglobal.html create mode 100644 modules/calendar/callunch.html create mode 100644 modules/calendar/calvacancy.html create mode 100644 modules/calendar/img/calendar.png create mode 100644 modules/calendar/js/calactivity.js create mode 100644 modules/calendar/js/calchilds.js create mode 100644 modules/calendar/js/calglobal.js create mode 100644 modules/calendar/js/callunch.js create mode 100644 modules/calendar/js/calvacancy.js create mode 100644 modules/calendar/js/nlp.js create mode 100644 modules/calendar/js/rrule.js create mode 100644 modules/childs/child.html create mode 100644 modules/childs/child.js create mode 100644 modules/childs/filters.js create mode 100644 modules/childs/index.html create mode 100644 modules/childs/index.js create mode 100644 modules/creche/creche.html create mode 100644 modules/creche/creche.js create mode 100644 modules/dashboard/index.html create mode 100644 modules/dashboard/index.js create mode 100644 modules/forms/forms.html create mode 100644 modules/forms/forms.xul create mode 100644 modules/forms/img/doc.png create mode 100644 modules/forms/img/form.png create mode 100644 modules/forms/js/forms.js create mode 100644 modules/logbook/img/logbook.png create mode 100644 modules/logbook/js/logactivity.js create mode 100644 modules/logbook/js/logactivity_basic.js create mode 100644 modules/logbook/js/logchild.js create mode 100644 modules/logbook/js/logcominterne.js create mode 100644 modules/logbook/js/logcominterne_basic.js create mode 100644 modules/logbook/js/logstaff.js create mode 100644 modules/logbook/logactivity.html create mode 100644 modules/logbook/logactivity_basic.html create mode 100644 modules/logbook/logbook.xul create mode 100644 modules/logbook/logbook_basic.xul create mode 100644 modules/logbook/logchild.html create mode 100644 modules/logbook/logcominterne.html create mode 100644 modules/logbook/logcominterne_basic.html create mode 100644 modules/logbook/logstaff.html create mode 100644 modules/presences/dailypresences.html create mode 100644 modules/presences/img/presence.png create mode 100644 modules/presences/js/dailypresences.js create mode 100644 modules/presences/js/weeklypresences.js create mode 100644 modules/presences/presences.xul create mode 100644 modules/presences/weeklypresences.html create mode 100644 modules/reports/css/print.css create mode 100644 modules/reports/dlg/dlgpdfviewer.xul create mode 100644 modules/reports/dlg/dlgprint.xul create mode 100644 modules/reports/img/logoprint.png create mode 100644 modules/reports/img/print.png create mode 100644 modules/reports/img/save.png create mode 100644 modules/reports/img/settings.png create mode 100644 modules/reports/js/print.js create mode 100644 modules/reports/js/print_book.js create mode 100644 modules/reports/js/print_calendar.js create mode 100644 modules/reports/js/print_child.js create mode 100644 modules/reports/js/print_loaddata.js create mode 100644 modules/reports/js/print_logchild.js create mode 100644 modules/reports/js/print_multilist.js create mode 100644 modules/reports/js/print_table.js create mode 100644 modules/reports/js/printpdf.js create mode 100644 modules/reports/js/printutils.js create mode 100644 modules/reports/print_book.html create mode 100644 modules/reports/print_calendar.html create mode 100644 modules/reports/print_child.html create mode 100644 modules/reports/print_list.html create mode 100644 modules/reports/print_logchild.html create mode 100644 modules/reports/print_multilist.html create mode 100644 modules/reports/print_table.html create mode 100644 modules/reports/reports.xul create mode 100644 modules/settings/db.html create mode 100644 modules/settings/dbconfig.js create mode 100644 modules/settings/index.html create mode 100644 modules/settings/index.js create mode 100644 modules/settings/js/multisite_reader.js create mode 100644 modules/settings/multisite.xul create mode 100644 modules/settings/support/js/multisite.js create mode 100644 modules/settings/support/js/update.js create mode 100644 modules/settings/support/multisite.html create mode 100644 modules/settings/support/support.xul create mode 100644 modules/settings/support/update.html create mode 100644 modules/staff/coworker.html create mode 100644 modules/staff/coworker_basic.html create mode 100644 modules/staff/img/staff.png create mode 100644 modules/staff/js/coworker.js create mode 100644 modules/staff/js/coworker_basic.js create mode 100644 modules/staff/js/staff.js create mode 100644 modules/staff/js/staff_basic.js create mode 100644 modules/staff/staff.html create mode 100644 modules/staff/staff.xul create mode 100644 modules/staff/staff_basic.html create mode 100644 modules/staff/staff_basic.xul create mode 100644 modules/waitlist/waitlist.html create mode 100644 modules/waitlist/waitlist.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2709666 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules/* +.vscode/* diff --git a/css/app.css b/css/app.css new file mode 100644 index 0000000..d9b25df --- /dev/null +++ b/css/app.css @@ -0,0 +1,65 @@ +body { + overflow-x: hidden; + overflow-y: hidden; + } + + #sidebar-wrapper { + min-height: 97vh; + margin-left: -15rem; + -webkit-transition: margin .25s ease-out; + -moz-transition: margin .25s ease-out; + -o-transition: margin .25s ease-out; + transition: margin .25s ease-out; + } + + #sidebar-wrapper .sidebar-heading { + padding: 5px; + font-size: 15px; + font-weight: bold; + color: #fff; + text-align: center; + } + + #sidebar-wrapper .list-group { + width: 160px; + } + + #page-content-wrapper { + min-width: 100vw; + } + + #wrapper.toggled #sidebar-wrapper { + margin-left: 0; + } + + @media (min-width: 768px) { + #sidebar-wrapper { + margin-left: 0; + } + + #page-content-wrapper { + min-width: 0; + width: 100%; + } + + #wrapper.toggled #sidebar-wrapper { + margin-left: -15rem; + } + } +select.form-control { + -webkit-appearance: none; + -webkit-border-radius: 0px; + background-image: url("data:image/svg+xml;utf8,"); + background-position: 100% 50%; + background-repeat: no-repeat; +} + +input.right { + text-align: right; +} +.table-hover tbody tr:hover { + background-color: rgb(58,89,177); + color: #fff; + + +} \ No newline at end of file diff --git a/css/calendar.css b/css/calendar.css new file mode 100644 index 0000000..fa7115e --- /dev/null +++ b/css/calendar.css @@ -0,0 +1,91 @@ +.panel-day { + width: 100%; + padding: 0px; + margin: 0px; +} + +.panel-dayhead { + padding: 3px; + width: 100%; + text-align: right; + border-bottom: 1px solid lightgrey; +} + +.panel-dayheadcurrent { + font-weight: bold; +} + +.panel-dayweekend{ + background-color: #d1d1d1; +} + +.panel-dayother { + background-color: #969696; +} + + + +.panel-daybody { + height: 10.5vh; + max-height: 10.5vh; + overflow-y: auto; + padding: 3px; +} + +.calevent { + display: block; + width: 100%; + border: 1px solid black; + /*border-radius: 5px;*/ + cursor: pointer; +} + +.calactivity { + display: inline-block; + margin: 2px; + padding: 3px; + border: 1px solid black; + /*border-radius: 5px;*/ + cursor: pointer; + mix-blend-mode: screen; +} +table#cal_month > tbody > tr > td { + width: calc(100vw/7); + max-width: calc(100vw/7); + padding: 0px; + margin: 0px; +} + +.tdweek { + background-color: #d1d1d1; +} + +.calvacrange { + background-color: #FF9C2A !important; + /*color: #fff !important;*/ +} + +.calvacancy { + background-color: #FF7145 !important; +} + +.calvacheader { + text-align: left; + max-width: 80%; + float: left; + overflow: hidden; + white-space: nowrap; +} + +.noprint2 { + width: 50px; + min-width: 50px; +} + +@media print { + .noprint2 { + display: none; + } + +} + diff --git a/css/creorga.css b/css/creorga.css new file mode 100644 index 0000000..410c780 --- /dev/null +++ b/css/creorga.css @@ -0,0 +1,267 @@ +html,body { + /*padding-top: 60px; + padding-bottom: 40px;*/ + /*background-color: #f5f5f5;*/ + background-color: #fff; + -moz-user-select: none; + /*padding-top: 50px;*/ + } + +.pagehead { + font-size: 18px; + font-weight: bold; +} +.main { + padding: 0px; +} +@media (min-width: 768px) { + .main { + padding: 0px; + padding-right: 10px; + padding-left: 10px; + } +} +.main .page-header { + margin-top: 0; +} + +.action1btn { + min-width: 50px; +} + +.infoweek { + width: 320px; +} + +.modal .modal-body { + max-height: 420px; + overflow-y: auto; +} +/*.btn-primary { + margin-bottom: 10px; +}*/ + + +/*.table-hover tbody tr:hover td { + background-color: #FCF8E3; +} */ + +/*@media (min-width: 768px) { + .main { + padding-right: 40px; + padding-left: 40px; + } +}*/ +.main .page-header { + margin-top: 0; +} + +/* hides the spin-button for firefox */ +input[type=number] { + -moz-appearance: textfield; +} +/* hides the spin-button for chrome*/ +/*input[type=number]::-webkit-outer-spin-button, +input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +}*/ + +.checkbox { + margin-left: 30px; + padding-top: 0px; +} + +.field { + margin-bottom: 5px; + } + .field label { + float: left; + width: 160px; + + text-align: right; + padding-right: 10px; + margin: 5px 0px 5px 0px; + } + .field input { + width: 300px; + margin: 0px; + } + + .field textarea { + width: 300px; + margin: 0px; + } + + .field button { + margin: 0px; + } +.date { + width: 145px; +} +.month , .week { + width: 180px; +} +.number { + width: 145px; +} +.time { + width: 120px; +} +.hidden { + visibility: hidden; +} + +input[type="date"]:disabled, input[type="text"]:disabled { + background-color: #fff; +} { + background-color: #fff; +} +.tab-pane { + margin-top: 20px; +} + +select { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + font-size: 14px; + height: 34px; + line-height: 1.42857; + padding: 6px 12px; +} + + +.table td.align-right { + text-align: right; +} + +.alignright{ + text-align: right; +} + +.alignleft { + text-align: left; +} + +.aligntop { + vertical-align: top; +} + +.weekwidth { + width: 60px; +} + +.totalwidth { + width: 90px; +} + +.modal.modal-wide .modal-dialog { + width: 90%; +} +.modal-wide .modal-body { + overflow-y: auto; +} + +#print-head { + display: none; +} + +#print-foot { + display: none; +} + +.colhidden { + display: none; + max-width: 0px; +} + +.btn-default:hover { + background: #90c8f6; +} + +.summernote, .note-editable, .panel-body { + -moz-user-select: text; +} +.input-group-addon { + background-color: #337ab7; + border-color: #2e6da4; + color: #fff; +} + +.modal-header { + background-color: #4F4F4F; + color: #fff; +} + +.modal-footer { + background-color: #4F4F4F; +} + +.timepicker { + max-width: 65px; +} + +.warning { + background-color: orange; +} + +/*.note-editor .note-dropzone { opacity: 0 !important; }*/ + +.btn-absent2 { + color: #fff; + background-color: #d96f4f; + border-color: #ac2925; +} +.btn-absent2:focus, +.btn-absent2.focus { + color: #fff; + background-color: #d96f4f; + border-color: #761c19; +} +.btn-absent2:hover { + color: #fff; + background-color: #d96f4f; + border-color: #ac2925; +} +.btn-absent2:active, +.btn-absent2.active, +.open > .dropdown-toggle.btn-absent2 { + color: #fff; + background-color: #d96f4f; + border-color: #ac2925; +} +.btn-absent2:active:hover, +.btn-absent2.active:hover, +.open > .dropdown-toggle.btn-absent2:hover, +.btn-absent2:active:focus, +.btn-absent2.active:focus, +.open > .dropdown-toggle.btn-absent2:focus, +.btn-absent2:active.focus, +.btn-absent2.active.focus, +.open > .dropdown-toggle.btn-absent2.focus { + color: #fff; + background-color: #d96f4f; + border-color: #761c19; +} +.btn-absent2:active, +.btn-absent2.active, +.open > .dropdown-toggle.btn-absent2 { + background-image: none; +} +.btn-absent2.disabled:hover, +.btn-absent2[disabled]:hover, +fieldset[disabled] .btn-absent2:hover, +.btn-absent2.disabled:focus, +.btn-absent2[disabled]:focus, +fieldset[disabled] .btn-absent2:focus, +.btn-absent2.disabled.focus, +.btn-absent2[disabled].focus, +fieldset[disabled] .btn-absent2.focus { + background-color: #d96f4f; + border-color: #ac2925; +} +.btn-absent2 .badge { + color: #d96f4f; + background-color: #fff; +} \ No newline at end of file diff --git a/css/creorga.epic.css b/css/creorga.epic.css new file mode 100644 index 0000000..42ce262 --- /dev/null +++ b/css/creorga.epic.css @@ -0,0 +1,8814 @@ +/*----Fonts----*/ + +@import url('https://fonts.googleapis.com/css?family=Roboto'); + + +/*----Bootstrap----*/ + +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #5a5758; + --secondary: #cccccc; + --success: #22b24c; + --info: #1c9af7; + --warning: #f7aa1c; + --danger: #fc3434; + --light: #dddddd; + --dark: #77a518; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #dee2e6; + } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6; + } +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; +} + +@-ms-viewport { + width: device-width; +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 0.81rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #5a5758; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:hover { + color: #333132; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 200; + line-height: 1.1; + color: inherit; +} + +h1, .h1 { + font-size: 1.5rem; +} + +h2, .h2 { + font-size: 1.25rem; +} + +h3, .h3 { + font-size: 1.4175rem; +} + +h4, .h4 { + font-size: 1.215rem; +} + +h5, .h5 { + font-size: 1.0125rem; +} + +h6, .h6 { + font-size: 0.81rem; +} + +.lead { + font-size: 1.0125rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.1; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.1; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.1; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.1; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: 400; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.0125rem; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; +} + +.blockquote-footer::before { + content: "\2014 \00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #6c757d; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + font-size: 87.5%; + color: #212529; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + -ms-flex-order: -1; + order: -1; +} + +.order-last { + -ms-flex-order: 13; + order: 13; +} + +.order-0 { + -ms-flex-order: 0; + order: 0; +} + +.order-1 { + -ms-flex-order: 1; + order: 1; +} + +.order-2 { + -ms-flex-order: 2; + order: 2; +} + +.order-3 { + -ms-flex-order: 3; + order: 3; +} + +.order-4 { + -ms-flex-order: 4; + order: 4; +} + +.order-5 { + -ms-flex-order: 5; + order: 5; +} + +.order-6 { + -ms-flex-order: 6; + order: 6; +} + +.order-7 { + -ms-flex-order: 7; + order: 7; +} + +.order-8 { + -ms-flex-order: 8; + order: 8; +} + +.order-9 { + -ms-flex-order: 9; + order: 9; +} + +.order-10 { + -ms-flex-order: 10; + order: 10; +} + +.order-11 { + -ms-flex-order: 11; + order: 11; +} + +.order-12 { + -ms-flex-order: 12; + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + margin-bottom: 1rem; + background-color: transparent; +} + +.table th, +.table td { + padding: 0.5rem; + vertical-align: top; + border-top: 1px solid #dee2e6; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; +} + +.table tbody + tbody { + border-top: 2px solid #dee2e6; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #dee2e6; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #dee2e6; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-borderless th, +.table-borderless td, +.table-borderless thead th, +.table-borderless tbody + tbody { + border: 0; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #d1d0d0; +} + +.table-hover .table-primary:hover { + background-color: #c4c3c3; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #c4c3c3; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #f1f1f1; +} + +.table-hover .table-secondary:hover { + background-color: #e4e4e4; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #e4e4e4; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #c1e9cd; +} + +.table-hover .table-success:hover { + background-color: #aee2be; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #aee2be; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #bfe3fd; +} + +.table-hover .table-info:hover { + background-color: #a6d8fc; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #a6d8fc; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #fde7bf; +} + +.table-hover .table-warning:hover { + background-color: #fcdea6; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #fcdea6; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #fec6c6; +} + +.table-hover .table-danger:hover { + background-color: #feadad; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #feadad; +} + +.table-light, +.table-light > th, +.table-light > td { + background-color: whitesmoke; +} + +.table-hover .table-light:hover { + background-color: #e8e8e8; +} + +.table-hover .table-light:hover > td, +.table-hover .table-light:hover > th { + background-color: #e8e8e8; +} + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #d9e6be; +} + +.table-hover .table-dark:hover { + background-color: #cedfac; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #cedfac; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table .thead-dark th { + color: #fff; + background-color: #212529; + border-color: #32383e; +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.table-dark { + color: #fff; + background-color: #212529; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #32383e; +} + +.table-dark.table-bordered { + border: 0; +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} + +.table-dark.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-sm > .table-bordered { + border: 0; + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-md > .table-bordered { + border: 0; + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-lg > .table-bordered { + border: 0; + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-xl > .table-bordered { + border: 0; + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; +} + +.table-responsive > .table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + height: calc(1.965rem + 2px); + padding: 0.375rem 0.38rem; + font-size: 0.81rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #9a9798; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(90, 87, 88, 0.25); +} + +.form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; + width: 100%; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.0125rem; + line-height: 1.5; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.70875rem; + line-height: 1.5; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + height: calc(1.563125rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.70875rem; + line-height: 1.5; +} + +.form-control-lg { + height: calc(2.51875rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.0125rem; + line-height: 1.5; +} + +select.form-control[size], select.form-control[multiple] { + height: auto; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} + +.form-row > .col, +.form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; +} + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; +} + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; +} + +.form-check-input:disabled ~ .form-check-label { + color: #6c757d; +} + +.form-check-label { + margin-bottom: 0; +} + +.form-check-inline { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #22b24c; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.70875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(34, 178, 76, 0.9); +} + +.was-validated .form-control:valid, .form-control.is-valid, .was-validated +.custom-select:valid, +.custom-select.is-valid { + border-color: #22b24c; +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated +.custom-select:valid:focus, +.custom-select.is-valid:focus { + border-color: #22b24c; + box-shadow: 0 0 0 0.2rem rgba(34, 178, 76, 0.25); +} + +.was-validated .form-control:valid ~ .valid-feedback, +.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, +.form-control.is-valid ~ .valid-tooltip, .was-validated +.custom-select:valid ~ .valid-feedback, +.was-validated +.custom-select:valid ~ .valid-tooltip, +.custom-select.is-valid ~ .valid-feedback, +.custom-select.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control-file:valid ~ .valid-feedback, +.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, +.form-control-file.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #22b24c; +} + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #22b24c; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + background-color: #70e492; +} + +.was-validated .custom-control-input:valid ~ .valid-feedback, +.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, +.custom-control-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + background-color: #30d761; +} + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(34, 178, 76, 0.25); +} + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #22b24c; +} + +.was-validated .custom-file-input:valid ~ .custom-file-label::after, .custom-file-input.is-valid ~ .custom-file-label::after { + border-color: inherit; +} + +.was-validated .custom-file-input:valid ~ .valid-feedback, +.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, +.custom-file-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(34, 178, 76, 0.25); +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #fc3434; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.70875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(252, 52, 52, 0.9); +} + +.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated +.custom-select:invalid, +.custom-select.is-invalid { + border-color: #fc3434; +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated +.custom-select:invalid:focus, +.custom-select.is-invalid:focus { + border-color: #fc3434; + box-shadow: 0 0 0 0.2rem rgba(252, 52, 52, 0.25); +} + +.was-validated .form-control:invalid ~ .invalid-feedback, +.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, +.form-control.is-invalid ~ .invalid-tooltip, .was-validated +.custom-select:invalid ~ .invalid-feedback, +.was-validated +.custom-select:invalid ~ .invalid-tooltip, +.custom-select.is-invalid ~ .invalid-feedback, +.custom-select.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control-file:invalid ~ .invalid-feedback, +.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, +.form-control-file.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #fc3434; +} + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #fc3434; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + background-color: #feb2b2; +} + +.was-validated .custom-control-input:invalid ~ .invalid-feedback, +.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, +.custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + background-color: #fd6666; +} + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(252, 52, 52, 0.25); +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #fc3434; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label::after, .custom-file-input.is-invalid ~ .custom-file-label::after { + border-color: inherit; +} + +.was-validated .custom-file-input:invalid ~ .invalid-feedback, +.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, +.custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(252, 52, 52, 0.25); +} + +.form-inline { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: 0.375rem 1rem; + font-size: 0.81rem; + line-height: 1.5; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} + +.btn:hover, .btn:focus { + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(90, 87, 88, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.65; +} + +.btn:not(:disabled):not(.disabled) { + cursor: pointer; +} + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #5a5758; + border-color: #5a5758; +} + +.btn-primary:hover { + color: #fff; + background-color: #474445; + border-color: #403e3f; +} + +.btn-primary:focus, .btn-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(90, 87, 88, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #5a5758; + border-color: #5a5758; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #403e3f; + border-color: #3a3838; +} + +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(90, 87, 88, 0.5); +} + +.btn-secondary { + color: #212529; + background-color: #cccccc; + border-color: #cccccc; +} + +.btn-secondary:hover { + color: #212529; + background-color: #b9b9b9; + border-color: #b3b3b3; +} + +.btn-secondary:focus, .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(204, 204, 204, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #212529; + background-color: #cccccc; + border-color: #cccccc; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #212529; + background-color: #b3b3b3; + border-color: #acacac; +} + +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(204, 204, 204, 0.5); +} + +.btn-success { + color: #fff; + background-color: #22b24c; + border-color: #22b24c; +} + +.btn-success:hover { + color: #fff; + background-color: #1c923e; + border-color: #1a873a; +} + +.btn-success:focus, .btn-success.focus { + box-shadow: 0 0 0 0.2rem rgba(34, 178, 76, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #22b24c; + border-color: #22b24c; +} + +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1a873a; + border-color: #187c35; +} + +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(34, 178, 76, 0.5); +} + +.btn-info { + color: #fff; + background-color: #1c9af7; + border-color: #1c9af7; +} + +.btn-info:hover { + color: #fff; + background-color: #0887e5; + border-color: #0880d8; +} + +.btn-info:focus, .btn-info.focus { + box-shadow: 0 0 0 0.2rem rgba(28, 154, 247, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #1c9af7; + border-color: #1c9af7; +} + +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #0880d8; + border-color: #0778cc; +} + +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(28, 154, 247, 0.5); +} + +.btn-warning { + color: #212529; + background-color: #f7aa1c; + border-color: #f7aa1c; +} + +.btn-warning:hover { + color: #212529; + background-color: #e59708; + border-color: #d88f08; +} + +.btn-warning:focus, .btn-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(247, 170, 28, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #f7aa1c; + border-color: #f7aa1c; +} + +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, +.show > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #d88f08; + border-color: #cc8707; +} + +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(247, 170, 28, 0.5); +} + +.btn-danger { + color: #fff; + background-color: #fc3434; + border-color: #fc3434; +} + +.btn-danger:hover { + color: #fff; + background-color: #fb0e0e; + border-color: #f90404; +} + +.btn-danger:focus, .btn-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(252, 52, 52, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #fc3434; + border-color: #fc3434; +} + +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #f90404; + border-color: #ed0303; +} + +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(252, 52, 52, 0.5); +} + +.btn-light { + color: #212529; + background-color: #dddddd; + border-color: #dddddd; +} + +.btn-light:hover { + color: #212529; + background-color: #cacaca; + border-color: #c4c4c4; +} + +.btn-light:focus, .btn-light.focus { + box-shadow: 0 0 0 0.2rem rgba(221, 221, 221, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #dddddd; + border-color: #dddddd; +} + +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, +.show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #c4c4c4; + border-color: #bdbdbd; +} + +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(221, 221, 221, 0.5); +} + +.btn-dark { + color: #fff; + background-color: #77a518; + border-color: #77a518; +} + +.btn-dark:hover { + color: #fff; + background-color: #5f8413; + border-color: #577812; +} + +.btn-dark:focus, .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(119, 165, 24, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #77a518; + border-color: #77a518; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #577812; + border-color: #4f6d10; +} + +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(119, 165, 24, 0.5); +} + +.btn-outline-primary { + color: #5a5758; + background-color: transparent; + background-image: none; + border-color: #5a5758; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #5a5758; + border-color: #5a5758; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(90, 87, 88, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #5a5758; + background-color: transparent; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #5a5758; + border-color: #5a5758; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(90, 87, 88, 0.5); +} + +.btn-outline-secondary { + color: #cccccc; + background-color: transparent; + background-image: none; + border-color: #cccccc; +} + +.btn-outline-secondary:hover { + color: #212529; + background-color: #cccccc; + border-color: #cccccc; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(204, 204, 204, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #cccccc; + background-color: transparent; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #212529; + background-color: #cccccc; + border-color: #cccccc; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(204, 204, 204, 0.5); +} + +.btn-outline-success { + color: #22b24c; + background-color: transparent; + background-image: none; + border-color: #22b24c; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #22b24c; + border-color: #22b24c; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(34, 178, 76, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #22b24c; + background-color: transparent; +} + +.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #22b24c; + border-color: #22b24c; +} + +.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(34, 178, 76, 0.5); +} + +.btn-outline-info { + color: #1c9af7; + background-color: transparent; + background-image: none; + border-color: #1c9af7; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #1c9af7; + border-color: #1c9af7; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(28, 154, 247, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #1c9af7; + background-color: transparent; +} + +.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, +.show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #1c9af7; + border-color: #1c9af7; +} + +.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(28, 154, 247, 0.5); +} + +.btn-outline-warning { + color: #f7aa1c; + background-color: transparent; + background-image: none; + border-color: #f7aa1c; +} + +.btn-outline-warning:hover { + color: #212529; + background-color: #f7aa1c; + border-color: #f7aa1c; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(247, 170, 28, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #f7aa1c; + background-color: transparent; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, +.show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #f7aa1c; + border-color: #f7aa1c; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(247, 170, 28, 0.5); +} + +.btn-outline-danger { + color: #fc3434; + background-color: transparent; + background-image: none; + border-color: #fc3434; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #fc3434; + border-color: #fc3434; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(252, 52, 52, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #fc3434; + background-color: transparent; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #fc3434; + border-color: #fc3434; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(252, 52, 52, 0.5); +} + +.btn-outline-light { + color: #dddddd; + background-color: transparent; + background-image: none; + border-color: #dddddd; +} + +.btn-outline-light:hover { + color: #212529; + background-color: #dddddd; + border-color: #dddddd; +} + +.btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(221, 221, 221, 0.5); +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #dddddd; + background-color: transparent; +} + +.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, +.show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #dddddd; + border-color: #dddddd; +} + +.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(221, 221, 221, 0.5); +} + +.btn-outline-dark { + color: #77a518; + background-color: transparent; + background-image: none; + border-color: #77a518; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #77a518; + border-color: #77a518; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(119, 165, 24, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #77a518; + background-color: transparent; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, +.show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #77a518; + border-color: #77a518; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(119, 165, 24, 0.5); +} + +.btn-link { + font-weight: 400; + color: #5a5758; + background-color: transparent; +} + +.btn-link:hover { + color: #333132; + text-decoration: underline; + background-color: transparent; + border-color: transparent; +} + +.btn-link:focus, .btn-link.focus { + text-decoration: underline; + border-color: transparent; + box-shadow: none; +} + +.btn-link:disabled, .btn-link.disabled { + color: #6c757d; + pointer-events: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.0125rem; + line-height: 1.5; + border-radius: 0; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.70875rem; + line-height: 1.5; + border-radius: 0; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + transition: opacity 0.15s linear; +} + +@media screen and (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} + +.dropup, +.dropright, +.dropdown, +.dropleft { + position: relative; +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 0.81rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} + +.dropup .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.dropright .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-toggle::after { + vertical-align: 0; +} + +.dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.dropleft .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.dropleft .dropdown-toggle::after { + display: none; +} + +.dropleft .dropdown-toggle::before { + display: inline-block; + width: 0; + height: 0; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #5a5758; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.70875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 1; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group, +.btn-group-vertical .btn + .btn, +.btn-group-vertical .btn + .btn-group, +.btn-group-vertical .btn-group + .btn, +.btn-group-vertical .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropright .dropdown-toggle-split::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center; +} + +.btn-group-vertical .btn, +.btn-group-vertical .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; +} + +.btn-group-toggle > .btn input[type="radio"], +.btn-group-toggle > .btn input[type="checkbox"], +.btn-group-toggle > .btn-group > .btn input[type="radio"], +.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .custom-select, +.input-group > .custom-file { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} + +.input-group > .form-control + .form-control, +.input-group > .form-control + .custom-select, +.input-group > .form-control + .custom-file, +.input-group > .custom-select + .form-control, +.input-group > .custom-select + .custom-select, +.input-group > .custom-select + .custom-file, +.input-group > .custom-file + .form-control, +.input-group > .custom-file + .custom-select, +.input-group > .custom-file + .custom-file { + margin-left: -1px; +} + +.input-group > .form-control:focus, +.input-group > .custom-select:focus, +.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; +} + +.input-group > .custom-file .custom-file-input:focus { + z-index: 4; +} + +.input-group > .custom-file { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; +} + +.input-group-prepend, +.input-group-append { + display: -ms-flexbox; + display: flex; +} + +.input-group-prepend .btn, +.input-group-append .btn { + position: relative; + z-index: 2; +} + +.input-group-prepend .btn + .btn, +.input-group-prepend .btn + .input-group-text, +.input-group-prepend .input-group-text + .input-group-text, +.input-group-prepend .input-group-text + .btn, +.input-group-append .btn + .btn, +.input-group-append .btn + .input-group-text, +.input-group-append .input-group-text + .input-group-text, +.input-group-append .input-group-text + .btn { + margin-left: -1px; +} + +.input-group-prepend { + margin-right: -1px; +} + +.input-group-append { + margin-left: -1px; +} + +.input-group-text { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.375rem 0.38rem; + margin-bottom: 0; + font-size: 0.81rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; +} + +.input-group-text input[type="radio"], +.input-group-text input[type="checkbox"] { + margin-top: 0; +} + +.input-group-lg > .form-control, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + height: calc(2.51875rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.0125rem; + line-height: 1.5; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + height: calc(1.563125rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.70875rem; + line-height: 1.5; +} + +.custom-control { + position: relative; + display: block; + min-height: 1.215rem; + padding-left: 1.5rem; +} + +.custom-control-inline { + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + background-color: #5a5758; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(90, 87, 88, 0.25); +} + +.custom-control-input:active ~ .custom-control-label::before { + color: #fff; + background-color: #b3b0b1; +} + +.custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; +} + +.custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; +} + +.custom-control-label { + position: relative; + margin-bottom: 0; +} + +.custom-control-label::before { + position: absolute; + top: 0.1075rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #dee2e6; +} + +.custom-control-label::after { + position: absolute; + top: 0.1075rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50%; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { + background-color: #5a5758; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + background-color: #5a5758; +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(90, 87, 88, 0.5); +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(90, 87, 88, 0.5); +} + +.custom-radio .custom-control-label::before { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::before { + background-color: #5a5758; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); +} + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(90, 87, 88, 0.5); +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(1.965rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + background-size: 8px 10px; + border: 1px solid #ced4da; + border-radius: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #9a9798; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(154, 151, 152, 0.5); +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; +} + +.custom-select::-ms-expand { + opacity: 0; +} + +.custom-select-sm { + height: calc(1.563125rem + 2px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; +} + +.custom-select-lg { + height: calc(2.51875rem + 2px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 125%; +} + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(1.965rem + 2px); + margin-bottom: 0; +} + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(1.965rem + 2px); + margin: 0; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #9a9798; + box-shadow: 0 0 0 0.2rem rgba(90, 87, 88, 0.25); +} + +.custom-file-input:focus ~ .custom-file-label::after { + border-color: #9a9798; +} + +.custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; +} + +.custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; +} + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(1.965rem + 2px); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: 1.965rem; + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: 1px solid #ced4da; +} + +.custom-range { + width: 100%; + padding-left: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-range:focus { + outline: none; +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(90, 87, 88, 0.25); +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(90, 87, 88, 0.25); +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(90, 87, 88, 0.25); +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #5a5758; + border: 0; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + transition: none; + } +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #b3b0b1; +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #5a5758; + border: 0; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + transition: none; + } +} + +.custom-range::-moz-range-thumb:active { + background-color: #b3b0b1; +} + +.custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; +} + +.custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #5a5758; + border: 0; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + transition: none; + } +} + +.custom-range::-ms-thumb:active { + background-color: #b3b0b1; +} + +.custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; +} + +.custom-range::-ms-fill-lower { + background-color: #dee2e6; +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none; + } +} + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #5a5758; +} + +.nav-fill .nav-item { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; +} + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0rem 0rem; +} + +.navbar > .container, +.navbar > .container-fluid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.navbar-brand { + display: inline-block; + padding-top: 0.348125rem; + padding-bottom: 0.348125rem; + margin-right: 0rem; + font-size: 1.0125rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} + +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.0125rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; +} + +.navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; +} + +.navbar-toggler:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} + +.navbar-expand { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; +} + +.navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; +} + +.navbar-expand .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; +} + +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand { + color: #000; +} + +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: #000; +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: #000; +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: #000; +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-text a { + color: #000; +} + +.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: #000; +} + +.navbar-dark .navbar-brand { + color: #fff; +} + +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-text a { + color: #fff; +} + +.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.card > hr { + margin-right: 0; + margin-left: 0; +} + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 8px; +} + +.card-subtitle { + margin-top: -4px; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card-header { + padding: 8px 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header + .list-group .list-group-item:first-child { + border-top: 0; +} + +.card-footer { + padding: 8px 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -8px; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img { + width: 100%; +} + +.card-img-top { + width: 100%; +} + +.card-img-bottom { + width: 100%; +} + +.card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-deck .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-deck { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } +} + +.card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-group > .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-group { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group > .card { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } +} + +.card-columns .card { + margin-bottom: 8px; +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.accordion .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; +} + +.accordion .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; +} + +.accordion .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.breadcrumb { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 0.5rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #5a5758; + background-color: #fff; + border: 1px solid #EB6864; +} + +.page-link:hover { + z-index: 2; + color: #fff; + text-decoration: none; + background-color: #EB6864; + border-color: #dee2e6; +} + +.page-link:focus { + z-index: 2; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(90, 87, 88, 0.25); +} + +.page-link:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.page-item:first-child .page-link { + margin-left: 0; +} + +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #5a5758; + border-color: #5a5758; +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.0125rem; + line-height: 1.5; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.70875rem; + line-height: 1.5; +} + +.badge { + display: inline-block; + padding: 0.25rem 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; +} + +.badge-primary { + color: #fff; + background-color: #5a5758; +} + +.badge-primary[href]:hover, .badge-primary[href]:focus { + color: #fff; + text-decoration: none; + background-color: #403e3f; +} + +.badge-secondary { + color: #212529; + background-color: #cccccc; +} + +.badge-secondary[href]:hover, .badge-secondary[href]:focus { + color: #212529; + text-decoration: none; + background-color: #b3b3b3; +} + +.badge-success { + color: #fff; + background-color: #22b24c; +} + +.badge-success[href]:hover, .badge-success[href]:focus { + color: #fff; + text-decoration: none; + background-color: #1a873a; +} + +.badge-info { + color: #fff; + background-color: #1c9af7; +} + +.badge-info[href]:hover, .badge-info[href]:focus { + color: #fff; + text-decoration: none; + background-color: #0880d8; +} + +.badge-warning { + color: #212529; + background-color: #f7aa1c; +} + +.badge-warning[href]:hover, .badge-warning[href]:focus { + color: #212529; + text-decoration: none; + background-color: #d88f08; +} + +.badge-danger { + color: #fff; + background-color: #fc3434; +} + +.badge-danger[href]:hover, .badge-danger[href]:focus { + color: #fff; + text-decoration: none; + background-color: #f90404; +} + +.badge-light { + color: #212529; + background-color: #dddddd; +} + +.badge-light[href]:hover, .badge-light[href]:focus { + color: #212529; + text-decoration: none; + background-color: #c4c4c4; +} + +.badge-dark { + color: #fff; + background-color: #77a518; +} + +.badge-dark[href]:hover, .badge-dark[href]:focus { + color: #fff; + text-decoration: none; + background-color: #577812; +} + +.jumbotron { + padding: 1.44rem 0.72rem; + margin-bottom: 1.44rem; + background-color: #e9ecef; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 2.88rem 1.44rem; + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; +} + +.alert { + position: relative; + padding: 0.5rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 3.715rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.5rem 1.25rem; + color: inherit; +} + +.alert-primary { + color: #2f2d2e; + background-color: #deddde; + border-color: #d1d0d0; +} + +.alert-primary hr { + border-top-color: #c4c3c3; +} + +.alert-primary .alert-link { + color: #151415; +} + +.alert-secondary { + color: #6a6a6a; + background-color: whitesmoke; + border-color: #f1f1f1; +} + +.alert-secondary hr { + border-top-color: #e4e4e4; +} + +.alert-secondary .alert-link { + color: #515151; +} + +.alert-success { + color: #125d28; + background-color: #d3f0db; + border-color: #c1e9cd; +} + +.alert-success hr { + border-top-color: #aee2be; +} + +.alert-success .alert-link { + color: #0a3216; +} + +.alert-info { + color: #0f5080; + background-color: #d2ebfd; + border-color: #bfe3fd; +} + +.alert-info hr { + border-top-color: #a6d8fc; +} + +.alert-info .alert-link { + color: #0a3352; +} + +.alert-warning { + color: #80580f; + background-color: #fdeed2; + border-color: #fde7bf; +} + +.alert-warning hr { + border-top-color: #fcdea6; +} + +.alert-warning .alert-link { + color: #52390a; +} + +.alert-danger { + color: #831b1b; + background-color: #fed6d6; + border-color: #fec6c6; +} + +.alert-danger hr { + border-top-color: #feadad; +} + +.alert-danger .alert-link { + color: #591212; +} + +.alert-light { + color: #737373; + background-color: #f8f8f8; + border-color: whitesmoke; +} + +.alert-light hr { + border-top-color: #e8e8e8; +} + +.alert-light .alert-link { + color: #5a5a5a; +} + +.alert-dark { + color: #3e560c; + background-color: #e4edd1; + border-color: #d9e6be; +} + +.alert-dark hr { + border-top-color: #cedfac; +} + +.alert-dark .alert-link { + color: #1e2906; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.6075rem; + background-color: #e9ecef; +} + +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #5a5758; + transition: width 0.6s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; +} + +.media-body { + -ms-flex: 1; + flex: 1; +} + +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.5rem 0.5rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:last-child { + margin-bottom: 0; +} + +.list-group-item:hover, .list-group-item:focus { + z-index: 1; + text-decoration: none; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #5a5758; + border-color: #5a5758; +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; +} + +.list-group-item-primary { + color: #2f2d2e; + background-color: #d1d0d0; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #2f2d2e; + background-color: #c4c3c3; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #2f2d2e; + border-color: #2f2d2e; +} + +.list-group-item-secondary { + color: #6a6a6a; + background-color: #f1f1f1; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #6a6a6a; + background-color: #e4e4e4; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #6a6a6a; + border-color: #6a6a6a; +} + +.list-group-item-success { + color: #125d28; + background-color: #c1e9cd; +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #125d28; + background-color: #aee2be; +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #125d28; + border-color: #125d28; +} + +.list-group-item-info { + color: #0f5080; + background-color: #bfe3fd; +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #0f5080; + background-color: #a6d8fc; +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0f5080; + border-color: #0f5080; +} + +.list-group-item-warning { + color: #80580f; + background-color: #fde7bf; +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #80580f; + background-color: #fcdea6; +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #80580f; + border-color: #80580f; +} + +.list-group-item-danger { + color: #831b1b; + background-color: #fec6c6; +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #831b1b; + background-color: #feadad; +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #831b1b; + border-color: #831b1b; +} + +.list-group-item-light { + color: #737373; + background-color: whitesmoke; +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #737373; + background-color: #e8e8e8; +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #737373; + border-color: #737373; +} + +.list-group-item-dark { + color: #3e560c; + background-color: #d9e6be; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #3e560c; + background-color: #cedfac; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #3e560c; + border-color: #3e560c; +} + +.close { + float: right; + font-size: 1.215rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + color: #000; + text-decoration: none; + opacity: .75; +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +.modal.fade .modal-dialog { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -25%); + transform: translate(0, -25%); +} + +@media screen and (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} + +.modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog-centered { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - (0.5rem * 2)); +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - (0.5rem * 2)); + content: ""; +} + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem; + border-bottom: 1px solid #e9ecef; +} + +.modal-header .close { + padding: 1rem; + margin: -1rem -1rem -1rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid #e9ecef; +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem; +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-centered { + min-height: calc(100% - (1.75rem * 2)); + } + .modal-dialog-centered::before { + height: calc(100vh - (1.75rem * 2)); + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + max-width: 800px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.70875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} + +.tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; +} + +.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; +} + +.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.70875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); +} + +.popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; +} + +.popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; +} + +.bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { + bottom: calc((0.5rem + 1px) * -1); +} + +.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, +.bs-popover-top .arrow::after, +.bs-popover-auto[x-placement^="top"] .arrow::after { + border-width: 0.5rem 0.5rem 0; +} + +.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { + bottom: 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + + +.bs-popover-top .arrow::after, +.bs-popover-auto[x-placement^="top"] .arrow::after { + bottom: 1px; + border-top-color: #fff; +} + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; +} + +.bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { + left: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, +.bs-popover-right .arrow::after, +.bs-popover-auto[x-placement^="right"] .arrow::after { + border-width: 0.5rem 0.5rem 0.5rem 0; +} + +.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { + left: 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + + +.bs-popover-right .arrow::after, +.bs-popover-auto[x-placement^="right"] .arrow::after { + left: 1px; + border-right-color: #fff; +} + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; +} + +.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { + top: calc((0.5rem + 1px) * -1); +} + +.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, +.bs-popover-bottom .arrow::after, +.bs-popover-auto[x-placement^="bottom"] .arrow::after { + border-width: 0 0.5rem 0.5rem 0.5rem; +} + +.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { + top: 0; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + + +.bs-popover-bottom .arrow::after, +.bs-popover-auto[x-placement^="bottom"] .arrow::after { + top: 1px; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; +} + +.bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { + right: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, +.bs-popover-left .arrow::after, +.bs-popover-auto[x-placement^="left"] .arrow::after { + border-width: 0.5rem 0 0.5rem 0.5rem; +} + +.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { + right: 0; + border-left-color: rgba(0, 0, 0, 0.25); +} + + +.bs-popover-left .arrow::after, +.bs-popover-auto[x-placement^="left"] .arrow::after { + right: 1px; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 0.81rem; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 0.5rem 0.75rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-item { + position: relative; + display: none; + -ms-flex-align: center; + align-items: center; + width: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; + transition: -webkit-transform 0.6s ease; + transition: transform 0.6s ease; + transition: transform 0.6s ease, -webkit-transform 0.6s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .carousel-item.active, + .carousel-item-next, + .carousel-item-prev { + transition: none; + } +} + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0; +} + +.carousel-item-next.carousel-item-left, +.carousel-item-prev.carousel-item-right { + -webkit-transform: translateX(0); + transform: translateX(0); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-item-next, +.active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.carousel-item-prev, +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-duration: .6s; + transition-property: opacity; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + opacity: 0; +} + +.carousel-fade .carousel-item-next, +.carousel-fade .carousel-item-prev, +.carousel-fade .carousel-item.active, +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-prev { + -webkit-transform: translateX(0); + transform: translateX(0); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-fade .carousel-item-next, + .carousel-fade .carousel-item-prev, + .carousel-fade .carousel-item.active, + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-prev { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: rgba(255, 255, 255, 0.5); +} + +.carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-primary { + background-color: #5a5758 !important; +} + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #403e3f !important; +} + +.bg-secondary { + background-color: #cccccc !important; +} + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #b3b3b3 !important; +} + +.bg-success { + background-color: #22b24c !important; +} + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #1a873a !important; +} + +.bg-info { + background-color: #1c9af7 !important; +} + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #0880d8 !important; +} + +.bg-warning { + background-color: #f7aa1c !important; +} + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #d88f08 !important; +} + +.bg-danger { + background-color: #fc3434 !important; +} + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #f90404 !important; +} + +.bg-light { + background-color: #dddddd !important; +} + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #c4c4c4 !important; +} + +.bg-dark { + background-color: #77a518 !important; +} + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #577812 !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #dee2e6 !important; +} + +.border-top { + border-top: 1px solid #dee2e6 !important; +} + +.border-right { + border-right: 1px solid #dee2e6 !important; +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} + +.border-left { + border-left: 1px solid #dee2e6 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #5a5758 !important; +} + +.border-secondary { + border-color: #cccccc !important; +} + +.border-success { + border-color: #22b24c !important; +} + +.border-info { + border-color: #1c9af7 !important; +} + +.border-warning { + border-color: #f7aa1c !important; +} + +.border-danger { + border-color: #fc3434 !important; +} + +.border-light { + border-color: #dddddd !important; +} + +.border-dark { + border-color: #77a518 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} + +.embed-responsive::before { + display: block; + content: ""; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.embed-responsive-16by9::before { + padding-top: 56.25%; +} + +.embed-responsive-4by3::before { + padding-top: 75%; +} + +.embed-responsive-1by1::before { + padding-top: 100%; +} + +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; +} + +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; +} + +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; +} + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; +} + +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.float-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +@supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.mt-3, +.my-3 { + margin-top: 1rem !important; +} + +.mr-3, +.mx-3 { + margin-right: 1rem !important; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; +} + +.ml-3, +.mx-3 { + margin-left: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; +} + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; +} + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.mt-5, +.my-5 { + margin-top: 3rem !important; +} + +.mr-5, +.mx-5 { + margin-right: 3rem !important; +} + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; +} + +.ml-5, +.mx-5 { + margin-left: 3rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pt-0, +.py-0 { + padding-top: 0 !important; +} + +.pr-0, +.px-0 { + padding-right: 0 !important; +} + +.pb-0, +.py-0 { + padding-bottom: 0 !important; +} + +.pl-0, +.px-0 { + padding-left: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.pt-3, +.py-3 { + padding-top: 1rem !important; +} + +.pr-3, +.px-3 { + padding-right: 1rem !important; +} + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; +} + +.pl-3, +.px-3 { + padding-left: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; +} + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; +} + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.pt-5, +.py-5 { + padding-top: 3rem !important; +} + +.pr-5, +.px-5 { + padding-right: 3rem !important; +} + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; +} + +.pl-5, +.px-5 { + padding-left: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto, +.my-auto { + margin-top: auto !important; +} + +.mr-auto, +.mx-auto { + margin-right: auto !important; +} + +.mb-auto, +.my-auto { + margin-bottom: auto !important; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} + +.text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +.text-justify { + text-align: justify !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-light { + font-weight: 300 !important; +} + +.font-weight-normal { + font-weight: 400 !important; +} + +.font-weight-bold { + font-weight: 700 !important; +} + +.font-italic { + font-style: italic !important; +} + +.text-white { + color: #fff !important; +} + +.text-primary { + color: #5a5758 !important; +} + +a.text-primary:hover, a.text-primary:focus { + color: #403e3f !important; +} + +.text-secondary { + color: #cccccc !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #b3b3b3 !important; +} + +.text-success { + color: #22b24c !important; +} + +a.text-success:hover, a.text-success:focus { + color: #1a873a !important; +} + +.text-info { + color: #1c9af7 !important; +} + +a.text-info:hover, a.text-info:focus { + color: #0880d8 !important; +} + +.text-warning { + color: #f7aa1c !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #d88f08 !important; +} + +.text-danger { + color: #fc3434 !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #f90404 !important; +} + +.text-light { + color: #dddddd !important; +} + +a.text-light:hover, a.text-light:focus { + color: #c4c4c4 !important; +} + +.text-dark { + color: #77a518 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #577812 !important; +} + +.text-body { + color: #212529 !important; +} + +.text-muted { + color: #6c757d !important; +} + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +/*----Custom CSS----*/ + diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..e69de29 diff --git a/img/creorga.png b/img/creorga.png new file mode 100644 index 0000000000000000000000000000000000000000..15689f8d0b5a815cafc6f150be7bed1b0f48cdfa GIT binary patch literal 25613 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 literal 0 HcmV?d00001 diff --git a/img/dks_1000.png b/img/dks_1000.png new file mode 100644 index 0000000000000000000000000000000000000000..87b44eb9a1899d458cb0acb063fc98541ee8ea14 GIT binary patch literal 68554 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 + + + + + + + + + +Creorga + + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000..fdb6710 --- /dev/null +++ b/js/app.js @@ -0,0 +1,75 @@ + +// $("#menu-toggle").click(function(e) { +// e.preventDefault(); +// $("#wrapper").toggleClass("toggled"); +// }); + + +$( document ).ready(function() { + console.log( "Main ready!" ); + userapp.loadmodule("dashboard"); + console.log("After module load!"); +}); +//console.log(navigator); +console.log(location.protocol); +var userapp = { + loadmodule: function(modulename){ + var appdata = []; + if (modulename != 'settings'){ + appdata = userapp.getconfig(); + } + if (!appdata){ + $("#moduleframe").attr("src","modules/settings/index.html"); + return; + } + //var appdata = userapp.getconfig(); + var params = "?"; + for (var i in appdata){ + params += "&" + i +"=" + encodeURIComponent(appdata[i]); + } + console.log("modules/"+modulename+"/index.html"+params); + $("#moduleframe").attr("src","modules/"+modulename+"/index.html"+ params); + }, + loadmodulepage: function(modulename,page,pageparams = null){ + var appdata = userapp.getconfig(); + var params = "?"; + for (var i in appdata){ + params += "&" + i +"=" + encodeURIComponent(appdata[i]); + } + if (pageparams){ + for (var i in pageparams){ + params += "&" + i +"=" + encodeURIComponent(pageparams[i]); + } + } + //console.log("modules/"+modulename+"/index.html"+params); + $("#moduleframe").attr("src","modules/"+modulename+"/"+ page +".html"+ params); + }, + getconfig:function (key=null){ + var ret = {}; + if (!key){ + ret = userpref.getpref("currentglobal"); + // console.log("current global"); + // console.log(ret); + // if (ret == null){ + // $("#moduleframe").attr("src","modules/settings/index.html"); + // } + }else { + ret = userpref.getpref(key); + //{dbfile:"creorga",serviceurl:"http://localhost:6060/"} + } + //var currentdb = userpref.getpref("currentdb"); + + return ret; + } +} + +var userpref ={ + setpref: function(key,datavalue){ + var x = store(key, datavalue); + return x; + }, + getpref: function(key){ + var datavalue = store(key); + return datavalue; + } +} \ No newline at end of file diff --git a/js/creorga.js b/js/creorga.js new file mode 100644 index 0000000..053747c --- /dev/null +++ b/js/creorga.js @@ -0,0 +1,434 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +function check_birthdate_valid(){ + var dx = new Array; + if ($("#childs_birthday").val() == "") { + dx.push("la date de naissance"); + } + if ($("#childs_entrydate").val() == "") { + dx.push("la date d'entrée"); + } + if ($("#childs_leavedate").val() == ""){ + dx.push("la date de sortie"); + } + if (dx.length > 0) { + alert("Vous n'avez pas encore ajouté " + dx.join(", ")+" du enfant.\n"+ ((dx.length > 1)?"Ces dates sont requis":"cette date est requis")+ " pour la planification!"); + return false; + } + + return true; +} + +function daysBetween(first, second) { + + // Copy date parts of the timestamps, discarding the time parts. + var one = new Date(first.getFullYear(), first.getMonth(), first.getDate()); + var two = new Date(second.getFullYear(), second.getMonth(), second.getDate()); + + // Do the math. + var millisecondsPerDay = 1000 * 60 * 60 * 24; + var millisBetween = two.getTime() - one.getTime(); + var days = millisBetween / millisecondsPerDay; + + // Round down. + return Math.floor(days); +} + +function saveonfocusout(objname){ + if (($('#' + objname).attr('type') == "date") && ($('#' + objname).val() != '')){ + if (checkdateformat(objname) == false){ + return false; + } + + if (objname == "childs_entrydate") { + var ed = encodeparam($('#childs_entrydate').val(),'date').replace(/'/g,''); + var bd = encodeparam($('#childs_birthday').val(),'date').replace(/'/g,''); + if (ed < bd) { + errormsg("ERREUR","La date d'entrée ne peut pas être inferieur à la date de naissance!"); + return false; + } + } + if (objname == "childs_leavedate") { + var ed = encodeparam($('#childs_entrydate').val(),'date').replace(/'/g,''); + var ld = encodeparam($('#childs_leavedate').val(),'date').replace(/'/g,''); + if (ld < ed) { + errormsg("ERREUR","La date de sortie ne peut pas être inferieur à la date d'entrée!"); + return false; + } + } + + //if (objname == "childs_birthday") { + // //$("#dt_childs_entrydate").datetimepicker('setStartDate',$('#' + objname).val()); + // //$("#dt_childs_leavedate").datepicker('setStartDate',$('#' + objname).val()); + //} + //if (objname == "childs_entrydate") { + // //$("#dt_childs_leavedate").datepicker('setStartDate',$('#' + objname).val()); + //} + } + if (objname == "staff_password"){ + var pwd = $('#' + objname).val(); + if (pwd.length < 4){ + alert("Le mot de passe est trop court!"); + return false; + } + if(!confirm("Êtes vous sûre de changer le mot de passe?")){ + $('#' + objname).val(""); + return false; + } + } + if (objname == "creche_crechename") { + var num = apppref.getpreference("support.database.currentdb.num"); + var scfg = apppref.getpreference("support.database." + num); + var sitecfg = JSON.parse(scfg); + sitecfg.name=$('#' + objname).val(); + apppref.setpreference("support.database." + num,sitecfg); + globelreq.send_request({page:'updatesiteslist',data:{curname:sitecfg.name}}); + } + + if ((objname) && $('#' + objname).hasClass("dailypresence")){ + return false; + } + if ((objname) && ($('#' + objname).attr('id').indexOf("_") != -1) && $('#' + objname).attr('id').indexOf("chart_") == -1) { + var data = $('#' + objname).attr('id').split("_"); + //dump("OBJNAME: " + objname + "\n"); +// if (objname == "staff_password" ){ +// var dval=MD5($('#' + objname).val()); +// var ty = $('#' + objname).attr('type'); +// var sql = "UPDATE "+data[0]+" SET "+data[1]+"="+encodeparam(dval,ty)+" where '"+$data[4]+"'='"+ data[2] +"';"; +// //dump("SQL PWD:" + sql + "\n"); +// appdb.dbexec(sql); +// } else + if (data.length==2) { + var tagtype = $('#' + objname).attr('type'); + //dump("TAGTYPE: " + tagtype + "\n"); + if ($('#' + objname).prop("tagName") === "TEXTAREA"){ + tagtype = 'richtextarea'; + } + var sql = "UPDATE "+data[0]+" SET "+data[1]+"="+encodeparam($('#' + objname).val(),tagtype)+" where uuid='"+ document.getElementById(data[0] + '_uuid').value +"';"; + //dump("updatesql: " + sql + "\n"); + appdb.dbexec(sql); + }else if (data.length==4) { + var dval=$('#' + objname).val(); + var ty = $('#' + objname).attr('type'); + var sql = "UPDATE "+data[0]+" SET "+data[1]+"="+encodeparam(dval,ty)+" where '"+$data[4]+"'='"+ data[2] +"';"; + appdb.dbexec(sql); + }else { + return false; + } + } + return false; +} + +function encodeparam(string,type){ + if (type == "text") { + if (string == "") { + string = 'null'; + }else { + string = string.replace(//g,'>'); + string = string.replace(/&/g,'&'); + string = string.replace(/"/g,'"'); + string = string.replace(/'/g,"''"); + string = "'"+ string+"'"; + } + } + else if(type == "richtextarea"){ + string = string.replace(/'/g,"''"); + string = "'"+ string+"'"; + } + else if(type == "password"){ + if (string == "") { + string = 'null'; + }else { + //string.replace(',','.'); + string = "'"+ MD5(string)+"'"; + } + + } + else if(type == "date"){ + var re = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/i; + if (!string.match(re)) { + string = 'null'; + }else{ + var dspl=string.split('.'); + string = "'"+dspl[2]+'-'+dspl[1]+'-'+dspl[0]+"'"; + } + } + else if(type == "year"){ + var re = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/i; + if (!string.match(re)) { + string = 'null'; + }else{ + var dspl=string.split('.'); + string = "'"+dspl[2]+"'"; + } + } + else if(type == "number"){ + if (string == "") { + string = 'null'; + }else { + string.replace(',','.'); + string = parseFloat(string); + } + }else if(type == "boolean"){ + if (string == "") { + string = 'null'; + } + string= string.replace('true',"'1'"); + string= string.replace('false',"'0'"); + }else if(type == "month"){ + var re = /^(\d{1,2})\.(\d{4})$/i; + if (!string.match(re)) { + string = 'null'; + }else{ + var dspl=string.split('.'); + string = "'"+dspl[1]+'-'+dspl[0]+"-01'" + } + }else if(type == "file"){ + string = system.getFileName(string); + string = string.replace("'","''",'g'); + string = string = "'"+ string+"'"; + } + else { + if (typeof(string) == "object") { + string = JSON.stringify(string); + } + string = string.replace(//g,'>'); + string = string.replace(/&/g,'&'); + string = string.replace(/'/g,"''"); + string = "'"+ string+"'"; + } + + return string; +} + +function checkdateformat(fieldname){ + var re = null; + var plh = $('#' + fieldname).attr("placeholder"); + var val = $('#' + fieldname).val(); + if (plh == 'dd.mm.yyyy') { + re = /^\d{1,2}\.\d{1,2}\.\d{4}$/; + }else if (plh == 'mm.yyyy') { + re = /^\d{1,2}\.\d{4}$/; + }else { + return true; + } + if (!val.match(re)) { + errormsg("ERREUR format date!","Le format de la date n'est pas correcte!
il doit être " + plh); + return false; + } + return true; +} + + +function errormsg(title,msg){ + $("#errtitle").html(title); + $("#errmsg").html(msg); + $("#dlgerror").modal('show'); +} + +//function sqlerrormsg(sqlquery){ +// //dump("Load Resend:" + sqlquery + "\n"); +// $("#sqlquery").val(sqlquery); +// $("#dlgsqlerror").modal('show'); +//} +// +//function resendsql(){ +// $("#dlgsqlerror").modal('hide'); +// +// //dump("Resend: "+$("#sqlquery").val()+"\n"); +// var r = appdb.dbexec($("#sqlquery").val()); +// if (!r){ +// sqlerrormsg($("#sqlquery").val()); +// }else { +// $("#sqlquery").val(""); +// $("#dlgsqlerror").modal('hide'); +// } +//} + +function loadtextareas(eheight=200){ + + $('.summernote').summernote({ + lang: 'fr-FR', + toolbar: [ + ['style', ['bold', 'italic', 'underline']], + ['font', ['strikethrough', 'superscript', 'subscript']], + ['fontsize', ['fontsize'],['color']], + ['color', ['color']], + ['para', ['ul', 'ol', 'paragraph']], + ['reset',['clear']] + ], + height: eheight, + minHeight: eheight, + maxHeight: eheight, + shortcuts: false, + disableResizeEditor: true, + disableDragAndDrop: true, + callbacks: { + onBlur: function() { + saveonfocusout($(this).attr('id')); + } + } + }); +} + + +function load_helpers(){ + $('input').focusout(function(){ + + if ($(this).attr('type') == 'number') { + //alert('number'); + if ($(this).attr('nullable') && $(this).attr('nullable') === 'false' && $(this).val() === "") { + $(this).val($(this).attr('min')); + } + } + saveonfocusout($(this).attr('id')); + }); + $('input').on("click", function () { + $(this).select(); + }); + $("input[type='number']").on('keypress', function(ev){ + + var keycode = window.event ? ev.keyCode : ev.which; + if (keycode < 48 || keycode > 57){ + if (keycode !== 0 && keycode !== 8 && keycode !== 13 && !ev.ctrlKey && keycode !== 46 && keycode !== 44) { + ev.preventDefault(); + } + } + }); + + + $(".input-group.date input[type='date']").each(function(){ + //dump("init dtp " + this.id + "\n"); + var dateobjid = this.id; + if ($('#' + dateobjid).attr('limits') == '1'){ + $('#' + dateobjid).datetimepicker({ + locale: 'fr', + format: "DD.MM.YYYY", + daysOfWeekDisabled: [0] + }); + } else if ($('#' + dateobjid).attr('widgetpos')){ + $('#' + dateobjid).datetimepicker({ + locale: 'fr', + format: "DD.MM.YYYY", + widgetPositioning:{ + horizontal: 'auto', + vertical: $('#' + dateobjid).attr('widgetpos') + } + }); + + }else { + $('#' + dateobjid).datetimepicker({ + locale: 'fr', + format: "DD.MM.YYYY", + }); + } + + }); + //dump("load month helper\n"); + $(".input-group.month input[type='date']").datetimepicker({ + locale: 'fr', + format: 'MM.YYYY', + viewMode:'months' + }); + //dump("load week helper\n"); + $(".input-group.week input[type='date']").datetimepicker({ + locale: 'fr', + format: "DD.MM.YYYY", + calendarWeeks: true, + daysOfWeekDisabled: [0,2,3,4,5,6], + }); + + // $('.timepicker').timepicker({ + // showSeconds: false, + // showMeridian: false, + // defaultTime: '00:00', + // }); + $('.timepicker').attr("style","width: 70px;"); + + $.fn.dataTableExt.sErrMode='throw'; +} + +function set_infoheader(strinfoheader) { + globelreq.send_request({page:'infoheader',header:strinfoheader}); +} + +var globelreq = { + send_request: function(data, callback) { // analogue of chrome.extension.sendRequest + var request = document.createTextNode(JSON.stringify(data)); + + request.addEventListener("creorga-response", function(event) { + request.parentNode.removeChild(request); + + if (callback) { + var response = JSON.parse(request.nodeValue); + callback(response); + } + }, false); + + document.head.appendChild(request); + + var event = document.createEvent("HTMLEvents"); + event.initEvent("creorga-query", true, false); + request.dispatchEvent(event); + }, + + callback: function(response) { + return alert("response: " + (response ? response.toSource() : response)); + } + } + +$(document).ready(function() { + + initdata(); + $('body').append(''); +// $('body').append(''); +}); + + +function htmlUnescape(str){ + var nstr = str + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/</g, '<') + .replace(/>/g, '>'); + return nstr; +} + +jQuery.fn.exists = function(){ return this.length > 0; } + + diff --git a/js/database.js b/js/database.js new file mode 100644 index 0000000..c94a3c9 --- /dev/null +++ b/js/database.js @@ -0,0 +1,86 @@ +var appdb = { + //dbfile: null, + url: null, + dbquery: function(sQuery){ + var type='querysorted'; + var result= {sqldata:[]}; + //console.log(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery)); + //dump(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n"); + $.ajax({ + encoding:"UTF-8", + url:this.url, + crossDomain: true, + method: "POST", + data: 'type=' + type + '&sql=' +encodeURIComponent(sQuery), + success: function (data){ + //dump(data + "\n"); + result=data.result; + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + return result; + }, + dbqueryarray: function(sQuery){ + var type='queryarray'; + var result= {sqldata:[]}; + //console.log(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery)); + //alert(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n"); + $.ajax({ + encoding:"UTF-8", + url:this.url, + crossDomain: true, + method: "POST", + data: 'type=' + type + '&sql=' +encodeURIComponent(sQuery), + success: function (data){ + result=data.result; + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + return result; + }, + dbexec: function(sQuery){ + var type='exec'; + var result= {sqldata:[]}; + //dump(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n"); + //console.log(this.url + '&db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) ); + $.ajax({ + encoding:"UTF-8", + url:this.url, + crossDomain: true, + method: "POST", + data: 'type=' + type + '&sql=' +encodeURIComponent(sQuery), + success: function (data){ + result=data.result; + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + return result; + }, +// b64EncodeUnicode: function (str) { +// // first we use encodeURIComponent to get percent-encoded UTF-8, +// // then we convert the percent encodings into raw bytes which +// // can be fed into btoa. +// return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, +// function toSolidBytes(match, p1) { +// return String.fromCharCode('0x' + p1); +// })); +// }, + generate_uuid: function(){ + return this.s4() + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' + this.s4() + this.s4() + this.s4(); + }, + s4: function(){ + return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); + } +} \ No newline at end of file diff --git a/js/lang/summernote-fr-FR.js b/js/lang/summernote-fr-FR.js new file mode 100644 index 0000000..5247e7c --- /dev/null +++ b/js/lang/summernote-fr-FR.js @@ -0,0 +1,144 @@ +(function ($) { + $.extend($.summernote.lang, { + 'fr-FR': { + font: { + bold: 'Gras', + italic: 'Italique', + underline: 'Souligné', + clear: 'Effacer la mise en forme', + height: 'Interligne', + name: 'Famille de police', + strikethrough: 'Barré', + superscript: 'Exposant', + subscript: 'Indice', + size: 'Taille de police' + }, + image: { + image: 'Image', + insert: 'Insérer une image', + resizeFull: 'Taille originale', + resizeHalf: 'Redimensionner à 50 %', + resizeQuarter: 'Redimensionner à 25 %', + floatLeft: 'Aligné à gauche', + floatRight: 'Aligné à droite', + floatNone: 'Pas d\'alignement', + shapeRounded: 'Forme: Rectangle arrondie', + shapeCircle: 'Forme: Cercle', + shapeThumbnail: 'Forme: Vignette', + shapeNone: 'Forme: Aucune', + dragImageHere: 'Faites glisser une image ou un texte dans ce cadre', + dropImage: 'Lachez l\'image ou le texte', + selectFromFiles: 'Choisir un fichier', + maximumFileSize: 'Taille de fichier maximale', + maximumFileSizeError: 'Taille maximale du fichier dépassée', + url: 'URL de l\'image', + remove: 'Supprimer l\'image' + }, + video: { + video: 'Vidéo', + videoLink: 'Lien vidéo', + insert: 'Insérer une vidéo', + url: 'URL de la vidéo', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' + }, + link: { + link: 'Lien', + insert: 'Insérer un lien', + unlink: 'Supprimer un lien', + edit: 'Modifier', + textToDisplay: 'Texte à afficher', + url: 'URL du lien', + openInNewWindow: 'Ouvrir dans une nouvelle fenêtre' + }, + table: { + table: 'Tableau' + }, + hr: { + insert: 'Insérer une ligne horizontale' + }, + style: { + style: 'Style', + p: 'Normal', + blockquote: 'Citation', + pre: 'Code source', + h1: 'Titre 1', + h2: 'Titre 2', + h3: 'Titre 3', + h4: 'Titre 4', + h5: 'Titre 5', + h6: 'Titre 6' + }, + lists: { + unordered: 'Liste à puces', + ordered: 'Liste numérotée' + }, + options: { + help: 'Aide', + fullscreen: 'Plein écran', + codeview: 'Afficher le code HTML' + }, + paragraph: { + paragraph: 'Paragraphe', + outdent: 'Diminuer le retrait', + indent: 'Augmenter le retrait', + left: 'Aligner à gauche', + center: 'Centrer', + right: 'Aligner à droite', + justify: 'Justifier' + }, + color: { + recent: 'Dernière couleur sélectionnée', + more: 'Plus de couleurs', + background: 'Couleur de fond', + foreground: 'Couleur de police', + transparent: 'Transparent', + setTransparent: 'Définir la transparence', + reset: 'Restaurer', + resetToDefault: 'Restaurer la couleur par défaut' + }, + shortcut: { + shortcuts: 'Raccourcis', + close: 'Fermer', + textFormatting: 'Mise en forme du texte', + action: 'Action', + paragraphFormatting: 'Mise en forme des paragraphes', + documentStyle: 'Style du document', + extraKeys: 'Touches supplémentaires' + }, + help: { + 'insertParagraph': 'Insérer paragraphe', + 'undo': 'Défaire la dernière commande', + 'redo': 'Refaire la dernière commande', + 'tab': 'Tabulation', + 'untab': 'Tabulation arrière', + 'bold': 'Mettre en caractère gras', + 'italic': 'Mettre en italique', + 'underline': 'Mettre en souligné', + 'strikethrough': 'Mettre en texte barré', + 'removeFormat': 'Nettoyer les styles', + 'justifyLeft': 'Aligner à gauche', + 'justifyCenter': 'Centrer', + 'justifyRight': 'Aligner à droite', + 'justifyFull': 'Justifier à gauche et à droite', + 'insertUnorderedList': 'Basculer liste à puces', + 'insertOrderedList': 'Basculer liste ordonnée', + 'outdent': 'Diminuer le retrait du paragraphe', + 'indent': 'Augmenter le retrait du paragraphe', + 'formatPara': 'Changer le paragraphe en cours en normal (P)', + 'formatH1': 'Changer le paragraphe en cours en entête H1', + 'formatH2': 'Change current block\'s format as entête H2', + 'formatH3': 'Change current block\'s format as entête H3', + 'formatH4': 'Change current block\'s format as entête H4', + 'formatH5': 'Change current block\'s format as entête H5', + 'formatH6': 'Change current block\'s format as entête H6', + 'insertHorizontalRule': 'Insérer ligne horizontale', + 'linkDialog.show': 'Afficher fenêtre d\'hyperlien' + }, + history: { + undo: 'Annuler la dernière action', + redo: 'Restaurer la dernière action annulée' + } + + } + }); +})(jQuery); diff --git a/js/lang/summernote-fr-FR.min.js b/js/lang/summernote-fr-FR.min.js new file mode 100644 index 0000000..d21ff1c --- /dev/null +++ b/js/lang/summernote-fr-FR.min.js @@ -0,0 +1,2 @@ +/*! Summernote v0.8.3 | (c) 2013-2015 Alan Hong and other contributors | MIT license */ +!function(a){a.extend(a.summernote.lang,{"fr-FR":{font:{bold:"Gras",italic:"Italique",underline:"Souligné",clear:"Effacer la mise en forme",height:"Interligne",name:"Famille de police",strikethrough:"Barré",superscript:"Exposant",subscript:"Indice",size:"Taille de police"},image:{image:"Image",insert:"Insérer une image",resizeFull:"Taille originale",resizeHalf:"Redimensionner à 50 %",resizeQuarter:"Redimensionner à 25 %",floatLeft:"Aligné à gauche",floatRight:"Aligné à droite",floatNone:"Pas d'alignement",shapeRounded:"Forme: Rectangle arrondie",shapeCircle:"Forme: Cercle",shapeThumbnail:"Forme: Vignette",shapeNone:"Forme: Aucune",dragImageHere:"Faites glisser une image ou un texte dans ce cadre",dropImage:"Lachez l'image ou le texte",selectFromFiles:"Choisir un fichier",maximumFileSize:"Taille de fichier maximale",maximumFileSizeError:"Taille maximale du fichier dépassée",url:"URL de l'image",remove:"Supprimer l'image"},video:{video:"Vidéo",videoLink:"Lien vidéo",insert:"Insérer une vidéo",url:"URL de la vidéo",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)"},link:{link:"Lien",insert:"Insérer un lien",unlink:"Supprimer un lien",edit:"Modifier",textToDisplay:"Texte à afficher",url:"URL du lien",openInNewWindow:"Ouvrir dans une nouvelle fenêtre"},table:{table:"Tableau"},hr:{insert:"Insérer une ligne horizontale"},style:{style:"Style",p:"Normal",blockquote:"Citation",pre:"Code source",h1:"Titre 1",h2:"Titre 2",h3:"Titre 3",h4:"Titre 4",h5:"Titre 5",h6:"Titre 6"},lists:{unordered:"Liste à puces",ordered:"Liste numérotée"},options:{help:"Aide",fullscreen:"Plein écran",codeview:"Afficher le code HTML"},paragraph:{paragraph:"Paragraphe",outdent:"Diminuer le retrait",indent:"Augmenter le retrait",left:"Aligner à gauche",center:"Centrer",right:"Aligner à droite",justify:"Justifier"},color:{recent:"Dernière couleur sélectionnée",more:"Plus de couleurs",background:"Couleur de fond",foreground:"Couleur de police",transparent:"Transparent",setTransparent:"Définir la transparence",reset:"Restaurer",resetToDefault:"Restaurer la couleur par défaut"},shortcut:{shortcuts:"Raccourcis",close:"Fermer",textFormatting:"Mise en forme du texte",action:"Action",paragraphFormatting:"Mise en forme des paragraphes",documentStyle:"Style du document",extraKeys:"Touches supplémentaires"},help:{insertParagraph:"Insérer paragraphe",undo:"Défaire la dernière commande",redo:"Refaire la dernière commande",tab:"Tabulation",untab:"Tabulation arrière",bold:"Mettre en caractère gras",italic:"Mettre en italique",underline:"Mettre en souligné",strikethrough:"Mettre en texte barré",removeFormat:"Nettoyer les styles",justifyLeft:"Aligner à gauche",justifyCenter:"Centrer",justifyRight:"Aligner à droite",justifyFull:"Justifier à gauche et à droite",insertUnorderedList:"Basculer liste à puces",insertOrderedList:"Basculer liste ordonnée",outdent:"Diminuer le retrait du paragraphe",indent:"Augmenter le retrait du paragraphe",formatPara:"Changer le paragraphe en cours en normal (P)",formatH1:"Changer le paragraphe en cours en entête H1",formatH2:"Change current block's format as entête H2",formatH3:"Change current block's format as entête H3",formatH4:"Change current block's format as entête H4",formatH5:"Change current block's format as entête H5",formatH6:"Change current block's format as entête H6",insertHorizontalRule:"Insérer ligne horizontale","linkDialog.show":"Afficher fenêtre d'hyperlien"},history:{undo:"Annuler la dernière action",redo:"Restaurer la dernière action annulée"}}})}(jQuery); \ No newline at end of file diff --git a/js/locale/datatable_de.json b/js/locale/datatable_de.json new file mode 100644 index 0000000..d6a113d --- /dev/null +++ b/js/locale/datatable_de.json @@ -0,0 +1,23 @@ +{ + "sEmptyTable": "Keine Daten in der Tabelle vorhanden", + "sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen", + "sInfoEmpty": "0 bis 0 von 0 Einträgen", + "sInfoFiltered": "(gefiltert von _MAX_ Einträgen)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "_MENU_ Einträge anzeigen", + "sLoadingRecords": "Wird geladen...", + "sProcessing": "Bitte warten...", + "sSearch": "Suchen", + "sZeroRecords": "Keine Einträge vorhanden.", + "oPaginate": { + "sFirst": "Erste", + "sPrevious": "Zurück", + "sNext": "Nächste", + "sLast": "Letzte" + }, + "oAria": { + "sSortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren", + "sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren" + } +} diff --git a/js/locale/datatable_fr.json b/js/locale/datatable_fr.json new file mode 100644 index 0000000..23edc99 --- /dev/null +++ b/js/locale/datatable_fr.json @@ -0,0 +1,22 @@ +{ + "sProcessing": "Traitement en cours...", + "sSearch": "Rechercher :", + "sLengthMenu": "Afficher _MENU_ éléments", + "sInfo": "Affichage de l'élément _START_ à _END_ sur _TOTAL_ éléments", + "sInfoEmpty": "Affichage de l'élément 0 à 0 sur 0 éléments", + "sInfoFiltered": "(filtré de _MAX_ éléments au total)", + "sInfoPostFix": "", + "sLoadingRecords": "Chargement en cours...", + "sZeroRecords": "Aucun élément à afficher", + "sEmptyTable": "Aucune donnée disponible dans le tableau", + "oPaginate": { + "sFirst": "Premier", + "sPrevious": "Précédent", + "sNext": "Suivant", + "sLast": "Dernier" + }, + "oAria": { + "sSortAscending": ": activer pour trier la colonne par ordre croissant", + "sSortDescending": ": activer pour trier la colonne par ordre décroissant" + } +} diff --git a/js/moduleglobal.js b/js/moduleglobal.js new file mode 100644 index 0000000..cf1c62b --- /dev/null +++ b/js/moduleglobal.js @@ -0,0 +1,26 @@ +$( document ).ready(function() { + //console.log( "Iframe "+ location.pathname.substring(location.pathname.lastIndexOf("/")) +" ready!" ); + mpref.loadconfig(); + initpage(); +}); + +var mpref ={ + cfg: null, + getSearchParams: function (k){ + //alert(location.href); + var p={}; + console.log("params =>" + location.search); + location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v}); + return k?p[k]:p; + }, + loadconfig: function(){ + this.cfg = this.getSearchParams(); + //var page = location.pathname.substring(location.pathname.lastIndexOf("/")); + //page = page.replace(/\.html/,''); + //apppref.getpreference(page); + //appdb.dbfile = this.cfg.dbfile; + if (typeof appdb !== "undefined"){ + appdb.url = decodeURIComponent(this.cfg.serviceurl) + 'sqlite/' + decodeURIComponent(this.cfg.dbfile); + } + } +} \ No newline at end of file diff --git a/js/old/data.js b/js/old/data.js new file mode 100644 index 0000000..7b9c4aa --- /dev/null +++ b/js/old/data.js @@ -0,0 +1,54 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +var globalreq = { + listen_request: function(callback) { + document.addEventListener("creorga-query", function(event) { + var node = event.target; + if (!node || node.nodeType != Node.TEXT_NODE) + return; + + var doc = node.ownerDocument; + callback(JSON.parse(node.nodeValue), doc, function(response) { + node.nodeValue = JSON.stringify(response); + + var event = doc.createEvent("HTMLEvents"); + event.initEvent("creorga-response", true, false); + return node.dispatchEvent(event); + }); + }, false, true); + }, + + callback: function(request, sender, callback) { + if (request.page) { + if (!request.module) { + request.module =null; + } + if (request.page=='preview') { + printmanager.onprint(request.data); + }else if (request.page=='updatesiteslist') { + try { + if (multisite_reader){ + multisite_reader.getsites(); + }else { + document.getElementById("curcreche").value = ""; + } + } catch (Exception) { + if (request.data.curname){ + document.getElementById("curcreche").value = request.data.curname; + } + } + }else if (request.page=='infoheader') { + navigation.set_infoheader(request.header); + } + else { + navigation.load_appview(request.page,request.module,request.data,request.header); + } + + return ""; + } + + return callback(null); + } +} + +globalreq.listen_request(globalreq.callback); diff --git a/js/old/database.js b/js/old/database.js new file mode 100644 index 0000000..88e9df7 --- /dev/null +++ b/js/old/database.js @@ -0,0 +1,324 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +Components.utils["import"]("resource://gre/modules/Sqlite.jsm"); +Components.utils["import"]("resource://gre/modules/Services.jsm"); +Components.utils["import"]("resource://gre/modules/FileUtils.jsm"); + +var appdb = { + dbFile: ((apppref.getpreference("support.database.currentdb.db"))?FileUtils.File(apppref.getpreference("support.database.currentdb.db")):null), + dbConn: null, + aTableData: null, + aTableType: null, + aColumns: null, + keywords: ['ABORT','ACTION','ADD','AFTER','ALL','ALTER','ANALYZE','AND','AS','ASC','ATTACH','AUTOINCREMENT','BEFORE','BEGIN','BETWEEN','BY','CASCADE','CASE','CAST','CHECK','COLLATE','COLUMN','COMMIT','CONFLICT','CONSTRAINT','CREATE','CROSS','CURRENT_DATE','CURRENT_TIME','CURRENT_TIMESTAMP','DATABASE','DEFAULT','DEFERRABLE','DEFERRED','DELETE','DESC','DETACH','DISTINCT','DROP','EACH','ELSE','END','ESCAPE','EXCEPT','EXCLUSIVE','EXISTS','EXPLAIN','FAIL','FOR','FOREIGN','FROM','FULL','GLOB','GROUP','HAVING','IF','IGNORE','IMMEDIATE','IN','INDEX','INDEXED','INITIALLY','INNER','INSERT','INSTEAD','INTERSECT','INTO','IS','ISNULL','JOIN','KEY','LEFT','LIKE','LIMIT','MATCH','NATURAL','NO','NOT','not','null','NOTNULL','NULL','OF','OFFSET','ON','OR','ORDER','OUTER','PLAN','PRAGMA','PRIMARY','QUERY','RAISE','RECURSIVE','REFERENCES','REGEXP','REINDEX','RELEASE','RENAME','REPLACE','RESTRICT','RIGHT','ROLLBACK','ROW','SAVEPOINT','SELECT','SET','TABLE','TEMP','TEMPORARY','THEN','TO','TRANSACTION','TRIGGER','UNION','UNIQUE','UPDATE','USING','VACUUM','VALUES','VIEW','VIRTUAL','WHEN','WHERE','WITH','WITHOUT'], + setdbFile: function(fname){ + this.dbFile=FileUtils.File(fname); + }, + openDatabase: function() { + this.closeConnection(); + try { + this.dbConn = Services.storage.openDatabase(this.dbFile); + + } + catch (e) { + //dump("Connection Failed: " +e.message + '-'+ curcfg.dbfile.local + " - "+ this.dbFile.path + "\n"); + return false; + } + if(this.dbConn == null) return false; + return true; + }, + closeConnection: function() { + if (this.dbConn != null) { + try { + this.dbConn.close(); + } catch (e) { + this.dbConn = null; + } + } + this.dbConn = null; + this.aTableData = null; + this.aTableType = null; + this.aColumns = null; + }, + dbexec: function(sql){ + //dump("EXEC sql: " + sql + "\n"); + if (this.dbConn == null) { + this.openDatabase(); + } + try{ + var statement = this.dbConn.createStatement(sql); + statement.executeAsync({ + handleError: function(aError) { + if (sql != ""){ + //dump("Error:" + aError.message + "\nFailed SQL: " + sql + "\n"); + var params = { in : {msg:aError.message + "\nFailed SQL: " + sql},out: null}; + var dlg = window.openDialog("chrome://creorga/content/dlg/dlgsqlerror.xul", "dlgsqlerror","chrome,centerscreen,modal", params).focus(); + if (params.out) { + appdb.dbexec( sql); + } + } + }, + handleCompletion: function(aReason) { + //if (aReason != Components.interfaces.mozIStorageStatementCallback.REASON_FINISHED) + //dump("Query canceled or aborted!"); + } + }); + if (curcfg.sync){ + sync.up(sql); + } + + } catch(e){ + if (sql != ""){ + //dump("Error:" + e.message + "\nFailed SQL: " + sql + "\n"); + var params = { in : {msg:e.message + "\nFailed SQL: " + sql},out: null}; + var dlg = window.openDialog("chrome://creorga/content/dlg/dlgsqlerror.xul", "dlgsqlerror","chrome,centerscreen,modal", params).focus(); + if (params.out) { + appdb.dbexec( sql); + } + } + return false; + } + return true; + }, + dbquery: function(sQuery) { + if (this.dbConn == null) { + var r = this.openDatabase(); + } + + var xdata = { + sqldata : [] + }; + this.aTableData = new Array(); + this.aTableType = new Array(); + this.aColumns = null; + var bResult = false; + try { + var stmt = this.dbConn.createStatement(sQuery); + } + catch (e) { + + //dump("ERROR " + e.message + " " + sQuery +" - Statement ERROR!\n"); + return false; + } + var iCols = 0; + var iType, colName; + try { + iCols = stmt.columnCount; + this.aColumns = new Array(); + var aTemp; + for (var i = 0; i < iCols; i++) { + colName = stmt.getColumnName(i); + aTemp = [colName]; + this.aColumns.push(aTemp); + } + } catch (e) { + stmt.finalize(); + //dump("Column ERROR!\n"); + return false; + } + + var cell; + var bFirstRow = true; + try { + var r = 0; + while (stmt.executeStep()) { + var rowdata = {}; + for (i = 0; i < iCols; i++) { + iType = stmt.getTypeOfIndex(i); + switch (iType) { + case stmt.VALUE_TYPE_NULL: + rowdata[this.aColumns[i]] = ''; + break; + case stmt.VALUE_TYPE_INTEGER: + rowdata[this.aColumns[i]] = stmt.getInt64(i); + break; + case stmt.VALUE_TYPE_FLOAT: + rowdata[this.aColumns[i]] = stmt.getDouble(i); + break; + case stmt.VALUE_TYPE_TEXT: + rowdata[this.aColumns[i]] = stmt.getString(i); + break; + default: sData = ""; + } + r = r+1; + } + xdata.sqldata.push(rowdata); + r = r+1; + } + } catch (e) { + stmt.finalize(); + //dump("Statement Result ERROR!\n"); + return false; + } + stmt.finalize(); + return xdata; + }, + dbqueryarray: function(sQuery) { + if (this.dbConn == null) { + this.openDatabase(); + } + var xdata = { + sqldata : [], + sqlhead : [] + }; + + this.aTableData = new Array(); + this.aTableType = new Array(); + this.aColumns = null; + var bResult = false; + try { + var stmt = this.dbConn.createStatement(sQuery); + } + catch (e) { + return false; + } + + var iCols = 0; + var iType, colName; + try { + iCols = stmt.columnCount; + this.aColumns = new Array(); + var aTemp; + for (var i = 0; i < iCols; i++) { + colName = stmt.getColumnName(i); + this.aColumns.push(colName); + } + } catch (e) { + stmt.finalize(); + return false; + } + + var cell; + var bFirstRow = true; + try { + var r = 0; + while (stmt.executeStep()) { + var rowdata = new Array(); + for (i = 0; i < iCols; i++) { + iType = stmt.getTypeOfIndex(i); + switch (iType) { + case stmt.VALUE_TYPE_NULL: + rowdata.push(''); + break; + case stmt.VALUE_TYPE_INTEGER: + rowdata.push(stmt.getInt64(i)); + break; + case stmt.VALUE_TYPE_FLOAT: + rowdata.push(stmt.getDouble(i)); + break; + case stmt.VALUE_TYPE_TEXT: + rowdata.push(stmt.getString(i)); + break; + default: sData = ""; + } + r = r+1; + } + xdata.sqldata.push(rowdata); + + r = r+1; + } + xdata.sqlhead = this.aColumns; + } catch (e) { + stmt.finalize(); + //dump("Query 2: " + sQuery + " - executeStep failed"); + return false; + } + stmt.finalize(); + return xdata; + }, + strreplace: function(mytext){ + mytext = mytext.toString().replace("'","''",'g'); + return mytext; + }, + generate_uuid: function(){ + var uuidGenerator = Components.classes["@mozilla.org/uuid-generator;1"] + .getService(Components.interfaces.nsIUUIDGenerator); + var uuid = uuidGenerator.generateUUID(); + var xuuid = uuid.toString(); + xuuid = xuuid.replace('}',''); + xuuid = xuuid.replace('{',''); + return xuuid; + }, + getdatabases: function(){ + var childnames = apppref.branch.getChildList("",{}); + var curdbfiles = new Array(); + for (var i in childnames){ + if ((childnames[i].substring(0,16) == 'support.database') && (childnames[i].indexOf("currentdb") == -1) && (childnames[i].indexOf("currentsite") == -1)) { + var sitecfg = JSON.parse(apppref.getpreference(childnames[i])); + curdbfiles.push(sitecfg.path.local + system.sep() + sitecfg.uuid + ".sqlite"); + } + } + return curdbfiles; + }, + getaccessibledatabases: function(){ + var childnames = apppref.branch.getChildList("",{}); + var curdbfiles = {}; + for (var i in childnames){ + if ((childnames[i].substring(0,16) == 'support.database') && (childnames[i].indexOf("currentdb") == -1) && (childnames[i].indexOf("currentsite") == -1)) { + var sitecfg = JSON.parse(apppref.getpreference(childnames[i])); + if (system.fileexists(sitecfg.path.local + system.sep() + sitecfg.uuid + ".sqlite")){ + + curdbfiles[sitecfg.dbnum] = sitecfg; + } + + } + } + return curdbfiles; + }, + + check_schema: function(dbid){ + //alert("TEST"); + var dbconf = apppref.getpreference("support.database." + dbid); + var sitecfg = JSON.parse(dbconf); + var dbpath = sitecfg.path.local + system.sep() + sitecfg.uuid + ".sqlite"; + var defdb = system.appdir() + system.sep() + 'defaults'+ system.sep() + 'profile' + system.sep() + 'creorga.sqlite'; + + // var dbfiles = appdb.getdatabases(); + //alert(JSON.stringify(sitecfg)); + // for (var cdb in dbfiles){ + if (system.fileexists(dbpath)){ + + var args = ["-db",dbpath,"-t",defdb]; + + var bincheck = system.toolsdir() + system.sep() + "creorgadb.exe"; + if (system.os != "WINNT") { + bincheck = system.toolsdir() + system.sep() + "creorgadb"; + } + system.runcmdline(bincheck,args,null); + + } + // } + // OS.File.remove(system.profilerootdir() + system.sep() + '/checkschema.txt',{ignoreAbsent:true}); + + }//, + +} + +// var sync = { +// //TODO: dynamic url and dynamic (curcfg) schema -> ident + +// //url: "http://localhost:6060/localsyncup", +// up: function(ddlquery){ +// //dump("dbfile" + + "\n"); +// /*var request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(); +// request.onload = function(aEvent) { +// //dump("Response Text: " + aEvent.target.responseText + "\n"); +// }; +// request.onerror = function(aEvent) { +// //dump("Error Msg:" + aEvent.target.responseText + "\n"); +// //dump("Error Status: " + aEvent.target.status + "\n"); +// }; +// request.open("POST", sync.url, true); +// request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");*/ +// var cts = new Date(); +// var milli = cts.getMilliseconds(); +// if (milli < 10){ +// milli = "00" + milli; +// } else if (milli < 100){ +// milli = "0" + milli; +// } +// var dbident = system.getFileName(appdb.dbFile.path).replace(/\.sqlite/,''); +// dump("SQL;;"+ cts.toLocaleFormat('%Y%m%d%H%M%S')+ milli +";;" + dbident +";;"+ddlquery+ "\n"); +// //request.send("ts="+ cts.toLocaleFormat('%Y-%m-%d %H:%M:%S') +"&q=" +encodeURIComponent(ddlquery)+ "&ident="+dbident+"&rh="+ system.hostname()); +// } +// } diff --git a/js/old/encrypt.js b/js/old/encrypt.js new file mode 100644 index 0000000..37ab16b --- /dev/null +++ b/js/old/encrypt.js @@ -0,0 +1,200 @@ +var MD5 = function (string) { + + function RotateLeft(lValue, iShiftBits) { + return (lValue<>>(32-iShiftBits)); + } + + function AddUnsigned(lX,lY) { + var lX4,lY4,lX8,lY8,lResult; + lX8 = (lX & 0x80000000); + lY8 = (lY & 0x80000000); + lX4 = (lX & 0x40000000); + lY4 = (lY & 0x40000000); + lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF); + if (lX4 & lY4) { + return (lResult ^ 0x80000000 ^ lX8 ^ lY8); + } + if (lX4 | lY4) { + if (lResult & 0x40000000) { + return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); + } else { + return (lResult ^ 0x40000000 ^ lX8 ^ lY8); + } + } else { + return (lResult ^ lX8 ^ lY8); + } + } + + function F(x,y,z) { return (x & y) | ((~x) & z); } + function G(x,y,z) { return (x & z) | (y & (~z)); } + function H(x,y,z) { return (x ^ y ^ z); } + function I(x,y,z) { return (y ^ (x | (~z))); } + + function FF(a,b,c,d,x,s,ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + function GG(a,b,c,d,x,s,ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + function HH(a,b,c,d,x,s,ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + function II(a,b,c,d,x,s,ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + function ConvertToWordArray(string) { + var lWordCount; + var lMessageLength = string.length; + var lNumberOfWords_temp1=lMessageLength + 8; + var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64; + var lNumberOfWords = (lNumberOfWords_temp2+1)*16; + var lWordArray=Array(lNumberOfWords-1); + var lBytePosition = 0; + var lByteCount = 0; + while ( lByteCount < lMessageLength ) { + lWordCount = (lByteCount-(lByteCount % 4))/4; + lBytePosition = (lByteCount % 4)*8; + lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<>>29; + return lWordArray; + }; + + function WordToHex(lValue) { + var WordToHexValue="",WordToHexValue_temp="",lByte,lCount; + for (lCount = 0;lCount<=3;lCount++) { + lByte = (lValue>>>(lCount*8)) & 255; + WordToHexValue_temp = "0" + lByte.toString(16); + WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2); + } + return WordToHexValue; + }; + + function Utf8Encode(string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + }; + + var x=Array(); + var k,AA,BB,CC,DD,a,b,c,d; + var S11=7, S12=12, S13=17, S14=22; + var S21=5, S22=9 , S23=14, S24=20; + var S31=4, S32=11, S33=16, S34=23; + var S41=6, S42=10, S43=15, S44=21; + + string = Utf8Encode(string); + + x = ConvertToWordArray(string); + + a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; + + for (k=0;k expiration)){ +// //dump("License expired\n"); +// navigation.load_deck(1); +// } else +if (!apppref.getpreference("support.database.currentdb.num")) { + + navigation.load_deck(1); + //dump("No Database configuration\n"); +} +// else if ( !lic || !expiration || !lic.match(licmatch)){ +// //dump("no License Key\n"); +// navigation.load_deck(1); +// } +else { + // if (system.fileexists(system.profilerootdir() + "/checkschema.txt")){ + // appdb.check_schema(); + // } + if (system.fileexists(system.profilerootdir() + "/vpncfg.txt")){ + //dump("current loadtimeout:" + loadtimeout + "\n"); + if (system.os == "WINNT") { + + system.runcmdline(system.toolsdir() + system.sep() + "ovpn.exe",["--connect"],function(data){ + system.popup("Info","démarrage VPN!\n"); + }); + } + var r = system.loadconfig(loadtimeout); + if (r === false){ + var nx = { "view":"multisite","module":"support","header":"Configuration Sites"}; + apppref.setpreference("pageconfig.lastpage", nx); + + } + } else { + var r = curcfg.loadconfig(apppref.getpreference("support.database.currentdb.num")); + if (r === false){ + + var nx = { "view":"multisite","module":"support","header":"Configuration Sites"}; + apppref.setpreference("pageconfig.lastpage", nx); + + } + //license.checklicense(lic,license.setactiveview); + navigation.load_deck(2); + } + +} + + diff --git a/js/old/license.js b/js/old/license.js new file mode 100644 index 0000000..74810c1 --- /dev/null +++ b/js/old/license.js @@ -0,0 +1,142 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +Components.utils["import"]("resource://gre/modules/NetUtil.jsm"); +Components.utils["import"]("resource://gre/modules/FileUtils.jsm"); + +var license = { + url: "https://www.dks.lu/creorga/license.cgi", + activate: function(){ + document.getElementById("licerror").setAttribute("hidden",true); + var reglid = /(\w{4,})\-(\w{4,})\-(\w{4,})\-(\w{4,})\-(\w{4,})/; + var licensekey = document.getElementById("txtlicensekey").value; + if (!licensekey.match(reglid)){ + document.getElementById("licerror").value="License pas valide!"; + document.getElementById("licerror").setAttribute("hidden",false); + return; + } + + //verify licensse + this.checklicense(licensekey,this.setactiveview); + +// +// if (!chkcrpart){ +// var cruuid = appdb.generate_uuid(); +// var dbname = system.profiledir() + system.sep() + cruuid +".sqlite"; +// var dbclone = system.appdir() + system.sep() +"defaults"+system.sep()+"profile"+system.sep()+"creorga.sqlite"; +// OS.File.copy(dbclone, dbname); + + }, + + setcreche: function(){ + var chk = document.getElementById("chk_setcreche").checked; + //"Is checked" + chk + "\n"); + if (chk === true){ + document.getElementById("vbox_liccreche").style.removeProperty("display"); + } else { + document.getElementById("vbox_liccreche").style.setProperty("display","none"); + } + }, +// browsecreche(lastdir,wmsg){ +// var nsIFilePicker = Components.interfaces.nsIFilePicker; +// var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); +// fp.init(window, wmsg, nsIFilePicker.modeOpen); +// fp.appendFilter("Database Files", "*.sqlite"); +// var selfile = null; +// if ((lastdir) && (lastdir != '')) { +// var nsILocalFile= Components.interfaces.nsILocalFile; +// var f = Components.classes["@mozilla.org/file/local;1"].createInstance(nsILocalFile); +// f.initWithPath(lastdir); +// fp.displayDirectory = f; +// } +// var res = fp.show(); +// if (res != nsIFilePicker.returnCancel) { +// selfile = fp.file; +// } +// return selfile; +// }, + checklicense: function(lickey,callback){ + var data = null; + + var appinfo = system.b64EncodeUnicode(JSON.stringify(system.appinfo())); + //dump(this.url + '?lic=' + lickey + ';appinfo=' + appinfo +"\n !!!!!\n"); + NetUtil.asyncFetch(this.url + '?lic=' + lickey + ';appinfo=' + appinfo, function(inputStream, status) { + + if (!Components.isSuccessCode(status)) { + document.getElementById("licerror").value="Impossible de verifier la license!"; + document.getElementById("licerror").setAttribute("hidden",false); + document.getElementById("apploadmsg").value="Serveur de DKS pas accessible! Contacter le support!"; + } else { + var strdata = NetUtil.readInputStreamToString(inputStream, inputStream.available()); + + //dump("Data returned:" + strdata + "\n"); + try { + data = JSON.parse(strdata); + } catch(e){ + document.getElementById("apploadmsg").value="Impossible de valider la license! Connection internet requis!"; +// var expiration = apppref.getpreference("support.expiration"); +// var today = new Date(); +// var test = today.toLocaleFormat("%Y-%m-%d"); +// var reglid = /(\w{4,})\-(\w{4,})\-(\w{4,})\-(\w{4,})\-(\w{4,})/; +// if (lickey.match(reglid) != "" && (expiration) && (test <= expiration)){ +// navigation.load_deck(2); +// } + //dump(e.message); + return data; + } + + if (callback != null){ + callback(data) + } +// if (data.valid) && (data.valid == 1) { +// //apppref.setpreference("support.license",data.license); +// //apppref.setpreference("support.expiration",data.expiration); +// navigation.load_deck(2); +// }else { +// document.getElementById("licerror").value="license pas valide!"; +// document.getElementById("licerror").setAttribute("hidden",false); +// } + + } + }); + return data; + }, + setactiveview: function(ldata){ + //dump("Data returned:" + JSON.stringify(ldata) + "\n"); + //dump("database returned:" + this.dbname + "\n"); + if ((ldata.valid) && (ldata.valid == 1)) { + apppref.setpreference("support.license",ldata.license); + apppref.setpreference("support.expiration",ldata.expiration); + //dump("Clone Database!\n"); + if (!apppref.getpreference("support.database.currentdb.db")){ + var cruuid = appdb.generate_uuid(); + var dbname = system.profiledir() + system.sep() + cruuid +".sqlite"; + var dbclone = system.appdir() + system.sep() +"defaults"+system.sep()+"profile"+system.sep()+"creorga.sqlite"; + //dump("DB to clone: " + dbclone); + OS.File.copy(dbclone, dbname); + apppref.setpreference("support.database.currentdb.num", 1); + apppref.setpreference("support.database.currentdb.db",dbname); + appdb.dbFile=FileUtils.File(apppref.getpreference("support.database.currentdb.db")); + var nb = {name:'Crèche',uuid:cruuid,dbnum:1,path:{local:system.profiledir(),remote:null},lastsync:null}; + //dump("Database set:" + JSON.stringify(nb) + "\n"); + apppref.setpreference("support.database.1", nb); + curcfg.loadconfig(1); + //dump(appdb.dbFile.path + "\n"); + appdb.openDatabase(); + apppref.setpreference("pageconfig.creche",{"activetab":"groups"}); + + navigation.load_appview("creche",null,null,"Crèche"); + } + system.setappdata(); + navigation.load_deck(2); + //document.getElementById("deckglobal").selectedIndex=2; + }else { + document.getElementById("licerror").value="license pas valide!"; + document.getElementById("licerror").setAttribute("hidden",false); + } + return; + + + + } + +} \ No newline at end of file diff --git a/js/old/navigation.js b/js/old/navigation.js new file mode 100644 index 0000000..c583d0c --- /dev/null +++ b/js/old/navigation.js @@ -0,0 +1,61 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +var navigation = +{ + print_disabled: ['home','creche','backup','multisite','forms','update'], + lastpanelid: null, + load_panel: function(panelname){ + var idxpanel=-1; + var chn = document.getElementById("views").childNodes; + for (var i=0;i= 0) { + document.getElementById("tbb_print").setAttribute("disabled",true); + }else { + document.getElementById("tbb_print").removeAttribute("disabled"); + } + var url = "chrome://creorga/content/web/"+viewname+".html"; + if (module) { + url = "chrome://creorga/content/modules/"+module+"/"+viewname+".html"; + } + document.getElementById("brw_application").loadURI(url,null,"UTF-8"); + }, + load_deck: function(num){ + if (document.getElementById("deckglobal")){ + document.getElementById("deckglobal").selectedIndex = num; + }else { + setTimeout(function(){ navigation.load_deck(num); }, 3000); + } + } +} diff --git a/js/old/preferences.js b/js/old/preferences.js new file mode 100644 index 0000000..b0b9e40 --- /dev/null +++ b/js/old/preferences.js @@ -0,0 +1,168 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +var curcfg = { + name: null, + uuid: null, + dbnum: null, + path: {local:null,remote:null}, + dbfile: {local:null,remote:null}, + lastsync:{}, + local:{importpath:null,reportpath:null}, + remote:{importpath:null,reportpath:null}, + + loadconfig: function(num){ + if (!num) { + num = 1; + } + var tcfg = JSON.parse(apppref.getpreference("support.database." + num)); + curcfg.name = tcfg.name; + curcfg.path.local = tcfg.path.local; + curcfg.uuid = tcfg.uuid; + curcfg.dbnum = tcfg.dbnum; + curcfg.dbfile.local = curcfg.path.local + system.sep() + curcfg.uuid + ".sqlite"; + if (!system.fileexists(curcfg.dbfile.local)){ + return false; + } + apppref.setpreference("support.database.currentdb.db",curcfg.dbfile.local); + if (system.fileexists(system.profilerootdir() + system.sep() + "sync.conf")){ + curcfg.sync = true; + var syncdir = FileUtils.File(system.profilerootdir() + system.sep() + 'syncup'); + if (!system.fileexists(syncdir.path)){ + syncdir.create(1,0755); + } + var syncdirdb = FileUtils.File(system.profilerootdir() + system.sep() + 'syncup' + system.sep() + curcfg.uuid); + if (!system.fileexists(syncdirdb.path)){ + syncdirdb.create(1,0755); + } + var syncdirdb2 = FileUtils.File(system.profilerootdir() + system.sep() + 'syncdown' + system.sep() + curcfg.uuid); + if (!system.fileexists(syncdirdb2.path)){ + syncdirdb2.create(1,0755); + } + var todaydate = new Date(); + var milli = todaydate.getMilliseconds(); + if (milli < 10){ + milli = "00" + milli; + } else if (milli < 100){ + milli = "0" + milli; + } + apppref.setbrowserpreference("dom.window.dump.file", syncdirdb.path + system.sep() + system.hostname()+ "_" + todaydate.toLocaleFormat('%Y%m%d%H%M%S') + milli +".log"); + } + appdb.dbFile=FileUtils.File(curcfg.dbfile.local); + curcfg.local.importpath = curcfg.path.local + system.sep() + 'imports' + system.sep() + curcfg.uuid; + curcfg.local.reportpath = curcfg.path.local + system.sep() + 'reports' + system.sep() + curcfg.uuid; + curcfg.lastsync = null; + if (tcfg.path.remote) { + curcfg.path.remote = tcfg.path.remote; + curcfg.dbfile.remote = curcfg.path.remote + system.sep() + curcfg.uuid + ".sqlite"; + curcfg.remote.importpath = curcfg.path.remote + system.sep() + 'imports' + system.sep() + curcfg.uuid; + curcfg.remote.reportpath = curcfg.path.remote + system.sep() + 'reports' + system.sep() +curcfg.uuid; + curcfg.lastsync = tcfg.lastsync; + } + + return true; + }, + addsite: function(name,siteclone){ + if (!siteclone) { + var cfg = {name:"Nouvelle Crèche",uuid:appdb.generate_uuid(),dbnum:1,ldbpath:curcfg.dbfile,rdbpath:curcfg.rdbfile,lastsync:curcfg.lastsync}; + apppref.setpreference("support.database." + curcfg.dbnum,cfg); + } else { + //TODO: + } + + }, + saveconfig: function(data){ + if (data) { + apppref.setpreference("support.database." + data.dbnum,data); + }else{ + var cfg = {name:curcfg.name,uuid:curcfg.uuid,dbnum:curcfg.dbnum,path:{local:curcfg.path.local,remote:curcfg.path.remote},lastsync:curcfg.lastsync}; + apppref.setpreference("support.database." + curcfg.dbnum,cfg); + } + }, + updateconfigs: function(){ + var childnames = apppref.branch.getChildList("",{}); + for (var i in childnames){ + var re = /support.database_\d+.db/; + if (childnames[i].match(re)) { + var num = childnames[i].substring(childnames[i].indexOf('_')+1).replace(/.db/,'').replace(/.name/,''); + var appx = apppref.getpreference("support.database." + num); + + if (!appx) { + var nobj = {name:null,uuid:null,dbnum:null,path:{local:null,remote:null},lastsync:null}; + nobj.name = apppref.getpreference('support.database_'+num+'.name'); + nobj.dbnum = num; + nobj.path.local = system.getDirectory(apppref.getpreference('support.database_'+num+'.db')); + appdb.closeConnection(); + appdb.dbFile = FileUtils.File(apppref.getpreference('support.database_'+num+'.db')); + var cuuid = appdb.dbquery("select uuid from creche LIMIT 1;"); + nobj.uuid = cuuid.sqldata[0].uuid; + var cfname = system.getFileName(appdb.dbFile.path); + if (cfname != nobj.uuid + ".sqlite") { + appdb.closeConnection(); + if (cfname == 'creorga.sqlite') { + system.renamefile(appdb.dbFile.path,nobj.path.local,nobj.uuid + ".sqlite"); + }else{ + system.renamefile(appdb.dbFile.path,nobj.path.local,nobj.uuid + ".sqlite"); + } + } + + curcfg.saveconfig(nobj); + apppref.deletepreference('support.database_'+num+'.name'); + apppref.deletepreference('support.database_'+num+'.db'); + + } + } + } + appdb.closeConnection(); + appdb.dbFile = null; + } +} + +var apppref = { + branch: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("creorga."), + browser: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("browser."), + getpreference: function(keyname){ + //dump(keyname + "\n"); + var ptype = this.branch.getPrefType(keyname); + var keyvalue = null; + if (ptype == 32) { + keyvalue = this.branch.getCharPref(keyname); + } else if (ptype == 64) { + keyvalue = this.branch.getIntPref(keyname); + } else if (ptype == 128) { + keyvalue = this.branch.getBoolPref(keyname); + } + return keyvalue; + }, + setpreference: function(keyname,keyvalue){ + if (typeof keyvalue == "string") { + this.branch.setCharPref(keyname,keyvalue); + } else if (typeof keyvalue == "number") { + this.branch.setIntPref(keyname,keyvalue); + } else if (typeof keyvalue == "boolean") { + this.branch.setBoolPref(keyname,keyvalue); + } else { + this.branch.setCharPref(keyname,JSON.stringify(keyvalue)); + } + + }, + setbrowserpreference: function(keyname,keyvalue){ + //if (typeof keyvalue == "string") { + this.browser.setCharPref(keyname,keyvalue); + /*} else if (typeof keyvalue == "number") { + this.branch.setIntPref(keyname,keyvalue); + } else if (typeof keyvalue == "boolean") { + this.branch.setBoolPref(keyname,keyvalue); + } else { + this.branch.setCharPref(keyname,JSON.stringify(keyvalue)); + }*/ + + }, + deletepreference: function(keyname){ + this.branch.clearUserPref(keyname); + }, + savepreferences: function(){ + var prefService = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefService); + prefService.savePrefFile(null); + } +} diff --git a/js/old/sync.js b/js/old/sync.js new file mode 100644 index 0000000..e69de29 diff --git a/js/old/system.js b/js/old/system.js new file mode 100644 index 0000000..8a29924 --- /dev/null +++ b/js/old/system.js @@ -0,0 +1,421 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + + function jsdump(str) { + Components.classes['@mozilla.org/consoleservice;1'] + .getService(Components.interfaces.nsIConsoleService) + .logStringMessage(str); + } + +Components.utils["import"]("resource://gre/modules/FileUtils.jsm"); +Components.utils["import"]("resource://gre/modules/Services.jsm"); +Components.utils["import"]("resource://gre/modules/NetUtil.jsm"); +Components.utils["import"]("resource://gre/modules/osfile.jsm"); +Components.utils["import"]("resource://gre/modules/Downloads.jsm"); +var system = { + os: Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS, + sep: function() { + if (this.os == 'WINNT') { + return '\\'; + } else { + return "/"; + } + }, + appdir: function() { + var mypath = Components.classes["@mozilla.org/file/directory_service;1"]. + getService(Components.interfaces.nsIProperties). + get("CurProcD", Components.interfaces.nsIFile).path; + + + return mypath; + }, + tmpdir: function(){ + var mypath = Components.classes["@mozilla.org/file/directory_service;1"]. + getService(Components.interfaces.nsIProperties). + get("TmpD", Components.interfaces.nsIFile).path; + return mypath; + }, + homedir: function(){ + var mypath = Components.classes["@mozilla.org/file/directory_service;1"]. + getService(Components.interfaces.nsIProperties). + get("Home", Components.interfaces.nsIFile).path; + return mypath; + }, + toolsdir: function() { + var mypath = Components.classes["@mozilla.org/file/directory_service;1"]. + getService(Components.interfaces.nsIProperties). + get("CurProcD", Components.interfaces.nsIFile).path; + + + return mypath + this.sep() + 'Tools'; + }, + commondir: function(){ + if (this.os == 'WINNT') { + return "C:" + system.sep() + 'ProgramData' + system.sep() + 'Creorga'; + } else { + return '/Library/Application Support/Creorga'; + } + }, + profiledir: function() { + var mypath = Components.classes["@mozilla.org/file/directory_service;1"]. + getService(Components.interfaces.nsIProperties). + get("ProfD", Components.interfaces.nsIFile).path; + return mypath; + }, + profilerootdir: function(){ + var mypath = Components.classes["@mozilla.org/file/directory_service;1"]. + getService(Components.interfaces.nsIProperties). + get("DefProfRt", Components.interfaces.nsIFile).path; + return mypath; + + }, + getFileName: function (filePath) { + if (filePath.indexOf('http') == 0 ) { + return filePath.substring(filePath.lastIndexOf('/')+1); + } + else if (this.os == 'WINNT') { // windows + return filePath.substring(filePath.lastIndexOf('\\')+1); + } + else { // unix + return filePath.substring(filePath.lastIndexOf('/')+1); + } + }, + getDirectory: function(filePath){ + if (this.os == 'WINNT') { // windows + return filePath.substring(0,filePath.lastIndexOf('\\')); + } + else { // unix + return filePath.substring(0,filePath.lastIndexOf('/')); + } + }, + + gotoUrl: function(url) { + var nsioservice = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + + var uri = nsioservice.newURI(url, null, null); + + var eps = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"] + .getService(Components.interfaces.nsIExternalProtocolService); + + eps.loadURI(uri, null); + }, + openFile: function(filepath) { + if (system.os == "WINNT") { + system.runcmdline(filepath,[],null); + } else { + system.runcmdline("/usr/bin/open",[filepath],null); + } + }, + showdlgabout: function() { + window.openDialog('chrome://creorga/content/dlg/dlgabout.xul', 'dlgabout', 'chrome,modal,centerscreen,close=0'); + }, +// dlgupdate: function() { +// window.openDialog('chrome://creorga/content/modules/support/dlg/dlgupdate.xul', 'dlgupdate', 'chrome,modal,centerscreen'); +// }, + fileexists: function(filefrom) { + if (!filefrom) { + return false; + } + if (this.os == 'WINNT') { + filefrom = filefrom.replace('/', '\\'); + } + var file = new FileUtils.File(filefrom); + if (file.exists()) { + file = null; + return true; + } + file=null; + return false; + }, + renamefile: function(filefrom,pathto,fileto){ + var file = new FileUtils.File(filefrom); + if (file.exists()) { + var dir = FileUtils.File(pathto); + file.renameTo(dir,fileto); + } + return true; + }, + readLocalTextFile: function(aURL) { + var ioService = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + var scriptableStream = Components + .classes["@mozilla.org/scriptableinputstream;1"] + .getService(Components.interfaces.nsIScriptableInputStream); + + var channel = ioService.newChannel("file://" + aURL, null, null); + var input = channel.open(); + scriptableStream.init(input); + var str = scriptableStream.read(input.available()); + + scriptableStream.close(); + input.close(); + var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"] + .createInstance(Components.interfaces.nsIScriptableUnicodeConverter); + converter.charset = "UTF-8"; + str = converter.ConvertToUnicode(str); + return str; + }, + WriteTextFile: function(xdata, outfile) { + dump(outfile + "\n"); + var nsifile = new FileUtils.File( outfile ); + var ostream = FileUtils.openSafeFileOutputStream(nsifile); + var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter); + converter.charset = "UTF-8"; + var istream = converter.convertToInputStream(xdata); + NetUtil.asyncCopy(istream, ostream,function(status) { + if (!Components.isSuccessCode(status)) { + // Handle error! + return; + } + + }); + }, + WriteTextFile2: function(file,data){ + dump(file.path); + OS.File.remove(file.path,{ignoreAbsent:true}); + var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); + foStream.init(file, 0x02 | 0x08 | 0x20, foStream.PR_IRWXU, 0); + var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream); + converter.init(foStream, "UTF-8", 0, 0); + converter.writeString(data); + converter.close(); + }, + b64EncodeUnicode: function(str) { + return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { + return String.fromCharCode('0x' + p1); + })); + }, + appinfo: function() { + var xulAppInfo = Components.classes["@mozilla.org/xre/app-info;1"] + .getService(Components.interfaces.nsIXULAppInfo); + var xulRuntime = Components.classes["@mozilla.org/xre/app-info;1"] + .getService(Components.interfaces.nsIXULRuntime); + var profileident = system.profiledir().substring(system.profilerootdir().length+1); + var appinfo = { + appBuildID: xulAppInfo.appBuildID, + ID: xulAppInfo.ID, + name: xulAppInfo.name, + platformBuildID: xulAppInfo.platformBuildID, + platformVersion: xulAppInfo.platformVersion, + vendor: xulAppInfo.vendor, + version: xulAppInfo.version, + OS: xulRuntime.OS, + profile: profileident + } + return appinfo; + }, + hostname: function(){ + var dnsComp = Components.classes["@mozilla.org/network/dns-service;1"]; + var dnsSvc = dnsComp.getService(Components.interfaces.nsIDNSService); + var compName = dnsSvc.myHostName; + return compName; + }, + setappdata: function() { + var appdata = this.appinfo(); + //var lic = apppref.getpreference("support.license"); + //var expiration = apppref.getpreference("support.expiration"); + document.getElementById("stbversion").setAttribute('label', "Version " + appdata.version); + //dump(JSON.stringify(appdata) + "\n"); + if (curcfg.name) { + document.getElementById("curcreche").value=curcfg.name; + } else { + document.getElementById("curcreche").value=""; + } + + }, + getBackups:function(){ + + var dir = new FileUtils.File(curcfg.path.local + system.sep() + 'backup'); + var entries = dir.directoryEntries; + var array = []; + while(entries.hasMoreElements()) { + var entry = entries.getNext(); + entry.QueryInterface(Components.interfaces.nsIFile); + if (entry.path.indexOf(curcfg.uuid) > 0){ + array.push(entry); + } + } + return array; + }, + getReports:function(cruuid){ + + var dir = new FileUtils.File(curcfg.path.local + system.sep() + 'reports' + system.sep() +cruuid); + if (!system.fileexists(dir.path)){ + dir.create(1,0755); + } + var entries = dir.directoryEntries; + var array = []; + while(entries.hasMoreElements()) { + var entry = entries.getNext(); + entry.QueryInterface(Components.interfaces.nsIFile); + array.push(entry); + } + return array; + }, + getOpenVPNConfig:function(){ + //dump(system.homedir() + system.sep() + 'OpenVPN' + system.sep() +'config'+ "\n"); + var dir = new FileUtils.File(system.homedir() + system.sep() + 'OpenVPN' + system.sep() +'config'); +// if (!system.fileexists(dir.path)){ +// dir.create(1,0755); +// } + var entries = dir.directoryEntries; + var array = []; + while(entries.hasMoreElements()) { + var entry = entries.getNext(); + entry.QueryInterface(Components.interfaces.nsIFile); + if (entry.path.indexOf(".ovpn") != -1){ + var ovpn = system.getFileName(entry.path); + array.push(ovpn.substring(0,ovpn.length - 5)); + } + + } + return array; + }, + getChildFiles:function(cruuid,chuuid){ + + var dir = new FileUtils.File(curcfg.path.local + system.sep() + 'childs' + system.sep() +cruuid + system.sep() + chuuid); + if (!system.fileexists(dir.path)){ + dir.create(1,0755); + } + var entries = dir.directoryEntries; + var array = []; + while(entries.hasMoreElements()) { + var entry = entries.getNext(); + entry.QueryInterface(Components.interfaces.nsIFile); + //dump("Push to Array:" + entry); + //if (!entry.path.startsWith('.')){ + array.push(entry); + //} + } + return array; + }, + getModtime: function(somePath){ + var file = new FileUtils.File(somePath); + return new Date(file.lastModifiedTime).toLocaleFormat("%Y-%m-%d %H:%M:%S"); + }, + closecreorga: function(){ + var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(Components.interfaces.nsIAppStartup); + appStartup.quit(Components.interfaces.nsIAppStartup.eForceQuit ); + }, + //restartapp: function(text) { + // + // if (window.confirm(text + "\nRedémarrer maintenant?")){ + // var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(Components.interfaces.nsIAppStartup); + // appStartup.quit(Components.interfaces.nsIAppStartup.eRestart | Components.interfaces.nsIAppStartup.eAttemptQuit); + // } + //}, + popup: function(title, msg) { + var image = null; + var win = Components.classes['@mozilla.org/embedcomp/window-watcher;1']. + getService(Components.interfaces.nsIWindowWatcher). + openWindow(null, 'chrome://global/content/alerts/alert.xul', + '_blank', 'chrome,titlebar=no,popup=yes', null); + win.arguments = [image, title, msg, false, '']; + return true; + }, + runcmdline: function(cmdlapp,args,callback){ + var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); + var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); + //dump(cmdlapp + " "+ JSON.stringify(args) + "\n"); + file.initWithPath(cmdlapp); + process.init(file); + //dump(cmdlapp + " "+ JSON.stringify(args) + "\n"); + process.runwAsync( args, args.length,callback); + return true; + }, + selectfile: function(lastdir,wmsg){ + var nsIFilePicker = Components.interfaces.nsIFilePicker; + var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); + fp.init(window, wmsg, nsIFilePicker.modeOpen); + fp.appendFilter("Database Files", "*.sqlite"); + var selfile = null; + if ((lastdir) && (lastdir != '')) { + var nsILocalFile= Components.interfaces.nsILocalFile; + var f = Components.classes["@mozilla.org/file/local;1"].createInstance(nsILocalFile); + f.initWithPath(lastdir); + fp.displayDirectory = f; + } + var res = fp.show(); + if (res != nsIFilePicker.returnCancel) { + selfile = fp.file; + } + return selfile; + }, + closeapp(){ + if (system.fileexists(system.profilerootdir() + system.sep() + 'vpncfg.txt')){ + if (system.os == "Darwin" && system.fileexists(system.toolsdir() + system.sep() + "vpnclose.sh")){ + system.runcmdline("/bin/bash",[system.toolsdir() + system.sep() + "vpnclose.sh",system.profilerootdir() + system.sep() + 'vpncfg.txt']); + } else { + system.runcmdline(system.toolsdir() + system.sep() + "ovpn.exe",["--disconnect"],null); + } + } + + + }, + selectvpnfile: function(lastdir,wmsg){ + var nsIFilePicker = Components.interfaces.nsIFilePicker; + var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); + fp.init(window, wmsg, nsIFilePicker.modeOpen); + fp.appendFilter("Private Key-File", "*.key"); + var selfile = null; + if ((lastdir) && (lastdir != '')) { + var nsILocalFile= Components.interfaces.nsILocalFile; + var f = Components.classes["@mozilla.org/file/local;1"].createInstance(nsILocalFile); + f.initWithPath(lastdir); + fp.displayDirectory = f; + } + var res = fp.show(); + if (res != nsIFilePicker.returnCancel) { + selfile = fp.file; + } + return selfile; + }, + loadconfig:function(tout){ + //dump("lc: timeout " + tout + "\n"); + + if (tout <= 0){ + //dump("set site cfg sites!\n") + var nx = { "view":"multisite","module":"support","header":"Configuration Sites"}; + apppref.setpreference("pageconfig.lastpage", nx); + navigation.load_deck(2); + return false; + } + tout = tout - 2000; + var r=curcfg.loadconfig(apppref.getpreference("support.database.currentdb.num")); + if (r === false){ + + setTimeout(function(){r = system.loadconfig(tout);},2000); + }else { + setTimeout(function(){navigation.load_deck(2);},2000); + } + return r; + }, + selectdirectory: function(lastdir,wmsg){ + try { + //var lastdir = apppref.getpreference("support.lastfiledir"); + var nsIFilePicker = Components.interfaces.nsIFilePicker; + var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); + fp.init(window, wmsg, nsIFilePicker.modeGetFolder); + //fp.appendFilter("PDF", "*.pdf"); + if ((lastdir) && (lastdir != '')) { + var nsILocalFile= Components.interfaces.nsILocalFile; + var f = Components.classes["@mozilla.org/file/local;1"].createInstance(nsILocalFile); + f.initWithPath(lastdir); + fp.displayDirectory = f; + } + var seldir = null; + var res = fp.show(); + if (res != nsIFilePicker.returnCancel) { + seldir = fp.file; + } + }catch(ex){ + system.popup("Erreur d'selct dir!","Une erreur s'est produite!\n"); + //"Error selecting folder! " + ex + "\n"); + } + return seldir; + }, + changelicense:function(){ + navigation.load_deck(1); + } + +} \ No newline at end of file diff --git a/js/old/tools.js b/js/old/tools.js new file mode 100644 index 0000000..8309684 --- /dev/null +++ b/js/old/tools.js @@ -0,0 +1,189 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +Components.utils["import"]("resource://gre/modules/NetUtil.jsm"); +Components.utils["import"]("resource://gre/modules/FileUtils.jsm"); +var tools = { + waitdlg: null, + movecreche: function(oldfolder,newfolder,cuuid,dbnum){ + //"Move Form: " + oldfolder + "\nTO: " + newfolder + "\nuuid:" + cuuid + "\ndbnum: " + dbnum + "\n"); + try { + var repdir = new FileUtils.File(oldfolder + system.sep() + 'reports' + system.sep() + cuuid); + //"Reports: " + repdir.path + "\n"); + var filearray = []; + var expdirarray = []; + expdirarray.push("reports"); + expdirarray.push("reports" + system.sep() + cuuid); + //get all reports + if (system.fileexists(repdir.path)){ + + //for (var d in dirarray){ + //dir = FileUtils.getDir("ProfD", ["reports",dirarray[d]], true); + + entries = repdir.directoryEntries; + //expdirarray.push("reports" + system.sep() + dirarray[d]); + while(entries.hasMoreElements()) { + var entry = entries.getNext().QueryInterface(Components.interfaces.nsIFile); + + if (entry.isFile()) { + filearray.push(entry.path); + } + } + } + //} + //get all imports + var impdir = new FileUtils.File(oldfolder + system.sep() + 'imports' + system.sep() + cuuid); + //"Imports: " + impdir.path + "\n"); + expdirarray.push("imports"); + expdirarray.push("imports" + system.sep() + cuuid); + if (system.fileexists(impdir.path)){ + //for (var d in dirarray){ + // dir = FileUtils.getDir("ProfD", ["imports",dirarray[d]], true); + entries = impdir.directoryEntries; + //expdirarray.push("imports" + system.sep() + dirarray[d]); + while(entries.hasMoreElements()) { + var entry = entries.getNext().QueryInterface(Components.interfaces.nsIFile); + + if (entry.isFile()) { + filearray.push(entry.path); + } + } + } + //create dirs in exportpath + var exportdir = new FileUtils.File(newfolder); + var fromdir = new FileUtils.File(oldfolder); + for (var ed in expdirarray){ + var cexpdir = new FileUtils.File( exportdir.path + system.sep() + expdirarray[ed]); + //cexpdir.path + "\n"); + if (!cexpdir.exists()) { + cexpdir.create(1,0755); + } + if (system.os != "WINNT") { + + } + } + //copy files + var filex= []; + //dump(JSON.stringify(filearray) + "\n"); + for (var f in filearray){ + var expfile = filearray[f]; + //dump("EXP FILE: " + expfile + "\n"); + var nfile = expfile.substring(fromdir.path.length); + //"n-file: " + nfile + "\n"); + var fname = system.getFileName(nfile); + + var dname = exportdir.path +system.getDirectory(nfile); + + var ef = new FileUtils.File(expfile); + var de = new FileUtils.File(dname); + //dump("from: "+ ef.path + " to folder: " + de.path +" fname: " + fname + "\n"); + ef.copyTo(de,fname); + //filex.push(nfile); + } + + var sqlfdb = FileUtils.File(fromdir.path + system.sep() + cuuid + ".sqlite"); + if (system.fileexists(sqlfdb.path)){ + //"Copy DB: " + sqlfdb.path + "\n"); + sqlfdb.copyTo(exportdir,cuuid + ".sqlite"); + }//var nzipfile = tools.backup(exportdir); + var strsitecfg = apppref.getpreference("support.database." + dbnum); + var jsitecfg = JSON.parse(strsitecfg); + jsitecfg.path.local=exportdir.path; + apppref.setpreference("support.database." + dbnum,jsitecfg); + if (curcfg.dbnum == dbnum){ + + curcfg.loadconfig(apppref.getpreference("support.database.currentdb.num")); + } + // + // + //var expdata = {"db":system.getFileName(nzipfile.path),"dir":expdirarray,"files":filex}; + // + //expfname = system.getFileName(nzipfile.path); + //expfname = expfname.substring(0,expfname.length-3) + "def"; + //system.WriteTextFile(JSON.stringify(expdata),exportdir.path + system.sep() + expfname); + system.popup("Export des données!","Les données ont été exportées vers "+ exportdir.path +"\n"); + }catch(ex){ + system.popup("Erreur d'Export!","L'export des données n'a pas completement fonctionné !\n"); + } + }, + readinvoicepdf: function(){ + try { + var lastdir = apppref.getpreference("support.lastfiledir"); + var nsIFilePicker = Components.interfaces.nsIFilePicker; + var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); + fp.init(window, "selectionner fichier PDF", nsIFilePicker.modeOpen); + fp.appendFilter("PDF", "*.pdf"); + if (lastdir != '') { + var nsILocalFile= Components.interfaces.nsILocalFile; + var f = Components.classes["@mozilla.org/file/local;1"].createInstance(nsILocalFile); + f.initWithPath(lastdir); + fp.displayDirectory = f; + } + var res = fp.show(); + if (res != nsIFilePicker.returnCancel) { + var pdffile = fp.file; + apppref.setpreference("support.lastfiledir",system.getDirectory(pdffile.path)); + + var cname = appdb.dbquery("select uuid from creche LIMIT 1;"); + cruuid = cname.sqldata[0].uuid; + var importpath = FileUtils.File(curcfg.path.local + system.sep() +"imports" + system.sep() + cruuid); + var args = ["-db",'"' + appdb.dbFile.path + '"',"-p",'"' +pdffile.path + '"',"-o",'"' + importpath.path + '"',"-t",'"' + system.toolsdir() + '"',"-x","inv","-l", '"' + system.profiledir() + system.sep() + 'importerror.log"']; + + var binpdf = system.toolsdir() + system.sep() + "pdfextract.exe"; + if (system.os != "WINNT") { + binpdf = system.toolsdir() + system.sep() + "pdfextract"; + } + //dump(binpdf + " " +JSON.stringify(args) + "\n"); + system.popup("Import Factures!","Import du PDF '"+ pdffile.path +"' en cours!\n"); + system.runcmdline(binpdf,args,function(data){ + var strx = apppref.getpreference("pageconfig.lastpage"); + var x = JSON.parse(strx); + + if (x.module == 'accounting') { + navigation.load_appview(x.view,x.module,null,x.header); + } + system.popup("Import Factures!","Les factures ont été importées!\n"); + }); + + } + } catch(ex){ + system.popup("Erreur d'import!","Une Erreur s'est produite pendant l'import des factures!\n"); + //dump("Error importing invoice PDF! " + ex + "\n"); + } + }, + readbenefitstatement: function(){ + try { + var lastdir = apppref.getpreference("support.lastfiledir"); + var nsIFilePicker = Components.interfaces.nsIFilePicker; + var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); + fp.init(window, "selectionner fichier PDF", nsIFilePicker.modeOpen); + fp.appendFilter("PDF", "*.pdf"); + if (lastdir != '') { + var nsILocalFile= Components.interfaces.nsILocalFile; + var f = Components.classes["@mozilla.org/file/local;1"].createInstance(nsILocalFile); + f.initWithPath(lastdir); + fp.displayDirectory = f; + } + var res = fp.show(); + if (res != nsIFilePicker.returnCancel) { + var pdffile = fp.file; + apppref.setpreference("support.lastfiledir",system.getDirectory(pdffile.path)); + + var cname = appdb.dbquery("select uuid from creche LIMIT 1;"); + cruuid = cname.sqldata[0].uuid; + var importpath = FileUtils.File(curcfg.path.local + system.sep() +"imports" + system.sep() + cruuid); + var args = ["-db",'"' + appdb.dbFile.path + '"',"-p",'"' + pdffile.path + '"',"-o",'"' + importpath.path +'"',"-t",'"' + system.toolsdir() + '"',"-x","stmt","-l",'"' + system.profiledir() + system.sep() + 'importerror.log"']; + var binpdf = system.toolsdir() + system.sep() + "pdfextract.exe"; + if (system.os != "WINNT") { + binpdf = system.toolsdir() + system.sep() + "pdfextract"; + } + system.runcmdline(binpdf,args,function(data){ + system.popup("Import Prestations!","Les Prestations ont été importées!\n"); + }); + } + } catch(ex){ + system.popup("Erreur d'import!","Une erreur s'est produite pendant l'import des prestations!\n"); + //dump("Error importing statement PDF! " + ex + "\n"); + } + } + +}; diff --git a/js/preferences.js b/js/preferences.js new file mode 100644 index 0000000..2823830 --- /dev/null +++ b/js/preferences.js @@ -0,0 +1,144 @@ +// var globalreq = { +// send_request: function(data){ + +// if (data.page){ +// if (data.data){ +// console.log(window.location.pathname); +// var page = data.page.substring(data.page.lastIndexOf("/") + 1); +// page = page.replace(/\.html/,''); +// console.log(page); +// $.ajax({ +// encoding:"UTF-8", +// url:'http://localhost:6060/app/preferences?page=' + page + '&set=' +encodeURIComponent('{"data":' + JSON.stringify(data.data) +'}') , +// crossDomain: true, +// success: function (data){ +// var result=data.result; +// }, +// error: function(data){ +// alert("Error:" + JSON.stringify(data)); +// console.log("Error:" + JSON.stringify(data)); +// }, +// async:false +// }); +// } + +// var path = "file://" +window.location.pathname.substring(0,window.location.pathname.indexOf('app') + 4); +// path = path + data.page + '?'; +// path += 'dbhosturl=' + apppref.curcfg.dbhosturl; +// path += '&dbpath=' + apppref.curcfg.dbpath; +// path += '&db=' + apppref.curcfg.db; +// path += '&hostname=' + apppref.curcfg.hostname; +// path += '&sitename=' + apppref.curcfg.sitename; +// window.location = path; +// } +// } +// } + +// var mpref ={ +// cfg: null, +// getSearchParams: function (k){ +// //alert(location.href); +// var p={}; +// console.log("params =>" + location.search); +// location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v}); +// return k?p[k]:p; +// }, +// loadconfig: function(){ +// this.cfg = this.getSearchParams(); +// console.log(this.cfg); +// //var page = location.pathname.substring(location.pathname.lastIndexOf("/")); +// //page = page.replace(/\.html/,''); +// //apppref.getpreference(page); +// appdb.dbfile = this.cfg.dbfile; +// appdb.serviceurl = this.cfg.serviceurl; +// //$("#current_site").html(decodeURI(this.curcfg.sitename)); +// }, +// // loadprintconfig: function(){ +// // this.curcfg = this.getSearchParams(); + +// // var page = location.pathname.substring(location.pathname.lastIndexOf("/")); +// // page = page.replace(/\.html/,''); +// // page = page.replace(/report_/,''); +// // console.log("current Config!"); +// // console.log(this.curcfg); +// // apppref.getpreference(page); +// // appdb.dbfile = ((this.curcfg.dbpath)?this.curcfg.dbpath + "/":"") + this.curcfg.db; +// // appdb.url = "http://localhost:6060/sqlite?"; +// // $("#current_site").html(decodeURI(this.curcfg.sitename)); +// // }, +// // setpreference:function(section,key,value){ +// // if (!apppref.curcfg.pageconfig[section]){ +// // apppref.curcfg.pageconfig[section] = {}; +// // } +// // apppref.curcfg.pageconfig[section][key] = value; + +// // var page = location.pathname.substring(location.pathname.lastIndexOf("/")); +// // page = page.replace(/\.html/,''); +// // $.ajax({ +// // encoding:"UTF-8", +// // url:'http://localhost:6060/app/preferences?page=' + page + '&set=' +encodeURIComponent(JSON.stringify(apppref.curcfg.pageconfig)) , +// // crossDomain: true, +// // success: function (data){ +// // var result=data.result; +// // }, +// // error: function(data){ +// // alert("Error:" + JSON.stringify(data)); +// // console.log("Error:" + JSON.stringify(data)); +// // } +// // }); +// // }, +// // getpreference: function(key){ +// // apppref.curcfg['pageconfig'] = {}; +// // $.ajax({ +// // encoding:"UTF-8", +// // url:'http://localhost:6060/app/preferences?page=' + key , +// // crossDomain: true, +// // success: function (data){ +// // if (data.result){ +// // apppref.curcfg.pageconfig = data.result; +// // } + +// // }, +// // error: function(data){ +// // alert("Error:" + JSON.stringify(data)); +// // console.log("Error:" + JSON.stringify(data)); +// // }, +// // async:false +// // }); + +// // }, +// // getforeignpreference: function(key){ +// // var ret = null; +// // $.ajax({ +// // encoding:"UTF-8", +// // url:'http://localhost:6060/app/preferences?page=' + key , +// // crossDomain: true, +// // success: function (data){ +// // if (data.result){ +// // ret = data.result; +// // } + +// // }, +// // error: function(data){ +// // alert("Error:" + JSON.stringify(data)); +// // console.log("Error:" + JSON.stringify(data)); +// // }, +// // async:false +// // }); +// // return ret +// // }, +// // getCookie: function(cname) { +// // var name = cname + "="; +// // var ca = document.cookie.split(';'); +// // for(var i = 0; i < ca.length; i++) { +// // var c = ca[i]; +// // while (c.charAt(0) == ' ') { +// // c = c.substring(1); +// // } +// // if (c.indexOf(name) == 0) { +// // return c.substring(name.length, c.length); +// // } +// // } +// // return ""; +// // } +// } diff --git a/js/webdatabase.js b/js/webdatabase.js new file mode 100644 index 0000000..4dfc7bc --- /dev/null +++ b/js/webdatabase.js @@ -0,0 +1,80 @@ +var appdb = { + dbfile: null, + url: null, + dbquery: function(sQuery){ + var type='querysorted'; + var result= {sqldata:[]}; + //console.log(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery)); + //dump(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n"); + $.ajax({ + encoding:"UTF-8", + url:this.url + '&db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) , + crossDomain: true, + success: function (data){ + //dump(data + "\n"); + result=data.result; + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + return result; + }, + dbqueryarray: function(sQuery){ + var type='queryarray'; + var result= {sqldata:[]}; + //console.log(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery)); + //alert(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n"); + $.ajax({ + encoding:"UTF-8", + url:this.url + '&db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) , + crossDomain: true, + success: function (data){ + result=data.result; + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + return result; + }, + dbexec: function(sQuery){ + var type='exec'; + var result= {sqldata:[]}; + //dump(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n"); + console.log(this.url + '&db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) ); + $.ajax({ + encoding:"UTF-8", + url:this.url + '&db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) , + crossDomain: true, + success: function (data){ + result=data.result; + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + return result; + }, +// b64EncodeUnicode: function (str) { +// // first we use encodeURIComponent to get percent-encoded UTF-8, +// // then we convert the percent encodings into raw bytes which +// // can be fed into btoa. +// return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, +// function toSolidBytes(match, p1) { +// return String.fromCharCode('0x' + p1); +// })); +// }, + generate_uuid: function(){ + return this.s4() + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' + this.s4() + this.s4() + this.s4(); + }, + s4: function(){ + return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); + } +} \ No newline at end of file diff --git a/js/webpreferences.js b/js/webpreferences.js new file mode 100644 index 0000000..4ee957f --- /dev/null +++ b/js/webpreferences.js @@ -0,0 +1,144 @@ +var globalreq = { + send_request: function(data){ + + if (data.page){ + if (data.data){ + console.log(window.location.pathname); + var page = data.page.substring(data.page.lastIndexOf("/") + 1); + page = page.replace(/\.html/,''); + console.log(page); + $.ajax({ + encoding:"UTF-8", + url:'http://localhost:6060/app/preferences?page=' + page + '&set=' +encodeURIComponent('{"data":' + JSON.stringify(data.data) +'}') , + crossDomain: true, + success: function (data){ + var result=data.result; + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + } + + var path = "file://" +window.location.pathname.substring(0,window.location.pathname.indexOf('app') + 4); + path = path + data.page + '?'; + path += 'dbhosturl=' + apppref.curcfg.dbhosturl; + path += '&dbpath=' + apppref.curcfg.dbpath; + path += '&db=' + apppref.curcfg.db; + path += '&hostname=' + apppref.curcfg.hostname; + path += '&sitename=' + apppref.curcfg.sitename; + window.location = path; + } + } +} + +var apppref ={ + curcfg: null, + getSearchParams: function (k){ + //alert(location.href); + var p={}; + console.log("params =>" + location.search); + location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v}); + return k?p[k]:p; + }, + loadconfig: function(){ + this.curcfg = this.getSearchParams(); + console.log(this.curcfg); + var page = location.pathname.substring(location.pathname.lastIndexOf("/")); + page = page.replace(/\.html/,''); + apppref.getpreference(page); + appdb.dbfile = ((this.curcfg.dbpath)?this.curcfg.dbpath + "/":"") + this.curcfg.db; + appdb.url = "http://localhost:6060/sqlite?"; + $("#current_site").html(decodeURI(this.curcfg.sitename)); + }, + loadprintconfig: function(){ + this.curcfg = this.getSearchParams(); + + var page = location.pathname.substring(location.pathname.lastIndexOf("/")); + page = page.replace(/\.html/,''); + page = page.replace(/report_/,''); + console.log("current Config!"); + console.log(this.curcfg); + apppref.getpreference(page); + appdb.dbfile = ((this.curcfg.dbpath)?this.curcfg.dbpath + "/":"") + this.curcfg.db; + appdb.url = "http://localhost:6060/sqlite?"; + $("#current_site").html(decodeURI(this.curcfg.sitename)); + }, + setpreference:function(section,key,value){ + if (!apppref.curcfg.pageconfig[section]){ + apppref.curcfg.pageconfig[section] = {}; + } + apppref.curcfg.pageconfig[section][key] = value; + + var page = location.pathname.substring(location.pathname.lastIndexOf("/")); + page = page.replace(/\.html/,''); + $.ajax({ + encoding:"UTF-8", + url:'http://localhost:6060/app/preferences?page=' + page + '&set=' +encodeURIComponent(JSON.stringify(apppref.curcfg.pageconfig)) , + crossDomain: true, + success: function (data){ + var result=data.result; + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + } + }); + }, + getpreference: function(key){ + apppref.curcfg['pageconfig'] = {}; + $.ajax({ + encoding:"UTF-8", + url:'http://localhost:6060/app/preferences?page=' + key , + crossDomain: true, + success: function (data){ + if (data.result){ + apppref.curcfg.pageconfig = data.result; + } + + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + + }, + getforeignpreference: function(key){ + var ret = null; + $.ajax({ + encoding:"UTF-8", + url:'http://localhost:6060/app/preferences?page=' + key , + crossDomain: true, + success: function (data){ + if (data.result){ + ret = data.result; + } + + }, + error: function(data){ + alert("Error:" + JSON.stringify(data)); + console.log("Error:" + JSON.stringify(data)); + }, + async:false + }); + return ret + }, + getCookie: function(cname) { + var name = cname + "="; + var ca = document.cookie.split(';'); + for(var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') { + c = c.substring(1); + } + if (c.indexOf(name) == 0) { + return c.substring(name.length, c.length); + } + } + return ""; + } +} diff --git a/main.js b/main.js new file mode 100644 index 0000000..17d57ce --- /dev/null +++ b/main.js @@ -0,0 +1,83 @@ +// Modules to control application life and create native browser window +const {app, BrowserWindow} = require('electron') +const path = require('path') +const url = require('url') +const os = require('os') +const {ipcMain} = require('electron') +var child = require('child_process').execFile; +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +let mainWindow +let userdatapath = app.getPath('userData'); + + +function createWindow () { + // Create the browser window. + var executablePath = ""; + var parameters = []; + if (os.platform() == "win32"){ + executablePath = "C:\\Strawberry\\perl\\bin\\perl.exe"; + parameters = ["C:\\Users\\ksaff\\Workspace\\DKSService\\dkslocalserver.pl"]; + } else { //os.platform() == "darwin" + executablePath = "/Users/kilian/perl5/perlbrew/perls/perl-5.28.1/bin/perl"; + parameters = ["/Users/kilian/Workspace/DKSService/dkslocalserver.pl"]; + } + + mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true + } + }) + + // and load the index.html of the app. + mainWindow.loadFile('index.html') + mainWindow.setMenu(null) + mainWindow.maximize() + child(executablePath, parameters, function(err, data) { + if(err){ + console.error('stderr',err); + } else { + + + win.show() + } + + }); + mainWindow.show() + // Open the DevTools. + mainWindow.webContents.openDevTools() + + // Emitted when the window is closed. + mainWindow.on('closed', function () { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null + }) +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.on('ready', createWindow) + +// Quit when all windows are closed. +app.on('window-all-closed', function () { + // On macOS it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + //if (process.platform !== 'darwin') { + app.quit() + //} +}) + +app.on('activate', function () { + // On macOS it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (mainWindow === null) { + createWindow() + } +}) + +// In this file you can include the rest of your app's specific main process +// code. You can also put them in separate files and require them here. diff --git a/modules/accounting/accounting.html b/modules/accounting/accounting.html new file mode 100644 index 0000000..be04fec --- /dev/null +++ b/modules/accounting/accounting.html @@ -0,0 +1,192 @@ + + + + + + + Décompte + + + + + + + + + + + + + + + + + + + +
+
+
+ du mois: + + +
+ + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/modules/accounting/accounting.xul b/modules/accounting/accounting.xul new file mode 100644 index 0000000..4ad1aed --- /dev/null +++ b/modules/accounting/accounting.xul @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/modules/accounting/accountingchild.html b/modules/accounting/accountingchild.html new file mode 100644 index 0000000..6ff7f84 --- /dev/null +++ b/modules/accounting/accountingchild.html @@ -0,0 +1,189 @@ + + + + + + + Décompte Enfant + + + + + + + + + + + + + + + + + + + +
+
+
+ du année: + + +
+
+ du enfant: + +
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/logbook/logbook.xul b/modules/logbook/logbook.xul new file mode 100644 index 0000000..559a5b5 --- /dev/null +++ b/modules/logbook/logbook.xul @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/logbook/logbook_basic.xul b/modules/logbook/logbook_basic.xul new file mode 100644 index 0000000..802382e --- /dev/null +++ b/modules/logbook/logbook_basic.xul @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/logbook/logchild.html b/modules/logbook/logchild.html new file mode 100644 index 0000000..b8c316b --- /dev/null +++ b/modules/logbook/logchild.html @@ -0,0 +1,126 @@ + + + + + + Livret d'évaluation des enfants + + + + + + + + + + + + + + + + + + + +
+
+
+ date du: + + +
+ + + +
+
+ + + + + + + +
+ +
+ + + +
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/logbook/logcominterne.html b/modules/logbook/logcominterne.html new file mode 100644 index 0000000..79ddc8d --- /dev/null +++ b/modules/logbook/logcominterne.html @@ -0,0 +1,165 @@ + + + + + + Communication interne + + + + + + + + + + + + + + + + + + + + +
+
+
+ du mois: + + +
+ + + + +
+
+ + + + + + + +
+
+ + + +
+ +
Titre:
+
Date:
+ +
+ +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/logbook/logcominterne_basic.html b/modules/logbook/logcominterne_basic.html new file mode 100644 index 0000000..0d82130 --- /dev/null +++ b/modules/logbook/logcominterne_basic.html @@ -0,0 +1,163 @@ + + + + + + Communication interne + + + + + + + + + + + + + + + + + + + + +
+
+
+ du mois: + + +
+ + + + +
+
+ + + + + + + +
+
+ +
+ +
Titre:
+
Date:
+ +
+ +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/logbook/logstaff.html b/modules/logbook/logstaff.html new file mode 100644 index 0000000..e69de29 diff --git a/modules/presences/dailypresences.html b/modules/presences/dailypresences.html new file mode 100644 index 0000000..30fdcc6 --- /dev/null +++ b/modules/presences/dailypresences.html @@ -0,0 +1,174 @@ + + + + + + + Présences par jour + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ Date du: + +
+ + + + + +
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + diff --git a/modules/presences/img/presence.png b/modules/presences/img/presence.png new file mode 100644 index 0000000000000000000000000000000000000000..545d90b1db901a7a7cef88a0ed80a1cb30185c9e GIT binary patch literal 804 zcmV+<1Ka$GP)8z)?O!V6Q}?348!< z=Y-$4+MCvaAmu};Wf2kl zj`$+C0IU5^`Qxn=5#(6;I52Lt4+{y13QUSHDH2)m8ZcqCZy2Y}$WF;GKtwcwd(vR) z1>iSVz~m6okcdrL?bnS{!?H!Ig;UTXq5;fGpI=Wo;l^aU zMM6h`{b{}{d6SwTB20k;^kn(16sasp$E+O9b=eJ#7`(MnHA@u`E6h3R4KJnnOpCZy z3yTP-7^e;th{UoS!AtF0v~g-D(3|Be0N%^3s2ivmr*hqjB-h^)ddV)?HGT5xi`=-{ z3aA0Aa%mg}P8g>)dnt{qQx?=E&r`s+Bmr;bio7DvJ(O!#fQ9Im{8tS~K3Ao&yekp> iQ3~{_^p-9AKkW}?KmqjjYv$Gf0000' + + }, + 1: { + text: "success", + class: "btn-success", + icon: '' + + }, + 2: { + text: "warning", + class: "btn-warning", + icon: '' + }, + 3: { + text: "danger", + class: "btn-danger", + icon: '' + }, + 31: { + text: "absent2", + class: "btn-absent2", + icon: '' + }, + 4: { + text: "info", + class: "btn-info", + icon: '' + }, + 5: { + text: "primary", + class: "btn-primary", + icon: '' + } +}; + +function initdata() { + load_helpers(); + $('input').on("click", function () { + $(this).select(); + }); + var pdata = apppref.getpreference("pageconfig.dailypresences"); + if (pdata !== '') { + pconfig = JSON.parse(pdata); + } + pconfig.printlayout = 'multilist'; + apppref.setpreference("pageconfig.dailypresences",pconfig); + + if (pconfig.presday) { + initdate = new Date(encodeparam(pconfig.presday, 'date').replace(/'/g, '')); + + $("#presday").val(pconfig.presday); + }else{ + $("#presday").val(initdate.toLocaleFormat('%d.%m.%Y')); + } + $("#presday").on("dp.hide", function () { + change_day(); + }); + set_infoheader(""); + cdate = initdate.toLocaleFormat('%Y-%m-%d'); + var daygroupsql = "SELECT ch.uuid as childuuid, ch.prename || ' ' || ch.surname AS childname, "+ + "gr.uuid as groupuuid, gr.grpname as grpname, " + + "pr.begintime1 as begintime1, pr.endtime1 as endtime1, pr.begintime2 as begintime2, pr.endtime2 as endtime2, pr.status as status, pr.lunch as lunch, "+ + wdays[weekday]+"timebegin as plantimebegin, "+wdays[weekday]+"timeend as plantimeend, "+ + wdays[weekday]+"timebegin2 as plantimebegin2, "+wdays[weekday]+"timeend2 as plantimeend2, "+wdays[weekday]+"lunch as planlunch , "+ + "case when pr.childuuid is not null then 'upd' else 'ins' end as ddltype "+ + "from childs ch "+ + "LEFT JOIN presence pr ON (pr.childuuid = ch.uuid and pr.daydate = date('"+cdate+"')) "+ + "left join planning pl on (pl.childuuid = ch.uuid and date('"+cdate+"') between pl.datebegin and pl.dateend ) "+ + "LEFT JOIN groups gr ON (pl.groupuuid = gr.uuid) "+ + " where ch.entrydate <= date('"+cdate+"') and ch.leavedate >= date('"+cdate+"')"; + set_infoheader("Date du " + initdate.toLocaleFormat("%d.%m.%Y")); + //jsdump("DAY GROUP SQL"); + //jsdump(daygroupsql); + var dpresdata = appdb.dbquery(daygroupsql); + + var headerdata = getlabels("act,grpname,childname,effectiftime,status,plannedtime"); + + var headdata = ""; + for (var h=0;h'; + } + } + $("#tbldailypresences > thead").append('' + headdata+ ''); + var dpdata = dpresdata.sqldata; + + for (var b in dpdata){ + var row = dpdata[b]; + var rdata = ''+ row.grpname +''+row.childname+''; + + rdata += '
'+ + ' de: '+ + '
' + + '
'+ + ' à: '+ + '
'+ + '
' + + 'et de: '+ + '
' + + '
'+ + ' à: '+ + '
'+ + '
' + + '

'; + rdata += ''+ + '
' + + '' +'
' + + '
' + + ''; + rdata += ''+row.plantimebegin +' - ' + row.plantimeend + ''+ ((row.planlunch == "1")?' ()':'')+''+ + ((row.plantimebegin2 != '')?'
'+row.plantimebegin2 +' - ' + row.plantimeend2 + '':'')+ + ''; + + + $("#tbldailypresences > tbody").append(''+rdata+''); + } + // // + $("#tbldailypresences").dataTable({ + "language": { + "url": "js/locale/datatable_fr.json" + }, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "info": false, + "ordering": true, + "filter": true, + "destroy": true + }); + + $('input[id^="txt"]').on('keydown',function(e){ + var keycode = e.keyCode || e.which; + //jsdump(keycode); + if ( keycode == 9 ){ + + $(this).next('input').focus(); + //savetime(e); + } + + }); + $('input[id^="txt"]').focusout(function(e){ + savetime($(this)); + }); + + setallpresences(); + +} + + +function savetime(obj){ + var fdata =obj.attr('id').split("_"); + var timeval = obj.val(); + var ddltype = $("#" + fdata[1]+ "_ddltype").html(); + + var psqltime = ""; + if (timeval == ''){ + timeval='null'; + }else{ + timeval = timeval.replace(/[^\d]/g, '') + "0000"; + timeval = timeval.substring(0,2) + ":" + timeval.substring(2,4); + $("#" + obj.attr('id')).val(timeval); + timeval = "'" + timeval + "'"; + } + + + if (ddltype == 'upd'){ + + if (fdata[0] == "txtbegintime1"){ + psqltime = "update presence set begintime1="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');"; + } else if (fdata[0] == "txtendtime1"){ + psqltime = "update presence set endtime1="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');"; + } else if (fdata[0] == "txtbegintime2"){ + psqltime = "update presence set begintime2="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');"; + } else if (fdata[0] == "txtendtime2") { + psqltime = "update presence set endtime2="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');"; + } else { + return false; + } + } else if (ddltype == 'ins'){ + var xfield = fdata[0].substring(3); + var psqltime = "INSERT INTO presence (status,childuuid,daydate,lunch,"+xfield+") VALUES "; + psqltime += "(1,'" + fdata[1] + "',date('" + initdate.toLocaleFormat("%Y-%m-%d") + "')," + + ((($("#planlunch_" + fdata[1]).exists()) && ($("#planlunch_" + fdata[1]).html() != ''))?"'1'":'null') + ","+timeval+");"; + } + if (psqltime !== ""){ + + appdb.dbexec(psqltime); + if (ddltype == 'ins'){ + $("#" + fdata[1]+ "_ddltype").html('upd'); + } + } +} + +function setlunch(childuuid,status) { + + var lunch = 'null'; + if (status == 1) { + $("#btn_" + childuuid+ "_lunch").removeClass('btn-default'); + $("#btn_" + childuuid+ "_lunch").addClass('btn-success'); + lunch = "'1'"; + } else { + $("#btn_" + childuuid+ "_lunch").removeClass('btn-success'); + $("#btn_" + childuuid+ "_lunch").addClass('btn-default'); + lunch = "'0'"; + } + + appdb.dbexec("update presence set lunch=" + lunch + " where daydate=date('" + initdate.toLocaleFormat("%Y-%m-%d") + "') and childuuid='" + childuuid + "';"); + +} + +function setpresence(childuuid,newstatus) { + + var ddltype = $("#" + childuuid + "_ddltype").html(); + + var usql = ""; + if (newstatus == 0){ + $("#btn_" + childuuid + "_lunch").css("display", "none"); + } else { + $("#btn_" + childuuid + "_lunch").css("display", ""); + } + if ((ddltype=='ins') && (newstatus != 0)){ + + usql = "INSERT INTO presence (status,childuuid,daydate,lunch) "+ + "VALUES (" + newstatus + ",'" + childuuid + "',date('" + initdate.toLocaleFormat("%Y-%m-%d") + "')," + + ((($("#planlunch_" + childuuid).exists()) && ($("#planlunch_" + childuuid).html() != '') && newstatus==1)?"'1'":'null') + ");"; + + } else if (newstatus == 0) { + + usql = "DELETE FROM presence where childuuid='" + childuuid + "' and daydate=date('" + initdate.toLocaleFormat("%Y-%m-%d") + "');"; + $("#txtbegintime1_" + childuuid).val(''); + $("#txtendtime1_" + childuuid).val(''); + $("#txtbegintime2_" + childuuid).val(''); + $("#txtendtime2_" + childuuid).val(''); + $("#btn_" + childuuid+ "_lunch").removeClass('btn-success'); + $("#btn_" + childuuid+ "_lunch").addClass('btn-default'); + + } else { + var usql = "UPDATE presence SET status=" + newstatus + " where childuuid='" + childuuid + "' and daydate=date('" + initdate.toLocaleFormat("%Y-%m-%d") + "');"; + + } + appdb.dbexec(usql); + $("#" + childuuid + "_ddltype").html("upd"); + $("#btn_" + childuuid).attr("class","btn " + presenceids[newstatus].class + " dropdown-toggle"); + $("#btn_" + childuuid).html(presenceids[newstatus].icon); + + if (newstatus != 0 && newstatus != 1 && newstatus != 5){ + $("#frm_" + childuuid).css("display","none"); + }else { + $("#frm_" + childuuid).css("display",""); + } + + if (($("#planlunch_" + childuuid).exists()) && ($("#planlunch_" + childuuid).html() != '') && newstatus == 1){ + setlunch(childuuid,1); + } + +} + +function setalltopresent(){ + $('body').css('cursor','wait'); + + $("button[id^=btn_]").each( + function(){ + if (($(this).attr("id").indexOf("lunch") == -1) && ($(this).attr("class").indexOf("btn-default") != -1)) { + var btnspl =$(this).attr("id").split("_"); + setpresence(btnspl[1],1); + } + + } + ); + $('body').css('cursor','auto'); +} + +function change_day() { + pconfig.presday = $('#presday').val(); + + apppref.setpreference("pageconfig.dailypresences",pconfig); + globelreq.send_request({ + page: 'dailypresences', + module: 'presences', + data: null, + header: 'Présences par jour' + }); +} + +function setallpresences() { + var prsql = "select daydate,childuuid,status,lunch from presence where daydate = date('" +initdate.toLocaleFormat("%Y-%m-%d") + "');"; + var presdata = appdb.dbquery(prsql); + presdata = presdata.sqldata; + if (presdata) { + for (var p in presdata) { + if ($("#btn_" + presdata[p].childuuid ).exists()) { + $("#btn_" + presdata[p].childuuid).attr("class","btn " + presenceids[presdata[p].status].class + " dropdown-toggle"); + $("#btn_" + presdata[p].childuuid).html(presenceids[presdata[p].status].icon); + $("#btn_" + presdata[p].childuuid + "_lunch").css("display",""); + } + if (presdata[p].lunch == 1){ + $("#btn_" + presdata[p].childuuid + "_lunch").attr("class","btn btn-success dropdown-toggle"); + + } + + + } + } +} + +function onpreviousday() { + pconfig.presday = $('#presday').val(); + var tmpweek = new Date(encodeparam(pconfig.presday, 'date').replace(/'/g, '')); + var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-1); + if (nweek.getDay() == 0){ + nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-2); + } +// if (nweek.getDay() == 6){ +// nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-2); +// } + pconfig.presday = nweek.toLocaleFormat('%d.%m.%Y'); + apppref.setpreference("pageconfig.dailypresences",pconfig); + globelreq.send_request({ + page: 'dailypresences', + module: 'presences', + data: null, + header: 'Présences par jour' + }); +} + +function onnextday() { + pconfig.presday = $('#presday').val(); + var tmpweek = new Date(encodeparam(pconfig.presday, 'date').replace(/'/g, '')); + var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+1); + if (nweek.getDay() == 0){ + nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+2); + } +// if (nweek.getDay() == 6){ +// nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+3); +// } + pconfig.presday = nweek.toLocaleFormat('%d.%m.%Y'); + apppref.setpreference("pageconfig.dailypresences",pconfig); + globelreq.send_request({ + page: 'dailypresences', + module: 'presences', + data: null, + header: 'Présences par jour' + }); +} + +function timefocus(obj){ + if (!obj.value || obj.value == ''){ + var currentdate = new Date(); + obj.value=currentdate.toLocaleFormat("%H:%M"); + } + obj.select(); +} + + + diff --git a/modules/presences/js/weeklypresences.js b/modules/presences/js/weeklypresences.js new file mode 100644 index 0000000..2a280ca --- /dev/null +++ b/modules/presences/js/weeklypresences.js @@ -0,0 +1,464 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +var pconfig = { + "groupuuid": null, + "presweek": null +}; +var weekdates = null; +var initdate = new Date(); +var cdate = initdate.toLocaleFormat('%Y-%m-%d'); +var wh= window.innerHeight -190; +var groups = {}; +var tableheadssql = ""; + +var presences = { + "btn-default": { + class: "btn-success", + icon: '', + nextdata: 1 + }, + "btn-success": { + class: "btn-warning", + icon: '', + nextdata: 2 + }, + "btn-warning": { + class: "btn-danger", + icon: '', + nextdata: 3 + }, + "btn-absent2": { + class: "btn-absent2", + icon: '', + nextdata: 31 + }, + "btn-danger": { + class: "btn-info", + icon: '', + nextdata: 4 + }, + "btn-info": { + class: "btn-primary", + icon: '', + nextdata: 5 + }, + "btn-primary": { + class: "btn-default", + icon: '', + nextdata: null + } +}; + +var presenceids = { + 1: { + class: "btn-success", + icon: '', + nextdata: 1 + }, + 2: { + class: "btn-warning", + icon: '', + nextdata: 2 + }, + 3: { + class: "btn-danger", + icon: '', + nextdata: 3 + }, + 31: { + class: "btn-absent2", + icon: '', + nextdata: 31 + }, + 4: { + class: "btn-primary", + icon: '', + nextdata: 4 + }, + 5: { + class: "btn-info", + icon: '', + nextdata: 5 + } +}; + +function initdata() { + load_helpers(); + var pdata = apppref.getpreference("pageconfig.weeklypresences"); + if (pdata !== '') { + pconfig = JSON.parse(pdata); + } + pconfig.printlayout = 'multilist'; + apppref.setpreference("pageconfig.weeklypresences",pconfig); + + if (pconfig.presweek) { + initdate = new Date(encodeparam(pconfig.presweek, 'date').replace(/'/g, '')); + + $("#presweek").val(pconfig.presweek); + }else{ + $("#presweek").val(initdate.toLocaleFormat('%d.%m.%Y')); + } + $("#presweek").on("dp.hide", function () { + change_week(); + }); + set_infoheader(""); + cdate = initdate.toLocaleFormat('%Y-%m-%d'); + + weekdates = appdb.dbquery("select weekdaybegin as mon, date(weekdaybegin,'+1 day') as tue, date(weekdaybegin,'+2 days') as wed, date(weekdaybegin,'+3 days') as thu, date(weekdaybegin,'+4 days') as fri from (select case when strftime('%w','" + cdate + "') = '1' then strftime('%Y-%m-%d','" + cdate + "') else strftime('%Y-%m-%d', date(date('" + cdate + "','-7 days'),'weekday 1')) end as weekdaybegin) "); + + tableheadssql = "select 'Lundi, ' || strftime('%d.%m.%Y',weekdaybegin) as monday, 'Mardi, ' || strftime('%d.%m.%Y',date(weekdaybegin,'+1 day')) as tuesday, 'Mercredi, ' || strftime('%d.%m.%Y',date(weekdaybegin,'+2 days')) as wednesday, 'Jeudi, ' || strftime('%d.%m.%Y',date(weekdaybegin,'+3 days')) as thursday, 'Vendredi, ' || strftime('%d.%m.%Y',date(weekdaybegin,'+4 days')) as friday from (select case when strftime('%w','" + cdate + "') = '1' then strftime('%Y-%m-%d','" + cdate + "') else strftime('%Y-%m-%d', date(date('" + cdate + "','-7 days'),'weekday 1')) end as weekdaybegin);"; + + var tblheads = appdb.dbquery(tableheadssql); + weekdates = weekdates.sqldata[0]; + + groups = appdb.dbquery("select grpname,uuid as groupuuid,minage,maxage from groups UNION select 'Pas de groupe' as grpname,null as uuid,(select max(maxage) from creche) as minage,(select max(maxage) from creche) as maxage order by minage,maxage"); + set_infoheader("Semaine du " + tblheads.sqldata[0].monday + " au " + tblheads.sqldata[0].friday); + groups = groups.sqldata; + + var tblgrpsql = "SELECT childname, MAX(monplan) AS monplan, MAX(monlunchplan) AS monlunchplan, MAX(tueplan) AS tueplan, MAX(tuelunchplan) AS tuelunchplan, MAX(wedplan) AS wedplan, MAX(wedlunchplan) AS wedlunchplan, MAX(thuplan) AS thuplan, MAX(thulunchplan) AS thulunchplan, MAX(friplan) AS friplan, MAX(frilunchplan) AS frilunchplan FROM ( SELECT ' ' || ch.prename || ' ' || ch.surname AS childname, "; + var vacdates = appdb.dbqueryarray("select CAST(strftime(\"%w\",vacancydate) as INT)-1 as wdnum from vacancy where vacancydate between '"+weekdates.mon+"' and '"+weekdates.fri+"' and vacancydateto is null;" ); + var vacrem = ""; + if (vacdates) { + vacdates = vacdates.sqldata; + vacrem = vacdates.join(','); + } + var wda = ['mon','tue','wed','thu','fri','sat']; + var wdsa = []; + for (var w in wda){ + + if (vacrem.indexOf(w) != -1) { + wdsa.push("null as "+wda[w]+"plan,null AS "+wda[w]+"lunchplan"); + } else { + + wdsa.push(" CASE WHEN pl."+wda[w]+"timebegin != '00:00' AND '" + weekdates[wda[w]] + "' BETWEEN pl.datebegin AND pl.dateend THEN '' ELSE '' END AS "+wda[w]+"plan, " + + " CASE WHEN pl."+wda[w]+"timebegin != '00:00' AND '" + weekdates[wda[w]] + "' BETWEEN pl.datebegin AND pl.dateend THEN '' ELSE NULL END AS "+wda[w]+"lunchplan" ); + } + + } + tblgrpsql += wdsa.join(",") + + " FROM planning pl LEFT JOIN childs ch ON ( pl.childuuid=ch.uuid) LEFT JOIN groups gr ON ( pl.groupuuid=gr.uuid) WHERE gr.uuid%%goupuuid%% AND (( pl.datebegin <= '" + weekdates.mon + "' AND pl.dateend >= '" + weekdates.mon + "') OR ( pl.datebegin <= '" + weekdates.tue + "' AND pl.dateend >= '" + weekdates.tue + "') OR ( pl.datebegin <= '" + weekdates.wed + "' AND pl.dateend >= '" + weekdates.wed + "') OR ( pl.datebegin <= '" + weekdates.thu + "' AND pl.dateend >= '" + weekdates.thu + "') OR ( pl.datebegin <= '" + weekdates.fri + "' AND pl.dateend >= '" + weekdates.fri + "') ) ) chpr GROUP BY childname ORDER BY childname"; + for (var g in groups) { + if (groups[g].groupuuid !== '') { + $("#dlg_changegrp #groupuuid").append(''); + } + + $("#tabgrouphead").append('
  • ' + groups[g].grpname + '
  • '); + $("#tabgroupbody").append('
    '); + var cgrpsql = tblgrpsql.replace('%%goupuuid%%', "='" +groups[g].groupuuid + "'"); + if (groups[g].groupuuid === '') { + cgrpsql = tblgrpsql.replace('%%goupuuid%%', " is null"); + } + + var grpdata = appdb.dbqueryarray(cgrpsql); + + var headerdata = getlabels(grpdata.sqlhead.join(",")); + + $("#tabgrp_" + groups[g].groupuuid).append('
    '); + + $("#tblgrp_" + groups[g].groupuuid + " > thead").append('Enfant' + tblheads.sqldata[0].monday + '' + tblheads.sqldata[0].tuesday + '' + tblheads.sqldata[0].wednesday + '' + tblheads.sqldata[0].thursday + '' + tblheads.sqldata[0].friday + ''); + var headdata = ""; + for (var h=0;h'; + } + } + $("#tblgrp_" + groups[g].groupuuid + " > thead").append('' + headdata+ ''); + grpdata = grpdata.sqldata; + for (var b in grpdata){ + var xdata = grpdata[b]; + $("#tblgrp_" + groups[g].groupuuid + " > tbody").append(''+xdata.join('')+''); + } + // + $("#tblgrp_" + groups[g].groupuuid).dataTable({ + "language": { + "url": "js/locale/datatable_fr.json" + }, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "info": false, + "ordering": true, + "filter": true, + "destroy": true + }); + } + + setallpresences(); + $('#tabgrouphead a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + var tn = e.target.toString(); + pconfig.groupuuid = tn.substring(tn.lastIndexOf("#")+8); + pconfig.activetab = 'tblgrp_' +pconfig.groupuuid; + apppref.setpreference("pageconfig.weeklypresences",pconfig); + + $("#tblgrp_" + pconfig.groupuuid).dataTable({ + "language": { + "url": "js/locale/datatable_fr.json" + }, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "info": false, + "ordering": true, + "filter": true, + "destroy": true + }); + }); + if (!pconfig.groupuuid) { + $('#tabgrouphead a[href="#tabgrp_' + groups[0].groupuuid + '"]').tab('show'); + pconfig.groupuuid = groups[0].groupuuid; + pconfig.activetab = '#tabgrp_' + groups[0].groupuuid; + apppref.setpreference("pageconfig.weeklypresences",pconfig); + } else { + $('#tabgrouphead a[href="#tabgrp_' + pconfig.groupuuid + '"]').tab('show'); + pconfig.activetab = '#tabgrp_' + groups[0].groupuuid; + apppref.setpreference("pageconfig.weeklypresences",pconfig); + } + + +} + +function setlunch(btn) { + + var clb = $(btn).attr('class').split(' '); + var ident = $(btn).attr('id').split('_'); + + var lunch = 'null'; + if (clb[1] == 'btn-default') { + $(btn).removeClass('btn-default'); + $(btn).addClass('btn-success'); + lunch = "'1'"; + } else { + $(btn).removeClass('btn-success'); + $(btn).addClass('btn-default'); + lunch = "'0'"; + } + + appdb.dbexec("update presence set lunch=" + lunch + " where daydate='" + weekdates[ident[2].substring(0, 3)] + "' and childuuid='" + ident[1] + "';"); + +} + +function setpresence(btn) { + $(btn).removeClass('2'); + var clx = $(btn).attr('class'); + var clb = clx.split(' '); + + var ident = $(btn).attr('id').split('_'); + if ((ident[0] == 'btn') && ((ident[1] == 'edit') || (ident[1] == 'changegrp'))) { + return; + } + var clblunch = $("#" + $(btn).attr('id') + 'lunch').attr('class').split(' '); + var usql = "UPDATE presence SET status=" + presences[clb[1]].nextdata + " where childuuid='" + ident[1] + "' and daydate=date('" + weekdates[ident[2]] + "');"; + + if (presences[clb[1]].nextdata == 1) { + usql = "INSERT INTO presence (status,childuuid,daydate,lunch) VALUES (" + presences[clb[1]].nextdata + ",'" + ident[1] + "',date('" + weekdates[ident[2]] + "')," + ((clblunch[1] == 'default') ? 0 : 1) + ");"; + + } else if (!presences[clb[1]].nextdata) { + usql = "DELETE FROM presence where childuuid='" + ident[1] + "' and daydate='" + weekdates[ident[2]] + "';"; + } + + appdb.dbexec(usql); + $(btn).removeClass(clb[1]); + $(btn).addClass(presences[clb[1]].class); + $(btn).html(presences[clb[1]].icon); + if ((presences[clb[1]].nextdata == 1) || (presences[clb[1]].nextdata == 5)) { + $("#" + $(btn).attr("id") + "lunch").removeClass('btn-default'); + $("#" + $(btn).attr("id") + "lunch").addClass('btn-success'); + $("#" + $(btn).attr("id") + "lunch").prop("disabled", false); + } else { + $("#" + $(btn).attr("id") + "lunch").removeClass('btn-success'); + $("#" + $(btn).attr("id") + "lunch").addClass('btn-default'); + $("#" + $(btn).attr("id") + "lunch").prop("disabled", true); + } +} + +function setalltopresent(){ + $('body').css('cursor','wait'); + + $("button[id^=btn_]").each( + function(){ + if ((this.id.indexOf("lunch") == -1) && (this.getAttribute("class").indexOf("btn-default") != -1)) { + setpresence(this); + } + + } + ); + $('body').css('cursor','auto'); +} + +function change_week() { + pconfig.presweek = $('#presweek').val(); + + apppref.setpreference("pageconfig.weeklypresences",pconfig); + globelreq.send_request({ + page: 'weeklypresences', + module: 'presences', + data: null, + header: 'Présences par semaine' + }); +} + +function setallpresences() { + var prsql = "select daydate,childuuid,status,lunch,case "; + var wda = ['','mon','tue','wed','thu','fri','sat']; + var dd = []; + for (var i=1;i<=wda.length;i++){ + dd.push("when weekday='"+i+"' then '"+ wda[i]+"'"); + } + prsql += dd.join(',') + " else null end as weekday from (select daydate,childuuid,status,lunch,strftime('%w',daydate) as weekday from presence where daydate >= date('" + weekdates.mon + "') and daydate <=date('" + weekdates.fri + "')) group by childuuid,daydate;"; + var presdata = appdb.dbquery(prsql); + presdata = presdata.sqldata; + if (presdata) { + for (var p in presdata) { + if ($("#btn_" + presdata[p].childuuid + "_" + presdata[p].weekday)) { + $("#btn_" + presdata[p].childuuid + "_" + presdata[p].weekday).removeClass("btn-default"); + $("#btn_" + presdata[p].childuuid + "_" + presdata[p].weekday).addClass(presenceids[presdata[p].status].class); + $("#btn_" + presdata[p].childuuid + "_" + presdata[p].weekday).html(presenceids[presdata[p].status].icon); + if ((presdata[p].status == 1) || (presdata[p].status == 5)) { + $("#btn_" + presdata[p].childuuid + "_" + presdata[p].weekday + "lunch").prop("disabled", false); + } + } + if ($("#btn_" + presdata[p].childuuid + "_" + presdata[p].weekday + "lunch")) { + $("#btn_" + presdata[p].childuuid + "_" + presdata[p].weekday + "lunch").removeClass("btn-default"); + $("#btn_" + presdata[p].childuuid + "_" + presdata[p].weekday + "lunch").addClass("btn-success"); + + } + } + } +} + +function configure_presence(obj) { + var xx = obj.id.split("_"); + var chid = xx[2]; + //var lblcday=getlabels(xx[3]); + var cfgdate = new Date(weekdates[xx[3]]).toLocaleFormat("%Y-%m-%d"); + $('#planning > #plandate').val(cfgdate); + $('#planning > #childuuid').val(chid); + $('#planning > #planday').val(xx[3]); + $('#dlg_addplanning').modal('show'); +} + + +function save_planning() { + var newplandata = {}; + $("#planning :input").each(function() { + var input = $(this); + + if (input.attr("id")) { + + if ((input.attr("type") == "checkbox") && input.attr("checked")){ + newplandata[input.attr("id")] = input.val(); + } + else if (input.attr("type") != "checkbox"){ + newplandata[input.attr("id")] = input.val(); + } + } + }); + + if ((newplandata.timebegin=='00:00') || (newplandata.timeend=='00:00') || (newplandata.timebegin==newplandata.timeend)) { + return; + } + + var checkdatesplit = appdb.dbquery("select * from planning where datebegin <= '"+newplandata.plandate+"' and dateend >= '"+newplandata.plandate+"' and childuuid='"+newplandata.childuuid+"';"); + checkdatesplit = checkdatesplit.sqldata; + if (checkdatesplit.length == 1) { + // + var newuuid = appdb.generate_uuid(); + appdb.dbexec("INSERT INTO planning (datebegin, dateend, montimebegin, montimeend, monlunch, tuetimebegin, tuetimeend, tuelunch, wedtimebegin, wedtimeend, wedlunch, thutimebegin, thutimeend, thulunch, fritimebegin, fritimeend, frilunch, sattimebegin, sattimeend, satlunch, suntimebegin, suntimeend, sunlunch, childuuid, uuid, groupuuid, montimebegin2, montimeend2, tuetimebegin2, tuetimeend2, wedtimebegin2, wedtimeend2, thutimebegin2, thutimeend2, fritimebegin2, fritimeend2, sattimebegin2, sattimeend2, suntimebegin2, suntimeend2) SELECT date('"+newplandata.plandate+"','+1 day'), dateend, montimebegin, montimeend, monlunch, tuetimebegin, tuetimeend, tuelunch, wedtimebegin, wedtimeend, wedlunch, thutimebegin, thutimeend, thulunch, fritimebegin, fritimeend, frilunch, sattimebegin, sattimeend, satlunch, suntimebegin, suntimeend, sunlunch, childuuid, '"+newuuid+"', groupuuid, montimebegin2, montimeend2, tuetimebegin2, tuetimeend2, wedtimebegin2, wedtimeend2, thutimebegin2, thutimeend2, fritimebegin2, fritimeend2, sattimebegin2, sattimeend2, suntimebegin2, suntimeend2 FROM planning where uuid='"+ checkdatesplit[0].uuid +"';"); + appdb.dbexec("UPDATE planning SET dateend=date('"+newplandata.plandate+"','-1 day') where uuid='"+checkdatesplit[0].uuid+"'"); + newuuid = appdb.generate_uuid(); + appdb.dbexec("INSERT INTO planning (datebegin,dateend, "+newplandata.planday+"timebegin,"+newplandata.planday+"timeend,"+newplandata.planday+"lunch,childuuid,uuid,groupuuid) VALUES ('"+newplandata.plandate+"','"+newplandata.plandate+"','"+newplandata.timebegin+"','"+newplandata.timeend+"',"+((newplandata.lunch)?"'1'":'null')+",'"+newplandata.childuuid+"','"+newuuid+"','"+checkdatesplit[0].groupuuid+"');"); + } + $('#dlg_addplanning').modal('hide'); + globelreq.send_request({ + page: 'weeklypresences', + module: 'presences', + data: null, + header: 'Présences par semaine' + }); +} + + +function onpreviousweek() { + pconfig.presweek = $('#presweek').val(); + var tmpweek = new Date(encodeparam(pconfig.presweek, 'date').replace(/'/g, '')); + var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-7); + pconfig.presweek = nweek.toLocaleFormat('%d.%m.%Y'); + apppref.setpreference("pageconfig.weeklypresences",pconfig); + globelreq.send_request({ + page: 'weeklypresences', + module: 'presences', + data: null, + header: 'Présences par semaine' + }); +} + +function onnextweek() { + pconfig.presweek = $('#presweek').val(); + var tmpweek = new Date(encodeparam(pconfig.presweek, 'date').replace(/'/g, '')); + var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+7); + pconfig.presweek = nweek.toLocaleFormat('%d.%m.%Y'); + apppref.setpreference("pageconfig.weeklypresences",pconfig); + globelreq.send_request({ + page: 'weeklypresences', + module: 'presences', + data: null, + header: 'Présences par semaine' + }); +} + +function dlgchangegrp(obj) { + var xx = obj.id.split("_"); + var chid = xx[2]; + + var chldnames = appdb.dbquery("SELECT prename || ' ' || surname as childname from childs where uuid='"+chid+"';"); + var grps = appdb.dbquery("SELECT '' || gr.grpname || ': ' || strftime(\"%d.%m.%Y\",datebegin) || ' - ' || strftime(\"%d.%m.%Y\",dateend) as strdates,strftime(\"%d.%m.%Y\",dateend) from planning pl left join groups gr on (pl.groupuuid=gr.uuid) where pl.childuuid='"+chid+"' and (datebegin between '"+ weekdates.mon+"' and '"+ weekdates.fri+"' or dateend between '"+ weekdates.mon+"' and '"+ weekdates.fri+"' or (datebegin <= '"+ weekdates.mon+"' and dateend >= '"+ weekdates.fri+"'));"); + if (grps.sqldata) { + grps = grps.sqldata; + } + + var strgrp = ""; + if (grps) { + dgrpc = grps[0].dateend; + for (var f in grps){ + strgrp += grps[f].strdates + '
    '; + } + } + + $('#dlg_changegrp #dategrpchange').val(new Date(weekdates.mon).toLocaleFormat('%d.%m.%Y')); + $('#dlg_changegrp #childuuid').val(chid); + $('#dlg_changegrp #groupuuid').val(pconfig.groupuuid); + $('#dlg_changegrp #curgrp').val(pconfig.groupuuid); + $('#dlg_changegrp #curgrpdata').html("

    Enfant: " + chldnames.sqldata[0].childname+'
    '+ strgrp); + $('#dlg_changegrp').modal('show'); +} + +function save_grpchange() { + var newgrpplan = {}; + $("#dlg_changegrp :input").each(function() { + var input = $(this); + + if (input.attr("id")) { + + newgrpplan[input.attr("id")] = input.val(); + } + }); + newgrpplan.dategrpchange = encodeparam(newgrpplan.dategrpchange,'date').replace(/'/g,''); + + if (newgrpplan.curgrp != newgrpplan.groupuuid) { + var checkdatesplit = appdb.dbquery("select * from planning where date('"+newgrpplan.dategrpchange+"') between datebegin and dateend and childuuid='"+newgrpplan.childuuid+"';"); + checkdatesplit = checkdatesplit.sqldata; + if (checkdatesplit.length == 1) { + var newuuid = appdb.generate_uuid(); + appdb.dbexec("INSERT INTO planning (datebegin, dateend, montimebegin, montimeend, monlunch, tuetimebegin, tuetimeend, tuelunch, wedtimebegin, wedtimeend, wedlunch, thutimebegin, thutimeend, thulunch, fritimebegin, fritimeend, frilunch, sattimebegin, sattimeend, satlunch, suntimebegin, suntimeend, sunlunch, childuuid, uuid, groupuuid, montimebegin2, montimeend2, tuetimebegin2, tuetimeend2, wedtimebegin2, wedtimeend2, thutimebegin2, thutimeend2, fritimebegin2, fritimeend2, sattimebegin2, sattimeend2, suntimebegin2, suntimeend2) SELECT date('"+newgrpplan.dategrpchange+"'), dateend, montimebegin, montimeend, monlunch, tuetimebegin, tuetimeend, tuelunch, wedtimebegin, wedtimeend, wedlunch, thutimebegin, thutimeend, thulunch, fritimebegin, fritimeend, frilunch, sattimebegin, sattimeend, satlunch, suntimebegin, suntimeend, sunlunch, childuuid, '"+newuuid+"', '"+newgrpplan.groupuuid+"', montimebegin2, montimeend2, tuetimebegin2, tuetimeend2, wedtimebegin2, wedtimeend2, thutimebegin2, thutimeend2, fritimebegin2, fritimeend2, sattimebegin2, sattimeend2, suntimebegin2, suntimeend2 FROM planning where uuid='"+ checkdatesplit[0].uuid +"';"); + appdb.dbexec("UPDATE planning SET dateend=date('"+newgrpplan.dategrpchange+"','-1 day') where uuid='"+checkdatesplit[0].uuid+"'"); + $('#dlg_changegrp').modal('hide'); + globelreq.send_request({ + page: 'weeklypresences', + module: 'presences', + data: null, + header: 'Présences par semaine' + }); + } + } + +} diff --git a/modules/presences/presences.xul b/modules/presences/presences.xul new file mode 100644 index 0000000..1f25e88 --- /dev/null +++ b/modules/presences/presences.xul @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/presences/weeklypresences.html b/modules/presences/weeklypresences.html new file mode 100644 index 0000000..0ee1f1c --- /dev/null +++ b/modules/presences/weeklypresences.html @@ -0,0 +1,173 @@ + + + + + + + Présences par semaine + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + Semaine du: + +
    + + + + + +
    +
    + +
    +
    + + +
    + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + diff --git a/modules/reports/css/print.css b/modules/reports/css/print.css new file mode 100644 index 0000000..a3c54fc --- /dev/null +++ b/modules/reports/css/print.css @@ -0,0 +1,138 @@ +body { + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 11px; + line-height: 1.42857; + background-color: #fff; +} +h2 { + font-size: 18px; + font-weight: bold; + margin-top: 0px; + margin-bottom: 5px; +} + +h3 { + font-size: 14px; + font-style: italic; + margin-top: 0px; + margin-bottom: 5px; +} + +.dataTables_filter { + height: 0px; + width: 0px; +} + +/*.dataTable > thead > tr > th {*/ +/* padding-top: 70px;*/ +/*}*/ + +/*.dataTable > tfoot > tr > th { + padding-bottom: 40px; +}*/ + +/*tfoot { display: table-footer-group;*/ +/* position: absolute; */ +/* bottom: 0; }*/ + +.alignright{ + text-align: right; +} + +.alignleft { + text-align: left; +} + +.noprint { + display: none; +} + + + +@media print { + +@page { + margin-left: 2cm; + margin-right: 1cm; + margin-top: 1cm; + margin-bottom: 1cm; +} + +tfoot { + display: table-row-group; +} + +table { + width: 100% !Important; + border-spacing: 0; + border-collapse: collapse; +} + +table.dataTable td { + white-space: nowrap; + overflow: hidden; +} + +table.dataTable > thead > th > td { + white-space: nowrap; + overflow: hidden; +} +table.dataTable tr { + page-break-inside: avoid; + page-break-after: auto; + } + +table.dataTable tfoot { + page-break-inside: avoid; + page-break-after: auto; + } + +table.dataTable tfoot > th > td { + font-size: 2vw; +} +table.dataTable { + width: 100% !Important; + border-spacing: 0; + border-collapse: collapse; +} + +#print-head { + display: block; + position: fixed; + font-family: Arial,Helvetica, sans-serif; + z-index: 10; + top: 0pt; + left:0pt; + right: 0pt; + background-color: #fff; + text-align: center; + } + +/*#print-foot { + display: block; + position: fixed; + width: 100%; + padding-top: 5px; + bottom: 0pt; + text-align: center; + right: auto; + left: auto; + font-family: Arial,Helvetica, sans-serif; + }*/ + +/*#print-foot:after { + content: counter(page); + counter-increment: page; + }*/ + + +.dataTables_filter { + height: 0px; + width: 0px; +} + +.dataTable { + width: 100% !Important; +} + +} \ No newline at end of file diff --git a/modules/reports/dlg/dlgpdfviewer.xul b/modules/reports/dlg/dlgpdfviewer.xul new file mode 100644 index 0000000..255bb8c --- /dev/null +++ b/modules/reports/dlg/dlgpdfviewer.xul @@ -0,0 +1,42 @@ + + + + + + + + diff --git a/modules/reports/dlg/dlgprint.xul b/modules/reports/dlg/dlgprint.xul new file mode 100644 index 0000000..0817914 --- /dev/null +++ b/modules/reports/dlg/dlgprint.xul @@ -0,0 +1,164 @@ + + + + + + + + diff --git a/modules/reports/img/logoprint.png b/modules/reports/img/logoprint.png new file mode 100644 index 0000000000000000000000000000000000000000..8c760e8ad75dc6048f90d3e3a9d48147f1ee1f46 GIT binary patch literal 8121 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 TAh=5?00000NkvXXu0mjf5-{IL literal 0 HcmV?d00001 diff --git a/modules/reports/img/print.png b/modules/reports/img/print.png new file mode 100644 index 0000000000000000000000000000000000000000..335f48293aa0cdf080ff05f7ed6bfe1c717f64a2 GIT binary patch literal 559 zcmV+~0?_@5P) zK~z}7?bp3))leA6@lR{ScJsAl5C;cKmx5bGs7nz_aS)_Sz)@Ex15Pdu>EPyD_iW-U z{sp&-qJtI3>Jad46UAy=a^d#k&CSgTxZK|o&P$$r&+|OzoF_ACl;$xU!7D78OuIOb zpIK6joHR4eN}9*V@kKkG$dck~-Gtc&My_bDvF|nkSPTGI>;hmT0AQmvK$^$>{8$bE zSRS%9SrVpsd;?E}>1LJ`+igQ|RJdwwL}?yJ|M1FwmJ}t{IsjP1RuzT_(4I6_vZ@a0@v;RP7M`zyenAVpI-%#Oi=IcCcA_C{z)y z53jsQ5|$kT{K4;0gAn66j#ce*c#1bo?u#)h@gD1S01?g(^gqU3eC`O~Vr6e6z_8|V zPq&ID0nkzW$7C`*M9|^h9wS%0DQu29BTRT5*bdl1?U$OCx3_j9Tn%N&l47gvIWX73R$r|f{0oZUTY`$;RWASl002ovPDHLkV1nPt@3H^@ literal 0 HcmV?d00001 diff --git a/modules/reports/img/save.png b/modules/reports/img/save.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5ba59cb7e7fb1b4b9a6c27188a813b2305133e GIT binary patch literal 597 zcmV-b0;>IqP)QA#+4z?~SxK2v7P7K2nTAqI z7E=~jDUA&atC7M&Mw4-Ixi$}-j?+1J?!9Mh=2vf>-sk=Eec$Ii@AJSdG;`WV95#F1 zNv*LNhwufXSe_l6#DJ<*$3EQ1LL}x^`?C;p4e$@d!U{I%X%PaBmH{-|0C#72HhBFvIe+nYO6h2^0l>p14ox@gqi~hxUf|Fry+XX*xACIsoXY32C z#71n&*r&pF4UfYe*|oQ0Pj>Be6*PmP66g&W os!&aoB*yHcKBnVPT3wYJS*vYtw=iSZ)PjR;7R5LggAz4W>x`*=x z;dU|HRarLtiJQ2RW4jtZ-uJ50@pNo9n(78?i+Uif2^>j% jw_Op9bO2Ns8O&U)7KuC?Fy zdDmuT(S>2`$G5nP25w>!TU(I_G0=f{KX!*$qh$Px-!NK6egda)5?f*??VtzmR0!X} zFF1_VW#lLEbwap?eOTK@0Iyew|BMsZ*or(Ala~tQ&+ur5_!?XncseKgPb;Et z;5d3~_!CL8rKk8(?(uCdS)e(lv79S?sDy(A`N8i#Qc-){l2P5O0L@ z_T*H_7%t;beD4kMe>xEV2*}Az9Z(3;2<7b3Govd!grFLufrGd z`&V(-SQdIC;g)K|7ZNjh7-tH1i|O1uL5c@5O=dRSQY6~hf_U@uJG|VE_|c3y|0DVZ zJcN%c<}D>nXGfiQU#7|Y72;h<(*2#0E5GB-I+IzfS!6yr_7uA^D`hS!WLYM&Skt}s zW(IK^AEd+=SIA^~Tf7^T<%y aCfo=8j=oJN=_zOc0000','>','g'); + string = string.replace('&','&','g'); + string = string.replace('"','"','g'); + string = string.replace("'","''",'g'); + string = "'"+ string+"'"; + } + }else if(type == "date"){ + var re = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/i; + if (!string.match(re)) { + string = 'null'; + }else{ + var dspl=string.split('.'); + string = "'"+dspl[2]+'-'+dspl[1]+'-'+dspl[0]+"'"; + } + }else if(type == "number"){ + if (string == "") { + string = 'null'; + }else { + string.replace(',','.'); + string = parseFloat(string); + } + }else if(type == "boolean"){ + if (string == "") { + string = 'null'; + } + string= string.replace('true',"'1'"); + string= string.replace('false',"'0'"); + }else if(type == "month"){ + var re = /^(\d{1,2})\.(\d{4})$/i; + if (!string.match(re)) { + string = 'null'; + }else{ + var dspl=string.split('.'); + string = "'"+dspl[1]+'-'+dspl[0]+"-01'" + } + } + else { + string = string.replace('<','<','g'); + string = string.replace('>','>','g'); + string = string.replace('&','&','g'); + string = string.replace('"','"','g'); + string = string.replace("'","''",'g'); + string = "'"+ string+"'"; + } + + return string; +} \ No newline at end of file diff --git a/modules/reports/js/print_book.js b/modules/reports/js/print_book.js new file mode 100644 index 0000000..7f3632d --- /dev/null +++ b/modules/reports/js/print_book.js @@ -0,0 +1,41 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var pconfig = {}; + +function initdata(){ + var configdata = apppref.getpreference("pageconfig.logactivity"); + if (configdata != '') { + pconfig = JSON.parse(configdata); + } + //"Book Ident Data:" + JSON.stringify(pconfig) + "\n"); + var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + var winmain = windowMediator.getMostRecentWindow("xulcreorga"); + var maindoc = winmain.document.getElementById("brw_application").contentDocument; + + //var xdate = new Date(); + //$("#printdatetime").html(xdate.toLocaleFormat("%d.%m.%Y %H:%M:%S")); + + $("#title_sub").html(winmain.document.getElementById("infoheader").value); + + $("#title_main").html(maindoc.title); + //$("#tbl_list").css("margin-top","100px"); + var crn = appdb.dbquery("select crechename,adress,city,country,zip from creche;"); + crn = crn.sqldata[0]; + $("#creche_name").html(crn.crechename); + $("#creche_address").html(crn.adress); + $("#creche_zip").html(crn.zip); + $("#creche_city").html(crn.city); + loadactivitydata(); +} + +function loadactivitydata(){ + var actdatasql = "SELECT strftime('%d.%m.%Y',logdatefrom) || ' - ' || strftime('%d.%m.%Y',logdateto) as daterange, logtitle, logmessage FROM activitylog where uuid='"+ pconfig.activityuuid+"';"; + //dump(actdatasql + "\n"); + var data = appdb.dbquery(actdatasql); + $("#bookdata").append('

    '+ data.sqldata[0].logtitle+'

    '); + $("#bookdata").append('

    '+ data.sqldata[0].daterange+'

    '); + $("#bookdata").append('
    '+ data.sqldata[0].logmessage+'
    '); +} + + + diff --git a/modules/reports/js/print_calendar.js b/modules/reports/js/print_calendar.js new file mode 100644 index 0000000..7e6e2f8 --- /dev/null +++ b/modules/reports/js/print_calendar.js @@ -0,0 +1,35 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +function initdata(){ + var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + var winmain = windowMediator.getMostRecentWindow("xulcreorga"); + + var maindoc = winmain.document.getElementById("brw_application").contentDocument; + + var xdate = new Date(); + $("#printdatetime").html(xdate.toLocaleFormat("%d.%m.%Y %H:%M:%S")); + $("#title_sub").html(winmain.document.getElementById("infoheader").value); + $("#title_main").html(maindoc.title); + //$("#cal_month").css("margin-top","100px"); + var crn = appdb.dbquery("select crechename,adress,city,country,zip from creche;"); + crn = crn.sqldata[0]; + $("#creche_name").html(crn.crechename); + $("#creche_address").html(crn.adress); + $("#creche_zip").html(crn.zip); + $("#creche_city").html(crn.city); + + var elx = maindoc.querySelectorAll('table[id^="cal_"]'); + + for (var i in elx) { + //dump(elx[i].id + "\n"); + if (elx[i].id) { + var elementdata = maindoc.getElementById(elx[i].id).innerHTML; + + //elementdata = elementdata.replace(/height:\ 0px;/g,''); + //elementdata = elementdata.replace(/height:0;/g,''); + $("#cal_month").append(elementdata); + //$("#tbl_list th:first-child").remove(); + //$("#tbl_list td:first-child").remove(); + } + } +} \ No newline at end of file diff --git a/modules/reports/js/print_child.js b/modules/reports/js/print_child.js new file mode 100644 index 0000000..d704637 --- /dev/null +++ b/modules/reports/js/print_child.js @@ -0,0 +1,155 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var pconfig = {}; +function initdata(){ + var configdata = apppref.getpreference("pageconfig.child"); + if (configdata != '') { + pconfig = JSON.parse(configdata); + } + var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + var winmain = windowMediator.getMostRecentWindow("xulcreorga"); + var maindoc = winmain.document.getElementById("brw_application").contentDocument; + + //var xdate = new Date(); + //$("#printdatetime").html(xdate.toLocaleFormat("%d.%m.%Y %H:%M:%S")); + + $("#title_sub").html(winmain.document.getElementById("infoheader").value); + + $("#title_main").html(maindoc.title); + //$("#tbl_list").css("margin-top","100px"); + var crn = appdb.dbquery("select crechename,adress,city,country,zip from creche;"); + crn = crn.sqldata[0]; + $("#creche_name").html(crn.crechename); + $("#creche_address").html(crn.adress); + $("#creche_zip").html(crn.zip); + $("#creche_city").html(crn.city); + + var cdatasql = "select child.uuid,child.clientnumber,child.prename,child.surname,strftime('%d.%m.%Y',child.birthday) as birthday,child.address,child.city,child.zip,child.country,strftime('%d.%m.%Y',child.entrydate) as entrydate,child.checkservicenumber,strftime('%d.%m.%Y',child.checkserviceexpiration) as checkserviceexpiration,strftime('%d.%m.%Y',child.leavedate) as leavedate,child.nationality,child.nativelanguage,child.bankaccount,child.bankbic,child.cautionamount,child.cautionpayed,child.cautionremark,child.cautionpayedback,child.cautionstatusdate,child.remark,child.uuid,health.docname, health.docphone,health.docaddress,health.doczip, health.doccity,health.doccountry,health.healthinfo,health.uuid as docuuid from childs child join health health on (child.uuid=health.childuuid) where child.uuid='" + pconfig.uuid + "';"; + var cdata = appdb.dbquery(cdatasql); + $('#financedata').hide(); + if (cdata) { + cdata = cdata.sqldata[0]; + var hx = true; + for (var ci in cdata) { + if (document.getElementById("childs_" + ci)) { + $("#childs_" + ci).html(cdata[ci]); + } + if (document.getElementById("health_" + ci)) { + if (cdata[ci] != '') { + hx = false; + $("#health_" + ci).html(cdata[ci]); + }else { + $("#health_" + ci).hide(); + } + + } + + } + if (hx) { + $('#healthdata').hide(); + } + } + + load_table_presence(); + load_table_parents(); + load_table_refpersons(); + var cdatea = new Date(); + //$("#printdatetime").html(cdatea.toLocaleFormat("%d.%m.%Y %H:%M:%S")); + //$("#accmonth").html(myfilter.description); + var crn = appdb.dbquery("select crechename,adress,city,country,zip from creche;"); + crn = crn.sqldata[0]; + $("#creche_name").html(crn.crechename); + $("#creche_address").html(crn.adress); + $("#creche_zip").html(crn.zip); + $("#creche_city").html(crn.city); +} + +function load_table_presence(){ + var plandatasql = "SELECT grp.grpname, strftime('%d.%m.%Y',plan.datebegin) || ' - ' || strftime('%d.%m.%Y',plan.dateend) AS planningdaterange, plan.montimebegin || ' - ' || plan.montimeend || CASE WHEN plan.monlunch='1' THEN ' ()' ELSE '' END || case when plan.montimebegin2 is not null and plan.montimeend2 is not null then '
    ' || plan.montimebegin2 || ' - ' || plan.montimeend2 else '' end AS monplanningtime, plan.tuetimebegin || ' - ' || plan.tuetimeend || CASE WHEN plan.tuelunch='1' THEN ' ()' ELSE '' END || case when plan.tuetimebegin2 is not null and plan.tuetimeend2 is not null then '
    ' || plan.tuetimebegin2 || ' - ' || plan.tuetimeend2 else '' end AS tueplanningtime, plan.wedtimebegin || ' - ' || plan.wedtimeend || CASE WHEN plan.wedlunch='1' THEN ' ()' ELSE '' END || case when plan.wedtimebegin2 is not null and plan.wedtimeend2 is not null then '
    ' || plan.wedtimebegin2 || ' - ' || plan.wedtimeend2 else '' end AS wedplanningtime, plan.thutimebegin || ' - ' || plan.thutimeend || CASE WHEN plan.thulunch='1' THEN ' ()' ELSE '' END || case when plan.thutimebegin2 is not null and plan.thutimeend2 is not null then '
    ' || plan.thutimebegin2 || ' - ' || plan.thutimeend2 else '' end AS thuplanningtime, plan.fritimebegin || ' - ' || plan.fritimeend || CASE WHEN plan.frilunch='1' THEN ' ()' ELSE '' END || case when plan.fritimebegin2 is not null and plan.fritimeend2 is not null then '
    ' || plan.fritimebegin2 || ' - ' || plan.fritimeend2 else '' end AS friplanningtime FROM planning plan LEFT JOIN groups grp ON ( plan.groupuuid=grp.uuid) WHERE plan.childuuid='" + pconfig.uuid + "' ORDER BY plan.datebegin, plan.dateend;"; + var plandata = appdb.dbqueryarray(plandatasql); + if (plandata) { + var headerdata = getlabels(plandata.sqlhead.join(",")); + $("#tbl_planning").html(""); + var tblplan = $("#tbl_planning").dataTable({ + "language": { + "url": "L../../web/js/locale/datatable_fr.json" + }, + "data": plandata.sqldata, + "columns": headerdata, + "paging": false, + "ordering": false, + "info": false, + "filter": false, + "destroy": true + }); + }else { + $('#planningdata').hide(); + } +} + +function load_table_parents() { + var labelx = getlabelswithkey('mother,father'); + var areftypes = new Array(); + for (var l in labelx){ + areftypes.push("select '"+ labelx[l].title +"' as refname, '"+labelx[l].keyname+"' as reftype"); + } + var lblsql = areftypes.join(" UNION "); + var parentssql = "SELECT rx.refname as reftype, coalesce(rp.surname,'') || ' ' || coalesce(rp.prename,'') as nameprename, coalesce(rp.address,'') || '
    ' || coalesce(rp.zip,'') || ' ' || coalesce(rp.city,'') || '
    ' || coalesce(rp.country,'') as address, case when rp.phone is not null then ': ' || rp.phone || '
    ' else '' end || case when rp.mobile is not null then': ' || rp.mobile || '
    ' else '' end || case when rp.workphone is not null then ': ' || rp.workphone || '
    ' else '' end || case when rp.email is not null then ': ' || email else '' end as phonemail, rp.job, rp.authsubscriber FROM refpersons rp join ("+lblsql+") rx on (rp.reftype=rx.reftype) where rp.childuuid='" + pconfig.uuid + "' and rp.reftype in ('mother','father');"; + + var parentsdata = appdb.dbqueryarray(parentssql); + if (parentsdata) { + var headerdata = getlabels(parentsdata.sqlhead.join(",")); + $("#tbl_parents").html(""); + $("#tbl_parents").dataTable({ +"language": { + "url": "../../web/js/locale/datatable_fr.json" + }, + "data": parentsdata.sqldata, + "columns": headerdata, + "paging": false, + "ordering": false, + "info": false, + "filter": false, + "destroy": true + }); + }else { + $('#parentdata').hide(); + } + + + +} + +function load_table_refpersons() { + var labelx = getlabelswithkey('tuteur,famillymember,famillyfriend'); + var areftypes = new Array(); + for (var l in labelx){ + areftypes.push("select '"+ labelx[l].title +"' as refname, '"+labelx[l].keyname+"' as reftype"); + } + var lblsql = areftypes.join(" UNION "); + var refpersonsql = "SELECT rx.refname as reftype, coalesce(rp.surname,'') || ' ' || coalesce(rp.prename,'') as nameprename, coalesce(rp.address,'') || '
    ' || coalesce(rp.zip,'') || ' ' || coalesce(rp.city,'') || '
    ' || coalesce(rp.country,'') as address, case when rp.phone is not null then ': ' || rp.phone || '
    ' else '' end || case when rp.mobile is not null then': ' || rp.mobile || '
    ' else '' end || case when rp.workphone is not null then ': ' || rp.workphone || '
    ' else '' end || case when rp.email is not null then ': ' || email else '' end as phonemail, rp.job, rp.authsubscriber FROM refpersons rp join ("+lblsql+") rx on (rp.reftype=rx.reftype) where rp.childuuid='" + pconfig.uuid + "' and rp.reftype not in ('mother','father');"; + + var refpersonsdata = appdb.dbqueryarray(refpersonsql); + if (refpersonsdata) { + var headerdata = getlabels(refpersonsdata.sqlhead.join(",")); + $("#tbl_refpersons").html(""); + $("#tbl_refpersons").dataTable({ + "language": { + "url": "../../web/js/locale/datatable_fr.json" + }, + "data": refpersonsdata.sqldata, + "columns": headerdata, + "paging": false, + "ordering": false, + "info": false, + "filter": false, + "destroy": true + }); + }else { + $('#refpersondata').hide(); + } + + + +} + diff --git a/modules/reports/js/print_loaddata.js b/modules/reports/js/print_loaddata.js new file mode 100644 index 0000000..48c9de8 --- /dev/null +++ b/modules/reports/js/print_loaddata.js @@ -0,0 +1,67 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +function initdata(){ + var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + var winmain = windowMediator.getMostRecentWindow("xulcreorga"); + var maindoc = winmain.document.getElementById("brw_application").contentDocument; + + $("#title_sub").html(winmain.document.getElementById("infoheader").value); + + $("#title_main").html(maindoc.title); + var crn = appdb.dbquery("select crechename,adress,city,country,zip from creche;"); + crn = crn.sqldata[0]; + $("#creche_name").html(crn.crechename); + $("#creche_address").html(crn.adress); + $("#creche_zip").html(crn.zip); + $("#creche_city").html(crn.city); + + var elx = maindoc.querySelectorAll('div[id^="tbl"]'); + //var elx = maindoc.querySelectorAll('tfoot'); + + var tcols = 1; + var strlp = apppref.getpreference("pageconfig.lastpage"); + var lp = JSON.parse(strlp); + var strcp = apppref.getpreference("pageconfig." + lp.view); + var cp = JSON.parse(strcp); + var ctab = ""; + //"print_loaddata.js \n"); + if (cp.activetab) { + ctab = cp.activetab; + } + for (var i in elx) { + //dump(elx[i].id) + if ((elx[i].id ) && (elx[i].id.indexOf(ctab+"_wrapper") != -1)) { + + var elementdata = maindoc.getElementById(elx[i].id).innerHTML; + + elementdata = elementdata.replace(/height:\ 0px;/g,''); + elementdata = elementdata.replace(/height:0;/g,''); + elementdata = elementdata.replace(/colspan="1" rowspan="1"/g,''); + elementdata = elementdata.replace(/style="width:\s\d+px;"/g,''); + + var thead = elementdata.substring(elementdata.indexOf(''),elementdata.indexOf('')).replace('',''); + var tbody = elementdata.substring(elementdata.indexOf(''),elementdata.indexOf('')).replace('',''); + var tfoot = elementdata.substring(elementdata.lastIndexOf(''),elementdata.lastIndexOf('')).replace('',''); + + tcols = thead.split(''); + + + + $("#tbl_list > thead").append(thead); + $("#tbl_list > tbody").append(tbody); + $("#tbl_list > tfoot").append(tfoot); + + } + } + //$("#tbl_list").removeClass("dataTable"); + // $("#tbl_list").dataTable({ + // "language": { + // "url": "../../../web/js/locale/datatable_fr.json" + // }, + // "paging": false, + // "ordering": false, + // "info": false, + // "filter": false, + // "destroy": true + //}); +} \ No newline at end of file diff --git a/modules/reports/js/print_logchild.js b/modules/reports/js/print_logchild.js new file mode 100644 index 0000000..9fd5b9a --- /dev/null +++ b/modules/reports/js/print_logchild.js @@ -0,0 +1,45 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var pconfig = {}; +var initdate = new Date(); + +function initdata(){ + + var configdata = apppref.getpreference("pageconfig.logchild"); + if (configdata != '') { + pconfig = JSON.parse(configdata); + } + var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + var winmain = windowMediator.getMostRecentWindow("xulcreorga"); + var maindoc = winmain.document.getElementById("brw_application").contentDocument; + initdate = new Date(encodeparam(pconfig.logdate, 'date').replace(/'/g, '')); + //var xdate = new Date(); + //$("#printdatetime").html(xdate.toLocaleFormat("%d.%m.%Y %H:%M:%S")); + + $("#title_sub").html(pconfig.logdate); + + $("#title_main").html(maindoc.title); + //$("#tbl_list").css("margin-top","100px"); + var crn = appdb.dbquery("select crechename,adress,city,country,zip from creche;"); + crn = crn.sqldata[0]; + $("#creche_name").html(crn.crechename); + $("#creche_address").html(crn.adress); + $("#creche_zip").html(crn.zip); + $("#creche_city").html(crn.city); + + load_table_logchilds(); +} + +function load_table_logchilds(){ + var logsql = "select ch.prename || ' ' || ch.surname AS childname, ch.checkservicenumber,lc.logmessage from childs ch left join planning pl on (ch.uuid=pl.childuuid) left join childslog lc on (lc.childuuid=ch.uuid) where date('"+ initdate.toLocaleFormat('%Y-%m-%d')+"') between pl.datebegin and pl.dateend and lc.logmessage is not null and lc.logmessage != '' order by childname;"; + + var logdata = appdb.dbquery(logsql); + + for (var i in logdata.sqldata){ + var row = logdata.sqldata[i]; + //"initdata print_logchild! " + JSON.stringify(row)+"\n"); + var divd = '
    '+ row.childname + ' ('+ row.checkservicenumber + ')'+'
    '; + divd += '
    '+ row.logmessage+'
    '; + $("#div_data").append(divd); + } +} \ No newline at end of file diff --git a/modules/reports/js/print_multilist.js b/modules/reports/js/print_multilist.js new file mode 100644 index 0000000..605dc5a --- /dev/null +++ b/modules/reports/js/print_multilist.js @@ -0,0 +1,75 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +function initdata(){ + var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + var winmain = windowMediator.getMostRecentWindow("xulcreorga"); + var maindoc = winmain.document.getElementById("brw_application").contentDocument; + + $("#title_sub").html(winmain.document.getElementById("infoheader").value); + + $("#title_main").html(maindoc.title); + var crn = appdb.dbquery("select crechename,adress,city,country,zip from creche;"); + crn = crn.sqldata[0]; + $("#creche_name").html(crn.crechename); + $("#creche_address").html(crn.adress); + $("#creche_zip").html(crn.zip); + $("#creche_city").html(crn.city); + + var elx = maindoc.querySelectorAll('div[id^="tbl"]'); + //var elx = maindoc.querySelectorAll('tfoot'); + //"print_multilist.js \n"); + var tcols = 1; + var strlp = apppref.getpreference("pageconfig.lastpage"); + var lp = JSON.parse(strlp); + var strcp = apppref.getpreference("pageconfig." + lp.view); + var cp = JSON.parse(strcp); + var ctab = ""; + //dump(JSON.stringify(cp) + "\n"); + var getpagedesign=$("#allpages").html(); + //dump(getpagedesign + "\n===============\n"); + var cnt = 1; + $("#allpages").html(""); + for (var i in elx) { + // //dump(elx[i].id) + if ((elx[i].id ) && (elx[i].id.indexOf(ctab+"_wrapper") != -1)) { + var npage = getpagedesign.replace(/_xxnum/g,cnt); + + var elementdata = maindoc.getElementById(elx[i].id).innerHTML; + // + elementdata = elementdata.replace(/height:\ 0px;/g,''); + elementdata = elementdata.replace(/height:0;/g,''); + elementdata = elementdata.replace(/colspan="1" rowspan="1"/g,''); + elementdata = elementdata.replace(/style="width:\s\d+px;"/g,''); + // + var thead = elementdata.substring(elementdata.indexOf(''),elementdata.indexOf('')).replace('',''); + var tbody = elementdata.substring(elementdata.indexOf(''),elementdata.indexOf('')).replace('',''); + var tfoot = elementdata.substring(elementdata.lastIndexOf(''),elementdata.lastIndexOf('')).replace('',''); + // + //tcols = thead.split(''); + //dump(tbody + "\n========\n"); + // + // + if (tbody.indexOf("dataTables_empty") == -1) { + $("#allpages").append(npage); + $("#tbl_list"+cnt+" > thead").append(thead); + $("#tbl_list"+cnt+" > tbody").append(tbody); + $("#tbl_list"+cnt+" > tfoot").append(tfoot); + + $("#tbl_list" + cnt).dataTable({ + "language": { + "url": "../../../web/js/locale/datatable_fr.json" + }, + "paging": false, + "ordering": false, + "info": false, + "filter": false, + "destroy": true + }); + cnt++; + } + + } + } + $('[id$="lunch"]').removeClass('btn-success'); + $('[id$="lunch"]').addClass('btn-default'); +} \ No newline at end of file diff --git a/modules/reports/js/print_table.js b/modules/reports/js/print_table.js new file mode 100644 index 0000000..525aeb5 --- /dev/null +++ b/modules/reports/js/print_table.js @@ -0,0 +1,92 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +function initdata(){ + var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + var winmain = windowMediator.getMostRecentWindow("xulcreorga"); + var maindoc = winmain.document.getElementById("brw_application").contentDocument; + + $("#title_sub").html(winmain.document.getElementById("infoheader").value); + + $("#title_main").html(maindoc.title); + var crn = appdb.dbquery("select crechename,adress,city,country,zip from creche;"); + crn = crn.sqldata[0]; + $("#creche_name").html(crn.crechename); + $("#creche_address").html(crn.adress); + $("#creche_zip").html(crn.zip); + $("#creche_city").html(crn.city); + + var elx = maindoc.querySelectorAll('table[id="tbl_timetable"]'); + //var elx = maindoc.querySelectorAll('tfoot'); + + var tcols = 1; + var strlp = apppref.getpreference("pageconfig.lastpage"); + var lp = JSON.parse(strlp); + var strcp = apppref.getpreference("pageconfig." + lp.view); + var cp = JSON.parse(strcp); + var ctab = ""; + //dump(JSON.stringify(cp) + "\n"); + //if (cp.activetab) { + // ctab = cp.activetab; + //} + //var elx = maindoc.querySelectorAll('table[id^="cal_"]'); + for (var i in elx) { + if (elx[i].id) { + var elementdata = maindoc.getElementById(elx[i].id).innerHTML; + //elementdata = elementdata.replace(/height:\ 0px;/g,''); + //elementdata = elementdata.replace(/height:0;/g,''); + $("#tbl_list").append(elementdata); + //$("#tbl_list th:first-child").remove(); + //$("#tbl_list td:first-child").remove(); + } + } + + //$('td').each(function(){ + // if($(this).attr('colspan') > 1){ + // var ccol = $(this).attr('colspan'); + // $(this).attr('colspan',ccol -1); + // } + //}); + //$('th').each(function(){ + // if($(this).attr('colspan') > 1){ + // var ccol = $(this).attr('colspan'); + // $(this).attr('colspan',ccol -1); + // } + //}); + + + //for (var i in elx) { + // //dump(elx[i].id) + // if ((elx[i].id ) && (elx[i].id.indexOf(ctab+"_wrapper") != -1)) { + // + // var elementdata = maindoc.getElementById(elx[i].id).innerHTML; + // + // elementdata = elementdata.replace(/height:\ 0px;/g,''); + // elementdata = elementdata.replace(/height:0;/g,''); + // elementdata = elementdata.replace(/colspan="1" rowspan="1"/g,''); + // elementdata = elementdata.replace(/style="width:\s\d+px;"/g,''); + // + // var thead = elementdata.substring(elementdata.indexOf(''),elementdata.indexOf('')).replace('',''); + // var tbody = elementdata.substring(elementdata.indexOf(''),elementdata.indexOf('')).replace('',''); + // var tfoot = elementdata.substring(elementdata.lastIndexOf(''),elementdata.lastIndexOf('')).replace('',''); + // + // tcols = thead.split(''); + // + // + // + // $("#tbl_list > thead").append(thead); + // $("#tbl_list > tbody").append(tbody); + // $("#tbl_list > tfoot").append(tfoot); + // + // } + //} + // $("#tbl_list").dataTable({ + // "language": { + // "url": "../../../web/js/locale/datatable_fr.json" + // }, + // "paging": false, + // "ordering": false, + // "info": false, + // "filter": false, + // "destroy": true + //}); +} \ No newline at end of file diff --git a/modules/reports/js/printpdf.js b/modules/reports/js/printpdf.js new file mode 100644 index 0000000..c178594 --- /dev/null +++ b/modules/reports/js/printpdf.js @@ -0,0 +1,85 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var printpdf = { + //onLoad: function() { + // // initialization code + // this.initialized = true; + // this.strings = document.getElementById("printpdf-strings"); + // this.prefs = Components.classes["@mozilla.org/preferences-service;1"] + // .getService(Components.interfaces.nsIPrefBranch).getBranch("extensions.printpdf@pavlov."); + //}, + onMenuItemCommand: function(fpath,fname,e) { + var nsIFilePicker = Components.interfaces.nsIFilePicker; + var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); + picker.init(window, "Save Document as PDF", nsIFilePicker.modeSave); + picker.appendFilter("PDF", "*.pdf"); + picker.defaultExtension = "pdf"; + picker.defaultString = content.document.title; + + picker.show(); + + var webBrowserPrint = window.content.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint); + + var PSSVC = Components.classes["@mozilla.org/gfx/printsettings-service;1"] + .getService(Components.interfaces.nsIPrintSettingsService); + + var printSettings = PSSVC.newPrintSettings; + + printSettings.printToFile = true; + printSettings.toFileName = picker.file.path; + printSettings.printSilent = true; + printSettings.outputFormat = Components.interfaces.nsIPrintSettings.kOutputFormatPDF; + + // Added by bho + //var myPrintPrefs = printpdf.getPrintingPrefs(); + printSettings.printBGColors = true; + printSettings.printBGImages = true; + printSettings.unwriteableMarginTop = 0.5; + printSettings.unwriteableMarginLeft = 0.5; + printSettings.unwriteableMarginBottom = 0.5; + printSettings.unwriteableMarginRight = 0.5; + printSettings.marginTop = 0.2; /* these are in inches */ + printSettings.marginLeft = 0.2; + printSettings.marginBottom = 0.2; + printSettings.marginRight = 0.2; + //printSettings.shrinkToFit; + printSettings.paperName = "iso_a4"; /* name of paper */ + printSettings.paperSizeType = 1; /* use native data or is defined here */ + //printSettings.paperData = 9; /* native data value */ + printSettings.orientation = 1; + //"PDF Orientation:" + printSettings.orientation + "\n"); + if (printSettings.orientation == 1) { + printSettings.paperWidth = 297.0; /* width of the paper in inches or mm */ + printSettings.paperHeight = 210.0; /* height of the paper in inches or mm */ + + } else { + printSettings.paperWidth = 210.0; /* width of the paper in inches or mm */ + printSettings.paperHeight = 297.0; /* height of the paper in inches or mm */ + } + printSettings.paperSizeUnit = 1; /* paper is in inches or mm */ + //lets hide those ugly default headers + printSettings.footerStrCenter = ''; + printSettings.footerStrLeft = ''; + printSettings.footerStrRight = ''; + printSettings.headerStrCenter = ''; + printSettings.headerStrLeft = ''; + printSettings.headerStrRight = ''; + //} + // END: Added by bho + + webBrowserPrint.print(printSettings, null); + } + //onToolbarButtonCommand: function(e) { + // // just reuse the function above. you can change this, obviously! + // printpdf.onMenuItemCommand(e); + //}, + //getPrintingPrefs: function (){ + // return { + // showBGColor: this.prefs.getBoolPref("print.showBGColors"), + // showBGImages: this.prefs.getBoolPref("print.showBGImages"), + // showHeaders: this.prefs.getBoolPref("print.showHeaders") + // }; + //} + +}; +//window.addEventListener("load", function(e) { printpdf.onLoad(e); }, false); diff --git a/modules/reports/js/printutils.js b/modules/reports/js/printutils.js new file mode 100644 index 0000000..d3ac722 --- /dev/null +++ b/modules/reports/js/printutils.js @@ -0,0 +1,41 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var printmanager = { + onprint: function() { + var sprdata = apppref.getpreference("pageconfig.lastpage"); + var prdata = JSON.parse(sprdata); + var spldata = apppref.getpreference("pageconfig." + prdata.view); + var pldata = JSON.parse(spldata); + if (!pldata.printlayout) { + //dump(prdata.module +" "+prdata.view+": Sorry, no printlayout defined!\n"); + }else { + //dump(JSON.stringify(pldata) + "\n"); + printmanager.load_printpreview("chrome://creorga/content/modules/reports/print_" +pldata.printlayout + ".html"); + } + }, + load_pdf: function(data){ + var params = { in : { + "uri": data.uri + }, + out: null + }; + var dlg = window.openDialog("chrome://creorga/content/modules/reports/dlg/dlgpdfviewer.xul", "dlgpdfviewer", + "chrome,centerscreen,resizable,scrollbars", params).focus(); + if (params.out) { + //code + } + }, + load_printpreview: function(path) { + var params = { in : { + "uri": path + }, + out: null + }; + var dlg = window.openDialog("chrome://creorga/content/modules/reports/dlg/dlgprint.xul", "dlgprint", + "chrome,centerscreen,resizable,scrollbars,modal", params).focus(); + if (params.out) { + if (params.out.reload == true) { + printmanager.load_printpreview(params.in.uri,params.in.type); + } + } + }, +} \ No newline at end of file diff --git a/modules/reports/print_book.html b/modules/reports/print_book.html new file mode 100644 index 0000000..248f817 --- /dev/null +++ b/modules/reports/print_book.html @@ -0,0 +1,43 @@ + + + + + Creorga - Enfant + + + + + + + + + + + + + + +
    + + + + + +
    +
    + +
    + + + + + + + + \ No newline at end of file diff --git a/modules/reports/print_calendar.html b/modules/reports/print_calendar.html new file mode 100644 index 0000000..c834e6f --- /dev/null +++ b/modules/reports/print_calendar.html @@ -0,0 +1,53 @@ + + + + + Creorga - Printing - List + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    + + + + + + + + + + \ No newline at end of file diff --git a/modules/reports/print_child.html b/modules/reports/print_child.html new file mode 100644 index 0000000..4e2c4d6 --- /dev/null +++ b/modules/reports/print_child.html @@ -0,0 +1,134 @@ + + + + + Creorga - Enfant + + + + + + + + + + + + + + +
    + + + + + +
    +
    +

    Données de base

    + + + + + + + + + + + + + + + + +
    Prénom
    Nom
    Date de naissance
    No. Check Service
    Date d'expiration
    No. Client
    Addresse
    Code Postale
    Ville
    Pays
    Nationalité
    Langue maternelle
    Remarque
    +
    + +
    +

    Données parents / personnes de référence

    +
    + + + +
    +
    +
    + +
    +

    Données personnes de réferences/authorisées

    +
    + + + +
    +
    +
    + +
    +

    Info Planning

    + + + + + + +
    Date d'entrée
    Date de sortie
    +
    + + + +
    +
    +
    + +
    +

    Info Santé

    + + + + + + + + + + +
    Médecin de famille
    Téléphone
    Adr. cabinet
    Code Postale
    Ville
    Pays
    Info Santé
    +
    + +
    +

    Info fincances/caution

    + + + + + + + + + + +
    Somme totale
    Somme payé
    Somme remboursé
    Date Status
    Compte bancaire
    BIC
    Remarque
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/reports/print_list.html b/modules/reports/print_list.html new file mode 100644 index 0000000..13a8de5 --- /dev/null +++ b/modules/reports/print_list.html @@ -0,0 +1,69 @@ + + + + + Creorga - Printing - List + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + + + +
    + + + + + + + + + + + + diff --git a/modules/reports/print_logchild.html b/modules/reports/print_logchild.html new file mode 100644 index 0000000..f41f7bf --- /dev/null +++ b/modules/reports/print_logchild.html @@ -0,0 +1,44 @@ + + + + + Creorga - Logbook + + + + + + + + + + + + +
    + + + + + +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/modules/reports/print_multilist.html b/modules/reports/print_multilist.html new file mode 100644 index 0000000..8b7a52b --- /dev/null +++ b/modules/reports/print_multilist.html @@ -0,0 +1,63 @@ + + + + + Creorga - Printing - MultiList + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + +
    +

    + + + + + + + + + +
    +
    +
    + + + + + + + + + + diff --git a/modules/reports/print_table.html b/modules/reports/print_table.html new file mode 100644 index 0000000..d4a0374 --- /dev/null +++ b/modules/reports/print_table.html @@ -0,0 +1,45 @@ + + + + + Creorga - Printing - Table + + + + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + + + + + + + diff --git a/modules/reports/reports.xul b/modules/reports/reports.xul new file mode 100644 index 0000000..7f9abec --- /dev/null +++ b/modules/reports/reports.xul @@ -0,0 +1,10 @@ + + + + + + + + + + + + + + + + + + diff --git a/modules/settings/dbconfig.js b/modules/settings/dbconfig.js new file mode 100644 index 0000000..361a038 --- /dev/null +++ b/modules/settings/dbconfig.js @@ -0,0 +1,7 @@ +function initpage(){ + +} + +var dbconfig = { + +} \ No newline at end of file diff --git a/modules/settings/index.html b/modules/settings/index.html new file mode 100644 index 0000000..f9a2741 --- /dev/null +++ b/modules/settings/index.html @@ -0,0 +1,67 @@ + + + + Dashboard + + + + + + + + + + +
    + + + + + + + + + + +
    NomTypeVPNURLStatus
    + +
    + + + + + + + + + + + + + + + + diff --git a/modules/settings/index.js b/modules/settings/index.js new file mode 100644 index 0000000..f4a8bae --- /dev/null +++ b/modules/settings/index.js @@ -0,0 +1,7 @@ +function initpage(){ + console.log("Loading Settings!"); +} + +function db_new(){ + parent.userapp.loadmodulepage('settings','db',null); +} \ No newline at end of file diff --git a/modules/settings/js/multisite_reader.js b/modules/settings/js/multisite_reader.js new file mode 100644 index 0000000..a8cb8c9 --- /dev/null +++ b/modules/settings/js/multisite_reader.js @@ -0,0 +1,58 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var multisite_reader = { + + getsites: function(){ + var childnames = apppref.branch.getChildList("",{}); + var clmsel = document.getElementsByClassName("clmultisite"); + var cnum = apppref.getpreference("support.database.currentdb.num"); + var xx = document.getElementById("pop_multisites"); + while(xx.hasChildNodes()){ + xx.removeChild(xx.firstChild); + } + for (var i in childnames){ + if ((childnames[i].substring(0,16) == 'support.database') && (childnames[i].indexOf("currentdb") == -1) && (childnames[i].indexOf("currentsite") == -1)) { + //dump("gsites:" + childnames[i] + "\n"); + var sitecfg = JSON.parse(apppref.getpreference(childnames[i])); + //dump("Creche loader: " + JSON.stringify(sitecfg) + "A: "+system.fileexists( sitecfg.path.local ) + system.sep() + sitecfg.uuid + ".sqlite")+ "\n"); + //if (system.fileexists( sitecfg.path.local + system.sep() + sitecfg.uuid + ".sqlite")){ + if (!document.getElementById("mnumultisite_" + sitecfg.dbnum)) + { + var item = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "menuitem"); + item.setAttribute("label", sitecfg.name); + item.setAttribute("id", "mnumultisite_" + sitecfg.dbnum); + item.setAttribute("value", sitecfg.dbnum); + item.setAttribute("class","clmultisite"); + item.setAttribute("oncommand","multisite_reader.setcurrent('"+ sitecfg.dbnum +"');"); + document.getElementById("pop_multisites").appendChild(item); + }else { + document.getElementById("mnumultisite_" + sitecfg.dbnum).setAttribute("label", sitecfg.name); + if (sitecfg.dbnum == cnum) { + document.getElementById("curcreche").value=sitecfg.name; + } + } + //} + + } + } + }, + setcurrent:function(num){ + if (!num) { + return; + } + apppref.setpreference("support.database.currentdb.num",num); + + curcfg.loadconfig(num); + //appdb.check_defaultdata(); + ///dump("creche loaded: " + curcfg.dbfile.local +"\ndbnum: " + curcfg.dbnum + "\nName: " + curcfg.name + "\n"); + if (system.fileexists(curcfg.dbfile.local)) { + navigation.update_dbname(curcfg.name); + var lastpageopened = JSON.parse(apppref.getpreference("pageconfig.lastpage")); + if (lastpageopened.view != "") { + navigation.load_appview(lastpageopened.view,lastpageopened.module,null,lastpageopened.header); + } + } else { + //dump("File : '" + curdb + "' does not exist!\n"); + } + + } +} \ No newline at end of file diff --git a/modules/settings/multisite.xul b/modules/settings/multisite.xul new file mode 100644 index 0000000..bdcdc3e --- /dev/null +++ b/modules/settings/multisite.xul @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/settings/support/support.xul b/modules/settings/support/support.xul new file mode 100644 index 0000000..735eaa4 --- /dev/null +++ b/modules/settings/support/support.xul @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/settings/support/update.html b/modules/settings/support/update.html new file mode 100644 index 0000000..980dcc9 --- /dev/null +++ b/modules/settings/support/update.html @@ -0,0 +1,47 @@ + + + + + + Creorga - Update + + + + + + + + + + + + + + +
    + +
    +
    +
    +
    +

    icon Info mise-à-jour

    +
    +
    + Pas de mise-à-jour disponible! +
    +
    +
    + + +
    + + + + + + + + + + + \ No newline at end of file diff --git a/modules/staff/coworker.html b/modules/staff/coworker.html new file mode 100644 index 0000000..572013d --- /dev/null +++ b/modules/staff/coworker.html @@ -0,0 +1,610 @@ + + + + + + + Employé(e) + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + +
    +
    +
    + + + +
    + +
    + +
    + +
    + + + +
    + +
    + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + +
    + +
    + +
    +
    + +
    + +
    + + +
    + +
    + + +
    h
    +
    +
    + +
    + + +
    h
    +
    +
    + +
    + +
    +
    +
    + +
    +
    + +
    + +
    (Min: 4 charatères)
    +
    +
    + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    + +
    + +
    + + +
    +
    +
    +
    + +
    + +
    + +
    + + +
    + + h +
    + +
    + +
    + + + +
    + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/staff/coworker_basic.html b/modules/staff/coworker_basic.html new file mode 100644 index 0000000..308e77c --- /dev/null +++ b/modules/staff/coworker_basic.html @@ -0,0 +1,332 @@ + + + + + + + Employé(e) + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + +
    +
    +
    + + + +
    + +
    + +
    + +
    + + + +
    + +
    + +
    +
    + + + +
    +
    + +
    +
    +
    + +
    + +
    + +
    + +
    +
    + +
    + +
    + + +
    + +
    + + +
    h
    +
    +
    + +
    + +
    +
    +
    + +
    +
    + +
    + +
    (Min: 4 charatères)
    +
    +
    + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    + +
    + +
    + + +
    +
    +
    +
    + +
    + +
    + +
    + + +
    + + h +
    + +
    +
    + + +
    + + h +
    + +
    + +
    + + + + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Congé
      planification 
    Typeouvertdemandévalidépris
    normale    
    exceptionelle    
    maladie    
    total    
    +
    + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/staff/img/staff.png b/modules/staff/img/staff.png new file mode 100644 index 0000000000000000000000000000000000000000..679ba253a3706d14c84a8a151bd206fcc2272aea GIT binary patch literal 597 zcmV-b0;>IqP)&*|4Fv!I0pdwS zK~z}7?Uuhw9YGMsKktxOXoxZTT$`Ycjcu?Dq)EU^5z_1*5QslwAz2I}q>#s&DqtXj zc5aBEL{La?p}injDcHCHMFbHGlb2>6xrDpjJM}Qd`*yc8yYroyFEa;q)N#isg&dR- zPl0bhYwUO*7}wIS7fL`GF$R3}xD0A(*KR_f!4te0mD1<;eBN{hFpfe5(gvL6LD0&}H?0cFH`o?VdE(;q;uBe4hE&+=XjQcL^A zH;PMuZ`rf~pMlp-3zZB(tB&L+;A>(9lo2h!TVOIrHdAgxzH(FVae~hwa0ZNMX*UyF zpp1A2i~`~snm7Y0T3W4)c%Lx!A}wt-aUClohJg9B<&qOspwDSy6?o{*yMbdZ?fGA< zlo3n7$}I)2CAAH_0cK<82f(hY@*ii9%5RDzU)5wPU>k5~qFiX;GV j5wLd^O`wiC{(t-irfhTDukY7400000NkvXXu0mjf(318& literal 0 HcmV?d00001 diff --git a/modules/staff/js/coworker.js b/modules/staff/js/coworker.js new file mode 100644 index 0000000..9030fe7 --- /dev/null +++ b/modules/staff/js/coworker.js @@ -0,0 +1,1150 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var pconfig = null; +var delplan = null; +var delvacation = null; +var wh= window.innerHeight -440; +var curdatediff = null; +var redate = /\d\d.\d\d.\d\d\d\d/; +var curfreq ={}; +var maxdayhours = null; +var maxhalfdayhours = null; +//var lictype = apppref.getpreference("support.lictype"); + +function initdata() { + load_helpers(); + var pdata = apppref.getpreference("pageconfig.coworker"); + if (pdata != '') { + pconfig = JSON.parse(pdata); + } + //"get CoWorker cfg:" +JSON.stringify(pconfig) + "\n"); + if (!pconfig.year) { + pconfig.year=new Date().getFullYear(); + } + if (!pconfig.printlayout) { + pconfig.printlayout = 'list'; + apppref.setpreference("pageconfig.coworker",pconfig); + } + var cdatasql = "SELECT jobtitle, prename, surname, address, zip, city, country, strftime('%d.%m.%Y',entrydate) as entrydate, strftime('%d.%m.%Y',exitdate) as exitdate, iban, bic, accountname, phone, email, uuid,color,weekhours,maxdayhours,case when password is not null and length(password) > 3 then 1 else 0 end as passwordset FROM staff where uuid='" + pconfig.uuid + "';"; + var cdata = appdb.dbquery(cdatasql); + cdata = cdata.sqldata[0]; + for (var ci in cdata) { + if (document.getElementById("staff_" + ci)) { + document.getElementById("staff_" + ci).setAttribute('value', cdata[ci]); + } + + } + + var crdata = appdb.dbquery("select stafflist from creche;"); + if ((crdata) && (crdata.sqldata[0].stafflist == "1")){ + $("#pwddata").hide(); + } + if (cdata) { + set_infoheader(cdata.prename + " " + cdata.surname); + } + $('#staff_color').minicolors({theme:'bootstrap'}); + set_selectyears(); + //load_staff_selection('staffuuid'); + + if (pconfig && pconfig.activetab) { + $('a[href="#'+pconfig.activetab+'"]').tab('show'); + }else{ + $('a[href="#vacancy"]').tab('show'); + pconfig.activetab = 'vacancy'; + } + +// if (pconfig && pconfig.vacancyunit){ +// //dump("has vacancy unit:" + pconfig.vacancyunit + "\n"); +// $('#vacancy_unit').val(pconfig.vacancyunit); +// }else { + pconfig.vacancyunit = "hours"; +// $('#vacancy_unit').val("days"); +// } + + $('#frmeditvacancy #vacdatefrom').on("blur",function (e) { + var ok = true; + if ($('#frmeditvacancy #vacdatefrom').val().match(redate)) { + $('#btn_save_vacancy').removeAttr("disabled"); + }else { + ok = false; + $('#btn_save_vacancy').attr("disabled","1"); + } + if ((ok == true) && ($('#frmeditvacancy #vacdateto').val() != '')) { + var tmpdt1 = encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date'); + var nd = new Date(tmpdt1.replace(/'/g,'')); + var xd = new Date(nd.getFullYear(),nd.getMonth(),nd.getDate() + curdatediff); + $('#frmeditvacancy #vacdateto').val(xd.toLocaleFormat("%d.%m.%Y")); + var tmpdt2 = encodeparam($('#frmeditvacancy #vacdateto').val(),'date'); + if (tmpdt1 > tmpdt2) { + $('#btn_save_vacancy').attr("disabled","1"); + } else { + $('#btn_save_vacancy').removeAttr("disabled"); + } + + } + }); + $('#frmeditvacancy #vacdateto').on("blur",function (e) { + var ok = true; + if ($('#frmeditvacancy #vacdateto').val().match(redate)) { + $('#btn_save_vacancy').removeAttr("disabled"); + }else { + ok = false; + $('#btn_save_vacancy').attr("disabled","1"); + } + curdatediff=daysBetween(new Date(encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date').replace(/'/g,'')),new Date(encodeparam($('#frmeditvacancy #vacdateto').val(),'date').replace(/'/g,''))); + if ((ok == true) && ($('#frmeditvacancy #vacdateto').val() != '')) { + var tmpdt1 = encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date'); + var tmpdt2 = encodeparam($('#frmeditvacancy #vacdateto').val(),'date'); + if (tmpdt1 > tmpdt2) { + $('#btn_save_vacancy').attr("disabled","1"); + } else { + $('#btn_save_vacancy').removeAttr("disabled"); + } + + } + }); + $('#dailyduration').on('change',function(e){ + if ($('#dailyduration').val() == "1.0"){ + $('#frmeditvacancy #hours').val(maxdayhours); + } + if ($('#dailyduration').val() == "0.4"){ + $('#frmeditvacancy #hours').val(maxhalfdayhours); + } + }); + $('#staff_color').on('change',function(e){ + saveonfocusout('staff_color'); + }); + //$('#frmeditevent #color').minicolors({theme:'bootstrap',position: 'bottom right'}); + $("#weekly_byday :input").change(function() { + if (this.checked) { + this.setAttribute("checked",true); + }else { + this.removeAttribute("checked"); + } + +}); + $("#monthly_bydaypos :input").change(function() { + + if (this.checked) { + this.setAttribute("checked",true); + }else { + this.removeAttribute("checked"); + } + +}); + $("#monthly_bydaywday :input").change(function() { + + if (this.checked) { + this.setAttribute("checked",true); + }else { + this.removeAttribute("checked"); + } + +}); + $("#monthly_bymonthday :input").change(function() { + + if (this.checked) { + this.setAttribute("checked",true); + }else { + this.removeAttribute("checked"); + } + +}); + $("#monthly_by :input").change(function() { + var xd = this.id.split("_"); + curfreq.freqtype=xd[2]; + + this.setAttribute("checked",true); + + $('#freq_monthly_byday').hide(); + $('#freq_monthly_bymonthday').hide(); + $('#pnl_monthly_byday').removeAttr("checked"); + $('#pnl_monthly_bymonthday').removeAttr("checked"); + + $('#freq_' + this.value).show(); + +}); + + $('#frmeditevent #datefrom').on("blur",function (e) { + var ok = true; + if ($('#frmeditevent #datefrom').val().match(redate)) { + $('#btn_save_event').removeAttr("disabled"); + }else { + ok = false; + $('#btn_save_event').attr("disabled","1"); + } + if ((ok == true) && ($('#frmeditevent #dateto').val() != '')) { + var tmpdt1 = encodeparam($('#frmeditevent #datefrom').val(),'date'); + var tmpdt2 = encodeparam($('#frmeditevent #dateto').val(),'date'); + if (tmpdt1 >= tmpdt2) { + $('#btn_save_event').attr("disabled","1"); + } else { + $('#btn_save_event').removeAttr("disabled"); + } + + } + }); + $('#frmeditevent #dateto').on("blur",function (e) { + var ok = true; + if ($('#frmeditevent #dateto').val().match(redate)) { + $('#btn_save_event').removeAttr("disabled"); + }else { + ok = false; + $('#btn_save_event').attr("disabled","1"); + } + if ((ok == true) && ($('#frmeditevent #dateto').val() != '')) { + var tmpdt1 = encodeparam($('#frmeditevent #datefrom').val(),'date'); + var tmpdt2 = encodeparam($('#frmeditevent #dateto').val(),'date'); + + if (tmpdt1 >= tmpdt2) { + $('#btn_save_event').attr("disabled","1"); + } else { + $('#btn_save_event').removeAttr("disabled"); + } + + } + }); + +} + +$('.selyear').on( "change", function(e){ + e.preventDefault(); + + $(".selyear").val($(this).val()); + pconfig.year = $(this).val(); + apppref.setpreference("pageconfig.coworker",pconfig); + if ($(this).attr('id') == "year_organisation") { + load_event_data(); + }else if ($(this).attr('id') == "year_vacancy") { + load_table_vacancy(); + } +}); + +$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + var tn = e.target.toString(); + pconfig.activetab = tn.substring(tn.lastIndexOf("#")+1); + //dump(JSON.stringify(pconfig) + "\n"); + apppref.setpreference("pageconfig.coworker",pconfig); + if (pconfig.activetab == 'activity') { + load_event_data(); + } + if (pconfig.activetab == 'vacancy') { + load_table_vacancy(); + } + }); + +function load_event_data() { + dump("Load event Table!\n"); + var where = new Array(); + + where.push(" st.uuid in ('"+ pconfig.uuid + "')"); + + $("div.panel-daybody").html(""); + var sql = "SELECT cal.uuid, cal.datefrom, cal.dateto, '
    ' || strftime('%Y%m%d',cal.datefrom) ||'
    ' || strftime('%d.%m.%Y',cal.datefrom) AS tbldatefrom ,strftime('%Y%m%d',cal.datefrom) AS strdatefrom, strftime('%Y%m%d',cal.dateto) AS strdateto,cal.timefrom, cal.timeto, cal.description, cal.location, cal.color, cal.freq, '[\"' || GROUP_CONCAT(sp.staffuuid,'\",\"') || '\"]' as staffuuid, GROUP_CONCAT(coalesce(st.surname,'') || ' ' || coalesce(st.prename,''), '
    ' ) as staffnames ,'[\"' || GROUP_CONCAT(st.color,'\",\"') || '\"]' as staffcolors from eventcalendar cal " +" join staffplanning sp on (cal.uuid=sp.eventcalendaruuid " + " AND sp.staffuuid in ('"+ pconfig.uuid +"')) left join staff st on (sp.staffuuid=st.uuid) "+ + " where (cal.datefrom between '" + $('#year_organisation').val() + "-01-01' and '" + $('#year_organisation').val() + "-12-31' and (cal.dateto >= '" + $('#year_organisation').val() + "-01-01' or cal.dateto is null)) or (cal.dateto between '" + $('#year_organisation').val() + "-01-01' and '" + $('#year_organisation').val() + "-12-31' and cal.datefrom < '" + $('#year_organisation').val() + "-01-01') or ((cal.datefrom <= '" + $('#year_organisation').val() + "-01-01') and ((cal.dateto >= '" + $('#year_organisation').val() + "-12-31') or cal.dateto is null)) "+ ((where.length > 0)?" AND (" + where.join(" or ") + ")":"")+" group by cal.uuid order by cal.datefrom,cal.dateto;"; + + var caldata = appdb.dbquery(sql); + + caldata = caldata.sqldata; + + var headerdata = getlabels("act,datefrom,hours,recurrance"); + $("#tbl_activity").html(""); + + var hrow = headerdata; + var tdclass= new Array(); + var tblheader = ''; + + for (var h=0;h'+ headerdata[h].title+''; + } + tblheader += ''; + + $("#tbl_activity").append("" + tblheader + ""); + $("#tbl_activity").append(""); + var tblbody = []; + for (var c in caldata) { + var tblrow = ""; + tblrow += ''; + //tblrow += ""+caldata[c].description+"" + caldata[c].description + ""; + //tblrow += "" + caldata[c].staffnames + ""; + tblrow += "" + caldata[c].tbldatefrom + ""; + tblrow += "" + caldata[c].timefrom + "- " + caldata[c].timeto + ""; + + var freq2 = caldata[c].freq; + if (freq2 != '') { + + freq2 += ';DTSTART='+caldata[c].strdatefrom + 'T000000Z'; + if (caldata[c].dateto != ''){ + freq2 += ';UNTIL='+caldata[c].strdateto + 'T000000Z'; + } + } + + try { + + var rule2 = RRule.fromString(freq2); + + + tblrow += "" + rule2.toText() + ""; + + } catch (ex){ + //"ERROR! loading data!" + ex + " FREQ:" + freq2 + "\n"); + } + tblrow += ""; + tblbody.push(tblrow); + } + + //load table + $("#tbl_activity").append(tblbody.join('')); + $("#tbl_activity").append(""); + + tblcal = $("#tbl_activity").dataTable({ + "language": { + "url": "../../web/js/locale/datatable_fr.json" + }, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "ordering": true, + "info": false, + "filter": false, + "destroy": true + }); + + //$('#tbl_activity').on( 'search.dt', function () { + // + // pconfig.filter = tblcal.api().search(); + // + // apppref.setpreference("pageconfig.calactivity",pconfig); + //} ); + + //$('#tbl_activity').on( 'order.dt', function () { + // pconfig.order= tblcal.fnSettings().aaSorting; + // + // apppref.setpreference("pageconfig.calactivity",pconfig); + // + //} ); + +// if (pconfig.filter) { +// tblcal.fnFilter(pconfig.filter); +// } + if (pconfig.order) { + tblcal.fnSort(pconfig.order); + } + if (/*(!pconfig.filter) && */ (!pconfig.order)) { + tblcal.fnDraw(); + } +} + +function load_table_vacancy() { + //maxdayhours = (parseFloat($("#staff_weekhours").val())/5).toFixed(2); + //maxhalfdayhours = (maxdayhours/2).toFixed(2); + var yearvacanysql = "select hours from staffvacancydays where staffuuid='"+ pconfig.uuid+"' and vacancyyear='"+ $("#year_vacancy").val() +"';"; + var yearvac = appdb.dbquery(yearvacanysql); + var nvyear = ""; + //jsdump("XXSQL:" + JSON.stringify(yearvac) + "\n"); + if (yearvac.sqldata){ + nvyear = yearvac.sqldata[0].hours; + } + $("#vacancyyeartotal").val(nvyear); + var vacdatasql = "SELECT '" + + "' AS action," + "vacyear," + + "strftime('%d.%m.%Y', datefrom) as datefrom,strftime('%d.%m.%Y', dateto) as dateto,printf(\"%.2f\",hours) || 'h' as dayhours,description," + + "case when type=0 and accepted != '1' then printf(\"%.2f\",case when hours < maxdayhours then hours when hours > maxdayhours then maxdayhours else hours end) || 'h' else '' end as thnormalnv," + + "case when type=1 and accepted != '1' then printf(\"%.2f\",case when hours < maxdayhours then hours when hours > maxdayhours then maxdayhours else hours end) || 'h' else '' end as thextranv," + + "case when type=-1 and accepted != '1' then printf(\"%.2f\",case when hours < maxdayhours then hours when hours > maxdayhours then maxdayhours else hours end) || 'h' else '' end as thillnv," + + "case when type=0 and accepted = '1'then printf(\"%.2f\",case when hours < maxdayhours then hours when hours > maxdayhours then maxdayhours else hours end) || 'h' else '' end as thnormalval," + + "case when type=1 and accepted = '1' then printf(\"%.2f\",case when hours < maxdayhours then hours when hours > maxdayhours then maxdayhours else hours end) || 'h' else '' end as thextraval," + + "case when type=-1 and accepted = '1' then printf(\"%.2f\",case when hours < maxdayhours then hours when hours > maxdayhours then maxdayhours else hours end) || 'h' else '' end as thillval," + + "case when type=0 then 'normal' when type=1 then 'exceptionnelle' when type=-1 then 'maladie' end as vacancytype,case when accepted='1' and type != -1 then 'OUI' else 'NON' end as accepted FROM (" + + "select vc.uuid,vc.vacyear,vc.datefrom,vc.dateto,vc.type,vc.description,vc.accepted," + + "((strftime('%s',vc.dateto) - strftime('%s',vc.datefrom)) /84600) + 1 as days," + + "((((strftime('%s',vc.dateto) - strftime('%s',vc.datefrom)) /84600) + 1) / 7) * (7 - (st.weekhours / st.maxdayhours)) as day_to_much," + + "(select count(v.vacancydate) from vacancy v where v.vacancydateto is null and strftime('%s',v.vacancydate) not in ('0','6') and v.vacancydate between vc.datefrom and vc.dateto) as vdays,st.weekhours,st.weekhours / maxdayhours as days_per_week,vc.timefrom,vc.timeto,st.maxdayhours, " + + "cast(cast(strftime(\"%s\",vc.timeto) as int)- cast(strftime(\"%s\",vc.timefrom) as int) as real)/3600 as hours " + + "from vacancycalendar vc join staff st on (vc.staffuuid=st.uuid) where vc.staffuuid='"+ pconfig.uuid+"' and vc.vacyear=" + pconfig.year+");"; + // var vacdatasql = "SELECT ' ' AS action,vacyear," + +// "CASE WHEN datefrom!=dateto THEN 'du:' || strftime('%d.%m.%Y', CASE WHEN datefrom < DATE('"+ pconfig.year +"-01-01') THEN DATE('"+ pconfig.year +"-01-01') ELSE datefrom END) || '
    au: ' || strftime('%d.%m.%Y', CASE WHEN dateto > DATE('"+ pconfig.year +"-12-31') THEN DATE('"+ pconfig.year +"-12-31') ELSE dateto END) ELSE strftime('%d.%m.%Y',datefrom) END AS planningdaterange," + +// //"case when datefrom!=dateto then strftime('%d.%m.%Y',case when datefrom < date('"+ pconfig.year +"-01-01') then 'de: ' date('"+ pconfig.year +"-01-01') else datefrom end) || '
    à: ' || strftime('%d.%m.%Y',case when dateto > date('"+ pconfig.year +"-12-31') then date('"+ pconfig.year +"-12-31') else dateto end) else strftime('%d.%m.%Y',datefrom) end as planningdaterange, " + +// "case when timefrom=timeto then '"+ maxdayhours+ "' || 'h' else printf(\"%.2f\",cast(cast(strftime(\"%s\",timeto) as int)- cast(strftime(\"%s\",timefrom) as int) as real)/3600) || 'h' || case when timefrom!='00:00' then '
    à partir de ' || timefrom else '' end end as hourrange," + +// //"case when timefrom=timeto then '8h' when (cast(substr(timeto,1,2) as int) - cast(substr(timefrom,1,2) as int))= 4 then '4h' || case when timefrom!='00:00' then '
    à partir de ' || timefrom else '' end else (cast(substr(timeto,1,2) as int) - cast(substr(timefrom,1,2) as int)) || 'h' || case when timefrom!='00:00' then '
    à partir de ' || timefrom else '' end end as hourrange, "+ +// "description, " + +// "case when type=0 then 'normal' when type=1 then 'exceptionnelle' when type=-1 then 'maladie' end as vacancytype,case when accepted='1' and type != -1 then 'OUI' else 'NON' end as accepted FROM vacancycalendar where staffuuid='"+ pconfig.uuid +"' and (strftime('%Y',dateto)='"+ pconfig.year +"' or strftime('%Y',datefrom)='"+ pconfig.year +"');"; +//jsdump("XXSQL:" + vacdatasql + "\n"); +var vacdata = appdb.dbqueryarray(vacdatasql); +//jsdump("XXSQL:" + JSON.stringify(vacdata) + "\n"); + + $('#tbl_vacancy').html(""); + //$('#tbl_vacancy').append(''); + //getlastyearsrest(); + //calcvacancy(); + //vacdata.sqlhead.join(",") + "\n"); + var headerdata = getlabels(vacdata.sqlhead.join(",")); + + + $("#tbl_vacancy").dataTable({ + "language": { + "url": "../../web/js/locale/datatable_fr.json" + }, + "data": vacdata.sqldata, + "columns": headerdata, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "ordering": true, + "info": false, + "filter": false, + "destroy": true + }); + +} + +function dlg_vacancy(uuid, type) { + //select weekhours/5 = max daily hours + maxdayhours = (parseFloat($("#staff_weekhours").val())/5).toFixed(2); + maxhalfdayhours = (maxdayhours/2).toFixed(2); + var evdata = { + uuid: 0, + description: '', + vacdatefrom:new Date().toLocaleFormat("%d.%m.%Y"), + vacdateto:new Date().toLocaleFormat("%d.%m.%Y"), + staffuuid:[pconfig.uuid], + timefrom: '00:00', + hours: maxdayhours, + type:'0', + //dailyduration:'1.0', + //hourmax: whr + }; + + if (type == 'upd') { + var evsql = "select uuid,vacdatefrom,vacdateto,timefrom,description,staffuuid,case when hours = '0.00' then '" + maxdayhours +"' else hours end as hours,accepted from (SELECT uuid, strftime(\"%d.%m.%Y\",datefrom) as vacdatefrom, strftime(\"%d.%m.%Y\",dateto) as vacdateto, timefrom, description, '"+pconfig.uuid+"' as staffuuid,type, printf(\"%.2f\",cast((cast(strftime(\"%s\",timeto) as int)- cast(strftime(\"%s\",timefrom) as int))/3600 as real)) as hours,accepted FROM vacancycalendar where uuid='" + uuid.uuid + "');"; + //var evsql = "SELECT uuid, strftime(\"%d.%m.%Y\",datefrom) as vacdatefrom, strftime(\"%d.%m.%Y\",dateto) as vacdateto, timefrom, description, '"+pconfig.uuid+"' as staffuuid,type, case when timefrom!=timeto then '0.' || (cast(substr(timeto,1,2) as int) - cast(substr(timefrom,1,2) as int)) else 1.0 end as dailyduration,null as hours,accepted FROM vacancycalendar where uuid='" + uuid.uuid + "';"; + //dump("EVSQL: " + evsql + "\n"); + evdata = appdb.dbquery(evsql); + evdata = evdata.sqldata[0]; + if (evdata.type == -1){ + $("#btnacceptvacancy").hide(); + }else { + $("#btnacceptvacancy").show(); + } + if (evdata.hours >= maxdayhours) { + evdata.hours=maxdayhours; + $('#dailyduration select').val("1.0"); + } else if (evdata.hours == maxhalfdayhours){ + $('#dailyduration select').val("0.4"); + } else { + $('#dailyduration select').val("0."); + } + + }else { + $('#dailyduration select').val("1.0"); + } + for (var w in evdata) { + if ((w == 'datefrom') || (w == 'dateto')) { + w='vac' + w; + } + + if ($("#frmeditvacancy #" + w)) { + //dump(w + "->"+evdata[w]+"\n"); + if (w == "type"){ + $("#frmeditvacancy #" + w + " select").val(evdata[w]); + } else { + $("#frmeditvacancy #" + w).val(evdata[w]); + } + + + } + + } + + setdailydurationfields(); + $("#edit_vacancy").modal('show'); +} + +function confirm_delete_vacancy(uuid) { + delvacation = uuid; + $("#confirm_delete_vacancy").modal('show'); + return false; +} + +function delete_vacancy() { + var delsql = "DELETE FROM vacancycalendar where uuid='" + delvacation+"';"; + appdb.dbexec(delsql); + load_table_vacancy(); + delvacancy=null; + $("#confirm_delete_vacancy").modal('hide'); + + return false; +} + +function setdailydurationfields() { + var dd = $('#dailyduration :selected').val(); + if (dd=='1.0') { + //$("#ftimefrom").hide(); + $("#hours").prop("disabled",true); + }else if (dd=='0.4') { + //$("#ftimefrom").show(); + $("#hours").prop("disabled",true); + }else if (dd=='0.') { + //$("#ftimefrom").show(); + $("#hours").prop("disabled",false); + } +} + +function save_vacancy() { + var type = 'ins'; + var cuuid = ""; + if ($("#frmeditvacancy #uuid").val() != 0) { + type = 'upd'; + cuuid = $("#frmeditvacancy #uuid").val(); + } + var evsvdata = { + uuid:cuuid, + datefrom: $("#frmeditvacancy #vacdatefrom").val(), + dateto: $("#frmeditvacancy #vacdateto").val(), + timefrom: $("#frmeditvacancy #timefrom").val(), + hours: $("#frmeditvacancy #hours").val(), + description: $("#frmeditvacancy #description").val(), + staffuuid: $("#frmeditvacancy #staffuuid").val(), + type: $("#frmeditvacancy #type").val() + } + var savesql = ""; + if (type == 'ins') { + savesql = "INSERT INTO vacancycalendar (uuid, datefrom, dateto, timefrom, timeto, description, staffuuid, type,vacyear) VALUES " + +"('" + appdb.generate_uuid() + "', date("+encodeparam(evsvdata.datefrom, 'date')+"), date("+encodeparam(evsvdata.dateto, 'date')+"), "+encodeparam(evsvdata.timefrom, 'text')+", strftime(\"%H:%M\",time("+encodeparam(evsvdata.timefrom, 'text')+",'+"+evsvdata.hours+" hours')), "+encodeparam(evsvdata.description, 'text')+", "+encodeparam(evsvdata.staffuuid, 'text')+","+evsvdata.type+","+encodeparam(evsvdata.datefrom, 'year')+");"; + } else { + savesql = "UPDATE vacancycalendar SET vacyear=" + encodeparam(evsvdata.datefrom, 'year') + ", datefrom = date("+encodeparam(evsvdata.datefrom, 'date')+"), dateto = date("+encodeparam(evsvdata.dateto, 'date')+"), timefrom = "+encodeparam(evsvdata.timefrom, 'text')+", timeto = strftime(\"%H:%M\",time("+encodeparam(evsvdata.timefrom, 'text')+",'+"+evsvdata.hours+" hours')), description = "+encodeparam(evsvdata.description, 'text')+", staffuuid = "+encodeparam(evsvdata.staffuuid, 'text')+", type = "+evsvdata.type+" WHERE uuid = '"+evsvdata.uuid+"';"; + } + //dump("VACSAVESQL:" + savesql + "\n"); + appdb.dbexec(savesql); + load_table_vacancy(); + + $("#frmeditvacancy #uuid").val("0"); + $("#edit_vacancy").modal('hide'); +} + + +function set_selectyears() { + + var years = appdb.dbquery("select strftime('%Y',coalesce(min(entrydate),date('now','-1 year'))) as minyear, strftime('%Y',date('now', '+1 year')) as maxyear from staff where uuid='"+pconfig.uuid+"';"); + var minyear = parseInt(years.sqldata[0].minyear); + var maxyear = parseInt(years.sqldata[0].maxyear); + for (var y=minyear;y<=maxyear;y++){ + + var sel = ""; + if (y == pconfig.year) { + sel=' selected="1" '; + + } + + $(".selyear").append(""); + } + +} + +// function calcvacancy() { +// //"Calc Vacancy Data!\n"); +// var csel = "select days,hours from staffvacancydays where staffuuid='"+pconfig.uuid+"' and vacancyyear='"+pconfig.year+"';"; +// //"SQL:"+ csel +"\n"); +// var cnum = appdb.dbquery(csel); + +// if (cnum.sqldata.length > 0) { +// if (pconfig.vacancyunit == "hours"){ +// if ((!cnum.sqldata[0].hours) || (cnum.sqldata[0].hours === "")){ +// cnum.sqldata[0].hours = cnum.sqldata[0].days * 8; +// } +// $('#vacancyyeartotal').val(cnum.sqldata[0].hours); +// }else{ +// $('#vacancyyeartotal').val(cnum.sqldata[0].days); +// } + +// }else { +// $('#vacancyyeartotal').val(""); +// } +// var vdays = (($('#vacancyyeartotal').val() === "")?"":cnum.sqldata[0].days); +// var weekhours = $('#staff_weekhours').val(); +// if (vdays === '') { +// $('#vacancystatus').html('
    Pas de jours de congés configuré pour l\'année '+ pconfig.year+'!
    '); +// return; +// }else if (weekhours === '') { +// $('#vacancystatus').html('
    Pas de heures par semaine configurées!
    '); +// return; +// } + +// var vcalcsql = "select printf(\"%.2f\",(sum(dayhours) / ("+weekhours+"/5))) as days, printf(\"%.2f\",SUM(dayhours)) as hours,"+ +// "taken,type,accepted from (" + +// "select vd.daydate,case when daydate <= date('now') then 1 else 0 end as taken,case when vc.timefrom=vc.timeto then cast ("+weekhours+"/5 as real) else cast(cast(strftime(\"%s\",vc.timeto) as int)- cast(strftime(\"%s\",vc.timefrom) as int) as real)/3600 end as dayhours,type,case when type != -1 then accepted else '1' end as accepted "+ +// "from vacancycalendar vc left join ( "+ +// "select daydate from ( "; +// var df = new Date(pconfig.year,0,1); +// var dt = new Date(pconfig.year,11,31); +// var yd = []; +// for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){ +// yd.push("select date('"+dx.toLocaleFormat('%Y-%m-%d')+"') as daydate"); +// } +// vcalcsql += yd.join(" UNION ") + +// ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+pconfig.year+"-01-01' and '"+pconfig.year+"-12-31' and vacancydateto is null) " + +// ") vd on (vd.daydate between vc.datefrom and vc.dateto) " + +// "left join staffvacancydays svd on (vc.staffuuid=svd.staffuuid) " + +// "where vc.staffuuid='"+pconfig.uuid+ "' and daydate is not null group by daydate) group by type,taken,accepted;"; +// //dump("SQL2:" + vcalcsql + "\n"); +// var vcalc = appdb.dbquery(vcalcsql); +// vcalc = vcalc.sqldata; +// //dump(JSON.stringify(vcalc)+ "\n"); +// vhours = vdays * 8; +// var vac = {}; +// $("#lblyear").html(pconfig.year); +// vac.normal = {taken:{hours:0,days:0},open:{vhours:parseFloat(vhours), days:parseFloat(vdays)},accepted:{hours:0,days:0},asked:{hours:0,days:0}}; +// vac.extra = {taken:{hours:0,days:0},open:{hours:0, days:0},accepted:{hours:0,days:0},asked:{hours:0,days:0}}; +// vac.ill = {taken:{hours:0,days:0},open:{hours:0, days:0},accepted:{hours:0,days:0},asked:{hours:0,days:0}}; +// vac.total = {taken:{hours:0,days:0},open:{hours:0, days:0},accepted:{hours:0,days:0},asked:{hours:0,days:0}}; +// //dump(JSON.stringify(vac) + "\n"); +// if (vcalc) { +// for (var c in vcalc){ +// if (vcalc[c].type == '0' ){ //normal +// if (vcalc[c].taken == '1'){ +// if (vcalc[c].accepted=='1'){ +// vac.normal.taken.days = vac.normal.taken.days + parseFloat(vcalc[c].days); +// vac.normal.taken.hours = vac.normal.taken.hours + parseFloat(vcalc[c].hours); +// } else { +// vac.normal.asked.days = vac.normal.asked.days + parseFloat(vcalc[c].days); +// vac.normal.asked.hours = vac.normal.asked.hours + parseFloat(vcalc[c].hours); +// } + +// } else if (vcalc[c].taken == '0') { +// if (vcalc[c].accepted=='1'){ +// vac.normal.accepted.days = vac.normal.accepted.days + parseFloat(vcalc[c].days); +// vac.normal.accepted.hours = vac.normal.accepted.hours + parseFloat(vcalc[c].hours); +// } else { +// vac.normal.asked.days = vac.normal.asked.days + parseFloat(vcalc[c].days); +// vac.normal.asked.hours = vac.normal.asked.hours + parseFloat(vcalc[c].hours); +// } + +// } +// vac.normal.open.days = parseFloat(vdays) - vac.normal.taken.days - vac.normal.accepted.days - vac.normal.asked.days; +// vac.normal.open.hours = parseFloat(vhours) - vac.normal.taken.hours - vac.normal.accepted.hours - vac.normal.asked.hours; +// //total + +// } else if (vcalc[c].type == '1' ){ //extra +// if (vcalc[c].taken == '1'){ +// if (vcalc[c].accepted=='1'){ +// vac.extra.taken.days = vac.extra.taken.days + parseFloat(vcalc[c].days); +// vac.extra.taken.hours = vac.extra.taken.hours + parseFloat(vcalc[c].hours); +// } else { +// vac.extra.asked.days = vac.extra.asked.days + parseFloat(vcalc[c].days); +// vac.extra.asked.hours = vac.extra.asked.hours + parseFloat(vcalc[c].hours); +// } +// } else if (vcalc[c].taken == '0'){ +// if (vcalc[c].accepted=='1'){ +// vac.extra.accepted.days = vac.extra.accepted.days + parseFloat(vcalc[c].days); +// vac.extra.accepted.hours = vac.extra.accepted.hours + parseFloat(vcalc[c].hours); +// } else { +// vac.extra.asked.days = vac.extra.asked.days + parseFloat(vcalc[c].days); +// vac.extra.asked.hours = vac.extra.asked.hours + parseFloat(vcalc[c].hours); +// } +// } +// vac.extra.open.days = 0; +// vac.extra.open.hours = 0; +// } else if (vcalc[c].type == '-1' ){ //ill +// if (vcalc[c].taken == '1'){ +// vac.ill.taken.days = vac.ill.taken.days + parseFloat(vcalc[c].days); +// vac.ill.taken.hours = vac.ill.taken.hours + parseFloat(vcalc[c].hours); +// } else if (vcalc[c].taken == '0'){ +// if (vcalc[c].accepted=='1'){ +// vac.ill.accepted.days = vac.ill.accepted.days + parseFloat(vcalc[c].days); +// vac.ill.accepted.hours = vac.ill.accepted.hours + parseFloat(vcalc[c].hours); +// } else { +// vac.ill.asked.days = vac.ill.asked.days + parseFloat(vcalc[c].days); +// vac.ill.asked.hours = vac.ill.asked.hours + parseFloat(vcalc[c].hours); +// } +// } +// vac.ill.open.days = 0; +// vac.ill.open.hours = 0; + +// } +// vac.total.taken.days = vac.normal.taken.days + vac.extra.taken.days + vac.ill.taken.days; +// vac.total.taken.hours = vac.normal.taken.hours + vac.extra.taken.hours + vac.ill.taken.hours; +// vac.total.open.days = vac.normal.open.days + vac.extra.open.days + vac.ill.open.days; +// vac.total.open.hours = vac.normal.open.hours + vac.extra.open.hours + vac.ill.open.hours; +// vac.total.accepted.days = vac.normal.accepted.days + vac.extra.accepted.days + vac.ill.accepted.days; +// vac.total.accepted.hours = vac.normal.accepted.hours + vac.extra.accepted.hours + vac.ill.accepted.hours; +// vac.total.asked.days = vac.normal.asked.days + vac.extra.asked.days + vac.ill.asked.days; +// vac.total.asked.hours = vac.normal.asked.hours + vac.extra.asked.hours + vac.ill.asked.hours; +// } +// //JSON.stringify(vac) + "\n"); +// if (pconfig.vacancyunit == 'days'){ +// $("#vacnopen").html(((vac.normal.open.days && vac.normal.open.days != 0)?vac.normal.open.days.toFixed(2)+" j":" ")); +// $("#vacntaken").html(vac.normal.taken.days.toFixed(2)+" j"); +// $("#vacnasked").html(vac.normal.asked.days.toFixed(2)+" j"); +// $("#vacnplanned").html(vac.normal.accepted.days.toFixed(2)+" j"); + +// $("#vaceopen").html(" "); +// $("#vacetaken").html(vac.extra.taken.days.toFixed(2)+" j"); +// $("#vaceasked").html(vac.extra.asked.days.toFixed(2)+" j"); +// $("#vaceplanned").html(vac.extra.accepted.days.toFixed(2)+" j"); + +// $("#vacmopen").html(" "); +// $("#vacmtaken").html(vac.ill.taken.days.toFixed(2)+" j"); +// $("#vacmasked").html(vac.ill.asked.days.toFixed(2)+" j"); +// $("#vacmplanned").html(vac.ill.accepted.days.toFixed(2)+" j"); + +// $("#vactopen").html(vac.total.open.days.toFixed(2)+" j"); +// $("#vacttaken").html(vac.total.taken.days.toFixed(2)+" j"); +// $("#vactasked").html(vac.total.asked.days.toFixed(2)+" j"); +// $("#vactplanned").html(vac.total.accepted.days.toFixed(2)+" j"); +// } else { +// vac.normal.open.hours=vac.normal.open.hours + parseInt($("#vacancylastyearrest").val()); +// $("#vacnopen").html(((vac.normal.open.hours && vac.normal.open.hours != 0)?vac.normal.open.hours.toFixed(2)+" h":" ")); +// $("#vacntaken").html(((vac.normal.taken.hours && vac.normal.taken.hours > 0)?vac.normal.taken.hours.toFixed(2)+" h":" ")); +// $("#vacnasked").html(((vac.normal.asked.hours && vac.normal.asked.hours > 0)?vac.normal.asked.hours.toFixed(2)+" h":" ")); +// $("#vacnplanned").html(((vac.normal.accepted.hours && vac.normal.accepted.hours > 0)?vac.normal.accepted.hours.toFixed(2)+" h":" ")); + +// $("#vacetaken").html(((vac.extra.taken.hours && vac.extra.taken.hours > 0)?vac.extra.taken.hours.toFixed(2)+" h":" ")); +// $("#vaceasked").html(((vac.extra.asked.hours && vac.extra.asked.hours > 0)?vac.extra.asked.hours.toFixed(2)+" h":" ")); +// $("#vaceplanned").html(((vac.extra.accepted.hours && vac.extra.accepted.hours > 0)?vac.extra.accepted.hours.toFixed(2)+" h":" ")); + +// $("#vacmtaken").html(((vac.ill.taken.hours && vac.ill.taken.hours > 0)?vac.ill.taken.hours.toFixed(2)+" h":" ")); +// $("#vacmasked").html(((vac.ill.asked.hours && vac.ill.asked.hours > 0)?vac.ill.asked.hours.toFixed(2)+" h":" ")); +// $("#vacmplanned").html(((vac.ill.accepted.hours && vac.ill.accepted.hours > 0)?vac.ill.accepted.hours.toFixed(2)+" h":" ")); + +// $("#vactopen").html(((vac.total.open.hours && vac.total.open.hours > 0)?vac.total.open.hours.toFixed(2)+" h":" ")); +// $("#vacttaken").html(((vac.total.taken.hours && vac.total.taken.hours > 0)?vac.total.taken.hours.toFixed(2)+" h":" ")); +// $("#vactasked").html(((vac.total.asked.hours && vac.total.asked.hours > 0)?vac.total.asked.hours.toFixed(2)+" h":" ")); +// $("#vactplanned").html(((vac.total.accepted.hours && vac.total.accepted.hours > 0)?vac.total.accepted.hours.toFixed(2)+" h":" ")); + +// } + +// //dump(JSON.stringify(vac) + " - Set data vacancy status\n"); +// // var hdata = " pris: "+ vac.taken.hours +" h ("+ vac.taken.days.toFixed(2)+" jour(s)) - "; +// // hdata += " planifié: "+ vac.rest.hours+" h ("+ vac.rest.days.toFixed(2)+" jour(s)) - "; +// // hdata += " ouvert: "+ vac.open.hours +" h ("+ vac.open.days.toFixed(2)+" jour(s))"; +// // if (vac.ill > 0) { +// // hdata += " -  (maladie: "+ vac.ill.hours+" h ("+ vac.ill.days.toFixed(2)+" jour(s)))"; +// // } +// //dump("HTML: --" + document.getElementById("vacancystatus").innerHTML +"//\n->" + hdata + "\n"); +// //$("#vacancystatus").html(""); +// //if ($("#vacancystatus")){ +// //dump("vacancystatus exists\n"); +// // +// //} +// $("#vacancystatus").html(""); +// } +// else { +// $("#vacancystatus").html(""); +// } +// } + +function saveyearvacdays() { + var csel = "select * from staffvacancydays where staffuuid='"+pconfig.uuid+"' and vacancyyear='"+pconfig.year+"';"; + var days = 0; + var hours = 0; + if ($('#vacancyyeartotal').val() === ""){ + return; + } + if (pconfig.vacancyunit == "hours"){ + days = parseFloat($('#vacancyyeartotal').val().replace(',','.')) / 8; + hours = $('#vacancyyeartotal').val(); + }else { + days = parseFloat($('#vacancyyeartotal').val().replace(',','.')); + hours = parseFloat($('#vacancyyeartotal').val().replace(',','.')) * 8; + } + var cnum = appdb.dbquery(csel); + var inssql = "INSERT INTO staffvacancydays (staffuuid,vacancyyear,days,hours) VALUES ('"+pconfig.uuid+"','"+pconfig.year+"',"+days+","+hours+");"; + if (cnum.sqldata.length > 0) { + inssql = "UPDATE staffvacancydays SET days="+days+",hours="+hours+" where staffuuid='"+pconfig.uuid+"' and vacancyyear='"+pconfig.year+"';"; + } + appdb.dbexec(inssql); + //calcvacancy(); +} + +// function setvacancyunit(){ +// var vacunit = $('#vacancy_unit').val(); +// if ($('#vacancyyeartotal').val() !== ""){ +// var vacval = parseFloat($('#vacancyyeartotal').val().replace(',','.')); +// if (((!pconfig.vacancyunit) || (pconfig.vacancyunit == 'days')) && (vacunit == 'hours')){ +// $('#vacancyyeartotal').val(vacval * 8); +// }else if (pconfig.vacancyunit != vacunit){ +// $('#vacancyyeartotal').val(vacval / 8); +// } +// } +// //dump("vacunit: " + vacunit + "\n"); +// pconfig.vacancyunit = vacunit; +// apppref.setpreference("pageconfig.coworker",pconfig); +// } + +function dlg_event(uuid, type) { + + //$('#staffuuid').multiselect('deselectAll', false); + //$('#staffuuid').multiselect('updateButtonText'); + if (type== "ins") { + + $('#btndeleteevent').hide(); + + }else { + $('#btndeleteevent').show(); + } + $('#frmeditevent #freqinterval').hide(); + $('#frmeditevent #freqmonthly').hide(); + $('#frmeditevent #freqweekly').hide(); + $('#frmeditevent #freq_monthly_byday').show(); + $('#frmeditevent #freq_monthly_bymonthday').hide(); + $('#frmeditevent #freq').val(""); + $('#frmeditevent .active').removeClass('active'); + if ((type == 'upd') || (type == 'ins')) { + + var evdata = { + uuid: '0', + description: '', + activityuuid:'', + location: '', + color: '', + datefrom:new Date().toLocaleFormat("%d.%m.%Y"), + dateto:'', + staffuuid: pconfig.uuid, + timefrom: '00:00', + timeto: '00:00', + freq: '', + staffname: $("#staff_prename").val() + " " + $("#staff_surname").val() + }; + //jsdump(JSON.stringify(pconfig) + "\n"); + //jsdump(JSON.stringify(evdata) + "\n"); + if (type == 'upd') { + var evsql = "SELECT uuid, strftime(\"%d.%m.%Y\",datefrom) as datefrom, strftime(\"%d.%m.%Y\",dateto) as dateto, timefrom, timeto, description, location, color, freq, '"+ pconfig.uuid+"' as staffuuid FROM eventcalendar ev left join staffplanning st on (ev.uuid=st.eventcalendaruuid) where ev.uuid='" + uuid.uuid + "' group by ev.uuid;"; + evdata = appdb.dbquery(evsql); + evdata = evdata.sqldata[0]; + evdata['staffname'] = $("#staff_prename").val() + " " + $("#staff_surname").val(); + if (evdata.freq != '') { + var tmpfreq = evdata.freq.split(';'); + for (var t in tmpfreq){ + if (tmpfreq[t] != '') { + var spl = tmpfreq[t].split("="); + evdata[spl[0].toLowerCase()] = spl[1].toLowerCase(); + } + } + } + } + for (var w in evdata) { + if ($("#frmeditevent #" + w)) { + // if (w == 'staffuuid') { + // if (evdata[w] == '') { + // $("#frmeditevent #" + w).multiselect('select',[]); + // } else { + // $("#frmeditevent #" + w).multiselect('select',evdata[w].split(',')); + // } + + // } + // else if (w == 'color') { + // $("#frmeditevent #color").val(evdata[w]); + // $('#frmeditevent #color').minicolors('value',{color: evdata[w]}); + // } + // else { + $("#frmeditevent #" + w).val(evdata[w]); + // } + } + } + if ((evdata.freq == 'weekly') && (evdata.byday)) { + var bd = evdata.byday.split(','); + for (var i in bd){ + document.getElementById('weekly_byday_' + bd[i]).setAttribute("checked",true); + $('#frmeditevent #weekly_byday_' + bd[i]).parent().addClass("active"); + } + } + if (evdata.freq == 'monthly') { + $('#freq_monthly_byday').hide(); + $('#freq_monthly_bymonthday').hide(); + $('#pnl_monthly_byday').removeAttr("checked"); + $('#pnl_monthly_bymonthday').removeAttr("checked"); + if (evdata.byday) { + document.getElementById('pnl_monthly_byday').setAttribute("checked",true); + $('#frmeditevent #pnl_monthly_byday').parent().addClass("active"); + $('#freq_monthly_byday').show(); + var bd = evdata.byday.split(','); + var adpos = new Array(); + var awday = new Array(); + for (var i in bd){ + var wday = bd[i].substr(bd[i].length-2); + var pos = bd[i].substring(0,bd[i].length-2); + awday.push(wday.toLowerCase()); + adpos.push(pos); + } + + for (var i in adpos){ + document.getElementById('monthly_bydaypos_' + adpos[i]).setAttribute("checked",true); + $('#frmeditevent #monthly_bydaypos_' + adpos[i]).parent().addClass("active"); + } + for (var i in awday){ + document.getElementById('monthly_bydaywday_' + awday[i]).setAttribute("checked",true); + $('#frmeditevent #monthly_bydaywday_' + awday[i]).parent().addClass("active"); + } + }else if (evdata.bymonthday) { + document.getElementById('pnl_monthly_bymonthday').setAttribute("checked",true); + $('#frmeditevent #pnl_monthly_bymonthday').parent().addClass("active"); + $('#freq_monthly_bymonthday').show(); + var bd = evdata.bymonthday.split(','); + for (var i in bd){ + document.getElementById('monthly_bymonthday_' + bd[i]).setAttribute("checked",true); + $('#frmeditevent #monthly_bymonthday_' + bd[i]).parent().addClass("active"); + } + } + } + setfreq(); + $("#edit_event").modal('show'); + } +} + + +function save_event() { + var sql1 = new Array(); + var sql2 = new Array(); + if ($('#timefrom').val() == $('#timeto').val() || $('#timefrom').val() == "00:00" || $('#timeto').val() == "00:00"){ + errormsg("Erreur","les heures doivent être différent et différent de la valeur 00:00!"); + return false; + } + if ($('#timefrom').val() > $('#timeto').val()){ + errormsg("Erreur","l'heure de début ne peux pas être supérieur à l'heure de fin!"); + return false; + } + if (!$('#staffuuid').val()){ + errormsg("Erreur","Vous devez selectionner au moin 1 membre du staff!"); + return false; + } + if ($('#dateto').val() != '' && (encodeparam($('#datefrom').val()) > encodeparam($('#dateto').val())) ) { + errormsg("Erreur","La Date début ne peut pas être supérieur à la date fin!"); + return false; + } + var type = 'ins'; + var cuuid = ""; + if ($("#frmeditevent #uuid").val() != 0) { + type = 'upd'; + cuuid = $("#frmeditevent #uuid").val(); + } else { + cuuid = appdb.generate_uuid(); + } + var freqdata = {}; + var cfreq = $("#frmeditevent #freq").val(); + $("#frmeditevent :input").each(function() { + var input = $(this); + + if (input.attr("id") && (input.attr("id") != "staffuuid") && (input.attr("id") != "staffname")) { + if ((input.attr("type") == "checkbox") && (input.attr("id").indexOf(cfreq) >= 0)){ + var xd = input.attr("id").split("_"); + if (input.attr("checked")) { + if (!freqdata[xd[1]]) { + freqdata[xd[1]] = new Array(); + } + freqdata[xd[1]].push(input.val()); + } + } + else if ((input.attr("type") == "radio") && (input.attr("id").indexOf(cfreq) >= 0)) { + var xd = input.attr("id").split("_"); + if (input.attr("checked")) { + freqdata['freqtype'] = xd[2]; + } + } + else if ((input.attr("type") != "checkbox") && ((input.attr("type") != "radio"))){ + if ((input.attr("id") == 'interval') || (input.attr("id") == 'freq')) { + freqdata[input.attr("id")] = input.val(); + } else if ((type == 'ins') && (input.attr("id") != 'staffuuid')) { + + sql1.push('"' + input.attr("id") + '"'); + if (input.attr("id") == 'uuid') { + if (input.val() == "" || input.val() == "0") { + sql2.push("'" + cuuid + "'"); + } else { + sql2.push("'" + input.val() + "'"); + } + } else { + var ival = encodeparam(input.val(), input.attr('type')); + sql2.push(ival); + } + } else { + if ((input.attr("id") != 'uuid') && (input.attr("id") != 'staffuuid')){ + var ival = encodeparam(input.val(), input.attr('type')); + sql2.push('"' + input.attr("id") + '"=' + ival); + } + } + } + } + + }); + if (!freqdata.freqtype) { + freqdata['freqtype'] = curfreq.freqtype; + } + + var strfreq =""; + if (cfreq != "") { + strfreq='FREQ=' + cfreq.toUpperCase()+';INTERVAL=' + freqdata.interval +';'; + if ((cfreq == 'weekly') && (freqdata.byday)){ + strfreq += 'BYDAY=' + freqdata.byday.join(","); + } + if ((cfreq == 'monthly') && (freqdata.bydaypos) || ((freqdata.bydaywday)) || (freqdata.bymonthday)){ + strfreq += freqdata.freqtype.toUpperCase() + '='; + if (freqdata.freqtype == 'bymonthday') { + strfreq += freqdata.bymonthday.join(',') + ";" + }else { + var abyday = new Array(); + for (var p in freqdata.bydaypos){ + for (var w in freqdata.bydaywday){ + abyday.push(freqdata.bydaypos[p] + freqdata.bydaywday[w]); + } + } + strfreq += abyday.join(","); + } + } + if (strfreq.slice(-1) == ';') { + strfreq = strfreq.substring(0,strfreq.length-1); + } + } + var staffuuids = $('#staffuuid').val(); + var delsql = ""; + var xsql = []; + if (type != 'ins') { + xsql.push("DELETE FROM staffplanning where eventcalendaruuid = '"+cuuid+"';"); + } + var staffinssql = ""; + + if (staffuuids && (staffuuids.length != 0)) { + + staffinssql = "INSERT INTO staffplanning (eventcalendaruuid,staffuuid) VALUES "; + var tmps = []; + var curcoworkerok = false; + for (var s in staffuuids){ + if (staffuuids[s] == pconfig.uuid){ + curcoworkerok = true; + } + tmps.push("('"+cuuid+"','"+staffuuids[s]+"')"); + } + if (!curcoworkerok){ + tmps.push("('"+cuuid+"','"+pconfig.uuid+"')"); + } + staffinssql += tmps.join(',') + ";"; + xsql.push(staffinssql); + } + if (staffuuids.length == 0){ + staffinssql = "INSERT INTO staffplanning (eventcalendaruuid,staffuuid) VALUES ('"+cuuid+"','"+pconfig.uuid+"');"; + xsql.push(staffinssql); + } + + + + if (type == 'upd') { + sql2.push('freq=' + encodeparam(strfreq)); + xsql.push("UPDATE eventcalendar SET " + sql2.join(',') + " where \"uuid\"='" + cuuid + "';"); + } else { + sql1.push('freq'); + sql2.push(encodeparam(strfreq)); + xsql.push("INSERT INTO eventcalendar (" + sql1.join(',') + ") VALUES (" + sql2.join(',') + ");"); + } + dump(JSON.stringify(xsql)); + for (var i in xsql){ + appdb.dbexec(xsql[i]); + } + + load_event_data(); + + $("#frmeditevent #uuid").val("0"); + $("#edit_event").modal('hide'); +} + +function confirm_delete_event() { + $("#confirm_delete_event").modal('show'); + return false; +} + +function delete_event() { + appdb.dbexec("DELETE FROM eventcalendar where uuid='" + $('#frmeditevent #uuid').val()+"';"); + appdb.dbexec("DELETE FROM staffplanning where eventcalendaruuid='" + $('#frmeditevent #uuid').val()+"';"); + load_event_data(); + $("#confirm_delete_event").modal('hide'); + + return false; +} + + + +function setfreq() { + + curfreq.freq = $('#freq option:selected').val(); + + $('#freqinterval').hide(); + $('#freqmonthly').hide(); + $('#freqweekly').hide(); + if (curfreq.freq != "") { + + $('#lblfreq').text(lblfreq[curfreq.freq]); + $('#freqinterval').show(); + if (curfreq.freq != 'daily') { + $('#freq' + curfreq.freq).show(); + } + } + +} + +// function load_staff_selection(objid,option){ +// var stdata = appdb.dbquery("select uuid, coalesce(surname,'') || ' ' || coalesce(prename,'') as name,case when color is null then '#000' else color end as color from staff order by surname,prename"); + +// stdata = stdata.sqldata; +// for (var s in stdata){ +// $('#' + objid).append(''); +// } + +// var copt = {}; +// if (option) { +// copt = option; +// } +// copt['enableHTML'] = true; +// copt['nonSelectedText']="Sélectionner un(e) employé(e)..."; +// copt['numberDisplayed']=5; +// copt['allSelectedText']='Tous'; +// copt['nSelectedText']=' selections'; + +// $('#' + objid).multiselect(copt); + +// } + +function accept_vacancy(){ + var cuuid = ""; + if ($("#frmeditvacancy #uuid").val() != 0) { + type = 'upd'; + cuuid = $("#frmeditvacancy #uuid").val(); + } + var xsql = "UPDATE vacancycalendar SET accepted='1' where \"uuid\"='" + cuuid + "';"; + appdb.dbexec(xsql); + load_table_vacancy(); + + $("#frmeditvacancy #uuid").val("0"); + $("#edit_vacancy").modal('hide'); +} + +function getlastyearsrest(){ + var weekhours = $('#staff_weekhours').val(); + if (weekhours === '') { + $("#vacancylastyearrest").val(0); + return; + } + var df = new Date(pconfig.year-1,0,1); + var dt = new Date(pconfig.year-1,11,31); + var vcalcrestsql = "select (select hours from staffvacancydays where staffuuid='"+pconfig.uuid+ "' and vacancyyear="+df.getFullYear()+")-SUM(dayhours) AS hours from (" + + "select vd.daydate,case when daydate <= date('now') then 1 else 0 end as taken,case when vc.timefrom=vc.timeto then cast ("+weekhours+"/5 as real) else (cast (substr(vc.timeto,1,2) as int) + (cast(substr(vc.timeto,4,5) as int)/60)) - (cast(substr(vc.timefrom,1,2) as int) + (cast(substr(vc.timeto,4,5) as int)/60)) end as dayhours,type,case when type != -1 then accepted else '1' end as accepted "+ + "from vacancycalendar vc left join ( "+ + "select daydate from ( "; + + var yd = []; + for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){ + yd.push("select date('"+dx.toLocaleFormat('%Y-%m-%d')+"') as daydate"); + } + vcalcrestsql += yd.join(" UNION ") + + ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+df.getFullYear()+"-01-01' and '"+dt.getFullYear()+"-12-31' and vacancydateto is null) " + + ") vd on (vd.daydate between vc.datefrom and vc.dateto) " + + "left join staffvacancydays svd on (vc.staffuuid=svd.staffuuid) " + + "where vc.staffuuid='"+pconfig.uuid+ "' and daydate is not null group by daydate) where type in (0,1) and taken=1 and accepted=1 group by taken,accepted;"; + //dump("SQLREST:" + vcalcrestsql + "\n"); + var vcalc = appdb.dbquery(vcalcrestsql); + //dump(JSON.stringify(vcalc) + "\n"); + if (vcalc && vcalc.sqldata[0]){ + + $("#vacancylastyearrest").val(vcalc.sqldata[0].hours); + }else { + $("#vacancylastyearrest").val(0); + } + return; +} diff --git a/modules/staff/js/coworker_basic.js b/modules/staff/js/coworker_basic.js new file mode 100644 index 0000000..fe62ee4 --- /dev/null +++ b/modules/staff/js/coworker_basic.js @@ -0,0 +1,827 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var pconfig = null; +var delplan = null; +var delvacation = null; +var wh= window.innerHeight -440; +var curdatediff = null; +var redate = /\d\d.\d\d.\d\d\d\d/; +var curfreq ={}; +//var lictype = apppref.getpreference("support.lictype"); + +function initdata() { + load_helpers(); + var pdata = apppref.getpreference("pageconfig.coworker"); + if (pdata != '') { + pconfig = JSON.parse(pdata); + } + //"get CoWorker cfg:" +JSON.stringify(pconfig) + "\n"); + if (!pconfig.year) { + pconfig.year=new Date().getFullYear(); + } + if (!pconfig.printlayout) { + pconfig.printlayout = 'list'; + apppref.setpreference("pageconfig.coworker",pconfig); + } + var cdatasql = "SELECT jobtitle, prename, surname, address, zip, city, country, strftime('%d.%m.%Y',entrydate) as entrydate, strftime('%d.%m.%Y',exitdate) as exitdate, iban, bic, accountname, phone, email, uuid,color,weekhours,case when password is not null and length(password) > 3 then 1 else 0 end as passwordset FROM staff where uuid='" + pconfig.uuid + "';"; + var cdata = appdb.dbquery(cdatasql); + cdata = cdata.sqldata[0]; + for (var ci in cdata) { + if (document.getElementById("staff_" + ci)) { + + $("#staff_" + ci).val(cdata[ci]); + if (ci == "color"){ + $("#staff_color").css("background-color",cdata[ci]); + $("#staff_color").val(""); + } + + } + + } + var crdata = appdb.dbquery("select stafflist from creche;"); + if ((crdata) && (crdata.sqldata[0].stafflist == "1")){ + $("#pwddata").hide(); + } + if (cdata) { + set_infoheader(cdata.prename + " " + cdata.surname); + } + set_selectyears(); + + if (pconfig && pconfig.activetab) { + $('a[href="#'+pconfig.activetab+'"]').tab('show'); + }else{ + $('a[href="#vacancy"]').tab('show'); + pconfig.activetab = 'vacancy'; + } + +//if (pconfig && pconfig.vacancyunit){ +////dump("has vacancy unit:" + pconfig.vacancyunit + "\n"); +//$('#vacancy_unit').val(pconfig.vacancyunit); +//}else { +pconfig.vacancyunit = "hours"; +//$('#vacancy_unit').val("days"); +//} + + $('#frmeditvacancy #vacdatefrom').on("blur",function (e) { + var ok = true; + if ($('#frmeditvacancy #vacdatefrom').val().match(redate)) { + $('#btn_save_vacancy').removeAttr("disabled"); + }else { + ok = false; + $('#btn_save_vacancy').attr("disabled","1"); + } + if ((ok == true) && ($('#frmeditvacancy #vacdateto').val() != '')) { + var tmpdt1 = encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date'); + var nd = new Date(tmpdt1.replace(/'/g,'')); + var xd = new Date(nd.getFullYear(),nd.getMonth(),nd.getDate() + curdatediff); + $('#frmeditvacancy #vacdateto').val(xd.toLocaleFormat("%d.%m.%Y")); + var tmpdt2 = encodeparam($('#frmeditvacancy #vacdateto').val(),'date'); + if (tmpdt1 > tmpdt2) { + $('#btn_save_vacancy').attr("disabled","1"); + } else { + $('#btn_save_vacancy').removeAttr("disabled"); + } + + } + }); + $('#frmeditvacancy #vacdateto').on("blur",function (e) { + var ok = true; + if ($('#frmeditvacancy #vacdateto').val().match(redate)) { + $('#btn_save_vacancy').removeAttr("disabled"); + }else { + ok = false; + $('#btn_save_vacancy').attr("disabled","1"); + } + curdatediff=daysBetween(new Date(encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date').replace(/'/g,'')),new Date(encodeparam($('#frmeditvacancy #vacdateto').val(),'date').replace(/'/g,''))); + if ((ok == true) && ($('#frmeditvacancy #vacdateto').val() != '')) { + var tmpdt1 = encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date'); + var tmpdt2 = encodeparam($('#frmeditvacancy #vacdateto').val(),'date'); + if (tmpdt1 > tmpdt2) { + $('#btn_save_vacancy').attr("disabled","1"); + } else { + $('#btn_save_vacancy').removeAttr("disabled"); + } + + } + }); + + + $("#weekly_byday :input").change(function() { + if (this.checked) { + this.setAttribute("checked",true); + }else { + this.removeAttribute("checked"); + } + +}); + $("#monthly_bydaypos :input").change(function() { + + if (this.checked) { + this.setAttribute("checked",true); + }else { + this.removeAttribute("checked"); + } + +}); + $("#monthly_bydaywday :input").change(function() { + + if (this.checked) { + this.setAttribute("checked",true); + }else { + this.removeAttribute("checked"); + } + +}); + $("#monthly_bymonthday :input").change(function() { + + if (this.checked) { + this.setAttribute("checked",true); + }else { + this.removeAttribute("checked"); + } + +}); + $("#monthly_by :input").change(function() { + var xd = this.id.split("_"); + curfreq.freqtype=xd[2]; + + this.setAttribute("checked",true); + + $('#freq_monthly_byday').hide(); + $('#freq_monthly_bymonthday').hide(); + $('#pnl_monthly_byday').removeAttr("checked"); + $('#pnl_monthly_bymonthday').removeAttr("checked"); + + $('#freq_' + this.value).show(); + +}); + + $('#frmeditevent #datefrom').on("blur",function (e) { + var ok = true; + if ($('#frmeditevent #datefrom').val().match(redate)) { + $('#btn_save_event').removeAttr("disabled"); + }else { + ok = false; + $('#btn_save_event').attr("disabled","1"); + } + if ((ok == true) && ($('#frmeditevent #dateto').val() != '')) { + var tmpdt1 = encodeparam($('#frmeditevent #datefrom').val(),'date'); + var tmpdt2 = encodeparam($('#frmeditevent #dateto').val(),'date'); + if (tmpdt1 >= tmpdt2) { + $('#btn_save_event').attr("disabled","1"); + } else { + $('#btn_save_event').removeAttr("disabled"); + } + + } + }); + $('#frmeditevent #dateto').on("blur",function (e) { + var ok = true; + if ($('#frmeditevent #dateto').val().match(redate)) { + $('#btn_save_event').removeAttr("disabled"); + }else { + ok = false; + $('#btn_save_event').attr("disabled","1"); + } + if ((ok == true) && ($('#frmeditevent #dateto').val() != '')) { + var tmpdt1 = encodeparam($('#frmeditevent #datefrom').val(),'date'); + var tmpdt2 = encodeparam($('#frmeditevent #dateto').val(),'date'); + + if (tmpdt1 >= tmpdt2) { + $('#btn_save_event').attr("disabled","1"); + } else { + $('#btn_save_event').removeAttr("disabled"); + } + + } + }); + +} + +$('.selyear').on( "change", function(e){ + e.preventDefault(); + + $(".selyear").val($(this).val()); + pconfig.year = $(this).val(); + apppref.setpreference("pageconfig.coworker",pconfig); + if ($(this).attr('id') == "year_organisation") { + load_event_data(); + }else if ($(this).attr('id') == "year_vacancy") { + load_table_vacancy(); + } +}); + +$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + var tn = e.target.toString(); + pconfig.activetab = tn.substring(tn.lastIndexOf("#")+1); + //dump(JSON.stringify(pconfig) + "\n"); + apppref.setpreference("pageconfig.coworker",pconfig); + if (pconfig.activetab == 'activity') { + load_event_data(); + } + if (pconfig.activetab == 'vacancy') { + load_table_vacancy(); + } + }); + +function load_event_data() { + var where = new Array(); + + where.push(" st.uuid in ('"+ pconfig.uuid + "')"); + + $("div.panel-daybody").html(""); + var sql = "SELECT cal.uuid, cal.datefrom, cal.dateto, '
    ' || strftime('%Y%m%d',cal.datefrom) ||'
    ' || strftime('%d.%m.%Y',cal.datefrom) AS tbldatefrom ,strftime('%Y%m%d',cal.datefrom) AS strdatefrom, strftime('%Y%m%d',cal.dateto) AS strdateto,cal.timefrom, cal.timeto, cal.description, cal.location, cal.color, cal.freq, '[\"' || GROUP_CONCAT(sp.staffuuid,'\",\"') || '\"]' as staffuuid, GROUP_CONCAT(coalesce(st.surname,'') || ' ' || coalesce(st.prename,''), '
    ' ) as staffnames ,'[\"' || GROUP_CONCAT(st.color,'\",\"') || '\"]' as staffcolors from eventcalendar cal " +" join staffplanning sp on (cal.uuid=sp.eventcalendaruuid " + " AND sp.staffuuid in ('"+ pconfig.uuid +"')) left join staff st on (sp.staffuuid=st.uuid) "+ + " where (cal.datefrom between '" + $('#year_organisation').val() + "-01-01' and '" + $('#year_organisation').val() + "-12-31' and (cal.dateto >= '" + $('#year_organisation').val() + "-01-01' or cal.dateto is null)) or (cal.dateto between '" + $('#year_organisation').val() + "-01-01' and '" + $('#year_organisation').val() + "-12-31' and cal.datefrom < '" + $('#year_organisation').val() + "-01-01') or ((cal.datefrom <= '" + $('#year_organisation').val() + "-01-01') and ((cal.dateto >= '" + $('#year_organisation').val() + "-12-31') or cal.dateto is null)) "+ ((where.length > 0)?" AND (" + where.join(" or ") + ")":"")+" group by cal.uuid order by cal.datefrom,cal.dateto;"; + + var caldata = appdb.dbquery(sql); + + caldata = caldata.sqldata; + + var headerdata = getlabels("act,activity,datefrom,hours,recurrance"); + $("#tbl_activity").html(""); + + var hrow = headerdata; + var tdclass= new Array(); + var tblheader = ''; + + for (var h=0;h'+ headerdata[h].title+''; + } + tblheader += ''; + + $("#tbl_activity").append("" + tblheader + ""); + $("#tbl_activity").append(""); + var tblbody = []; + for (var c in caldata) { + var tblrow = ""; + tblrow += ' '; + tblrow += ""+caldata[c].description+"" + caldata[c].description + ""; + tblrow += "" + caldata[c].tbldatefrom + ""; + tblrow += "" + caldata[c].timefrom + "- " + caldata[c].timeto + ""; + + var freq2 = caldata[c].freq; + if (freq2 != '') { + + freq2 += ';DTSTART='+caldata[c].strdatefrom + 'T000000Z'; + if (caldata[c].dateto != ''){ + freq2 += ';UNTIL='+caldata[c].strdateto + 'T000000Z'; + } + } + + try { + + var rule2 = RRule.fromString(freq2); + + + tblrow += "" + rule2.toText() + ""; + + } catch (ex){ + //"ERROR! loading data!" + ex + " FREQ:" + freq2 + "\n"); + } + tblrow += ""; + tblbody.push(tblrow); + } + + //load table + $("#tbl_activity").append(tblbody.join('')); + $("#tbl_activity").append(""); + + tblcal = $("#tbl_activity").dataTable({ + "language": { + "url": "../../web/js/locale/datatable_fr.json" + }, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "ordering": true, + "info": false, + "filter": false, + "destroy": true + }); + + //$('#tbl_activity').on( 'search.dt', function () { + // + // pconfig.filter = tblcal.api().search(); + // + // apppref.setpreference("pageconfig.calactivity",pconfig); + //} ); + + //$('#tbl_activity').on( 'order.dt', function () { + // pconfig.order= tblcal.fnSettings().aaSorting; + // + // apppref.setpreference("pageconfig.calactivity",pconfig); + // + //} ); + +// if (pconfig.filter) { +// tblcal.fnFilter(pconfig.filter); +// } + if (pconfig.order) { + tblcal.fnSort(pconfig.order); + } + if (/*(!pconfig.filter) && */ (!pconfig.order)) { + tblcal.fnDraw(); + } +} + +function load_table_vacancy() { + + var vacdatasql = "SELECT case when (datefrom > date('now') or accepted!='1') and type != -1 then ' ' else ' ' end AS action," + + "CASE WHEN datefrom!=dateto THEN 'du:' || strftime('%d.%m.%Y', CASE WHEN datefrom < DATE('"+ pconfig.year +"-01-01') THEN DATE('"+ pconfig.year +"-01-01') ELSE datefrom END) || '
    au: ' || strftime('%d.%m.%Y', CASE WHEN dateto > DATE('"+ pconfig.year +"-12-31') THEN DATE('"+ pconfig.year +"-12-31') ELSE dateto END) ELSE strftime('%d.%m.%Y',datefrom) END AS planningdaterange," + + //"case when datefrom!=dateto then strftime('%d.%m.%Y',case when datefrom < date('"+ pconfig.year +"-01-01') then 'de: ' date('"+ pconfig.year +"-01-01') else datefrom end) || '
    à: ' || strftime('%d.%m.%Y',case when dateto > date('"+ pconfig.year +"-12-31') then date('"+ pconfig.year +"-12-31') else dateto end) else strftime('%d.%m.%Y',datefrom) end as planningdaterange, " + + "case when timefrom=timeto then '8h' when (cast(substr(timeto,1,2) as int) - cast(substr(timefrom,1,2) as int))= 4 then '4h' || case when timefrom!='00:00' then '
    à partir de ' || timefrom else '' end else (cast(substr(timeto,1,2) as int) - cast(substr(timefrom,1,2) as int)) || 'h' || case when timefrom!='00:00' then '
    à partir de ' || timefrom else '' end end as hourrange, "+ + "description, " + + "case when type=0 then 'normal' when type=1 then 'exceptionnelle' when type=-1 then 'maladie' end as vacancytype,case when accepted='1' and type != -1 then 'OUI' else 'NON' end as accepted FROM vacancycalendar where staffuuid='"+ pconfig.uuid +"' and (strftime('%Y',dateto)='"+ pconfig.year +"' or strftime('%Y',datefrom)='"+ pconfig.year +"');"; + //dump("XXSQL:" + vacdatasql + "\n"); +var vacdata = appdb.dbqueryarray(vacdatasql); + + + $('#tbl_vacancy').html(""); + //$('#tbl_vacancy').append(''); + getlastyearsrest(); + calcvacancy(); + //vacdata.sqlhead.join(",") + "\n"); + var headerdata = getlabels(vacdata.sqlhead.join(",")); + + $("#tbl_vacancy").dataTable({ + "language": { + "url": "../../web/js/locale/datatable_fr.json" + }, + "data": vacdata.sqldata, + "columns": headerdata, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "ordering": true, + "info": false, + "filter": false, + "destroy": true + }); + +} + +//function add_coworker() { +// var newuuid = appdb.generate_uuid(); +// appdb.dbexec("insert into staff (uuid) VALUES ('" + newuuid + "');"); +// globelreq.send_request({ +// page: 'coworker', +// data: { +// "uuid": newuuid +// }, +// header: 'HEADER TODO' +// }); +//} + +function dlg_vacancy(uuid, type) { + var evdata = { + uuid: 0, + description: '', + vacdatefrom:new Date().toLocaleFormat("%d.%m.%Y"), + vacdateto:new Date().toLocaleFormat("%d.%m.%Y"), + staffuuid:pconfig.uuid, + timefrom: '00:00', + hours: '1', + type:'0', + dailyduration:'1.0' + }; + + if (type == 'upd') { + var evsql = "SELECT uuid, strftime(\"%d.%m.%Y\",datefrom) as vacdatefrom, strftime(\"%d.%m.%Y\",dateto) as vacdateto, timefrom, description, '"+pconfig.uuid+"' as staffuuid,type, case when timefrom!=timeto then '0.' || (cast(substr(timeto,1,2) as int) - cast(substr(timefrom,1,2) as int)) else 1.0 end as dailyduration,null as hours,accepted FROM vacancycalendar where uuid='" + uuid.uuid + "';"; + + evdata = appdb.dbquery(evsql); + evdata = evdata.sqldata[0]; + if (evdata.type == -1){ + $("#btnacceptvacancy").hide(); + }else { + $("#btnacceptvacancy").show(); + } + if (evdata.dailyduration == '1') { + evdata.dailyduration = '1.0'; + evdata.hours = '8'; + }else { + evdata.hours = evdata.dailyduration.substring(2,3); + if (evdata.dailyduration != '0.4') { + evdata.dailyduration = '0.'; + } + } + + } + + for (var w in evdata) { + if ((w == 'datefrom') || (w == 'dateto')) { + w='vac' + w; + } + //dump(w + "\n"); + if ($("#frmeditvacancy #" + w)) { + $("#frmeditvacancy #" + w).val(evdata[w]); + } + } + setdailydurationfields(); + $("#edit_vacancy").modal('show'); +} + +function confirm_delete_vacancy(uuid) { + delvacation = uuid; + $("#confirm_delete_vacancy").modal('show'); + return false; +} + +function delete_vacancy() { + var delsql = "DELETE FROM vacancycalendar where uuid='" + delvacation+"';"; + appdb.dbexec(delsql); + load_table_vacancy(); + delvacancy=null; + $("#confirm_delete_vacancy").modal('hide'); + + return false; +} + +function setdailydurationfields() { + var dd = $('#dailyduration :selected').val(); + if (dd=='1.0') { + $("#ftimefrom").hide(); + $("#fhours").hide(); + }else if (dd=='0.4') { + $("#ftimefrom").show(); + $("#fhours").hide(); + }else if (dd=='0.') { + $("#ftimefrom").show(); + $("#fhours").show(); + } +} + +function save_vacancy() { + var sql1 = new Array(); + var sql2 = new Array(); + var type = 'ins'; + var cuuid = ""; + if ($("#frmeditvacancy #uuid").val() != 0) { + type = 'upd'; + cuuid = $("#frmeditvacancy #uuid").val(); + } + + $("#frmeditvacancy :input").each(function() { + var input = $(this); + + if (input.attr("id")) { + + if (type == 'ins') { + + + if (input.attr("id") == 'uuid') { + sql1.push('"' + input.attr("id") + '"'); + if (input.val() == "" || input.val() == "0") { + sql2.push("'" + appdb.generate_uuid() + "'"); + } else { + sql2.push("'" + input.val() + "'"); + } + } else if (input.attr("id") == 'dailyduration') { + sql1.push('"timeto"'); + if (input.val() == '1.0') { + sql2.push("'" +$('#timefrom').val() + "'"); + }else if (input.val() == '0.4') { + var xval = parseInt($('#timefrom').val().substring(1,2)) + 4; + if (xval < 10) { xval = "0" + xval;} + xval += ":00"; + sql2.push("'" + xval + "'"); + }else { + var xval = parseInt($('#timefrom').val().substring(1,2)) + parseInt($('#hours').val()); + if (xval < 10) { xval = "0" + xval;} + xval += ":00"; + sql2.push("'" + xval + "'"); + } + } else if ((input.attr("id") != 'dailyduration') && (input.attr("id") != 'hours')) { + var xid = input.attr("id") + if ((input.attr("id") == 'vacdatefrom') || (input.attr("id") == 'vacdateto')) { + + sql1.push('"' + input.attr("id").substring(3) + '"'); + }else { + sql1.push('"' + input.attr("id") + '"'); + } + + var ival = encodeparam(input.val(), input.attr('type')); + sql2.push(ival); + } + } else { + if ((input.attr("id") != 'uuid') && (input.attr("id") != 'dailyduration') && (input.attr("id") != 'hours')) { + var ival = encodeparam(input.val(), input.attr('type')); + var xid =input.attr("id"); + if ((input.attr("id") == 'vacdatefrom') || (input.attr("id") == 'vacdateto')) { + xid =input.attr("id").substring(3); + } + sql2.push('"' + xid + '"=' + ival); + } else if (input.attr("id") == 'dailyduration') { + if (input.val() == '1.0') { + sql2.push('"timeto"='+ "'" + $('#timefrom').val() + "'"); + }else if (input.val() == '0.4') { + var xval = parseInt($('#timefrom').val().substring(1,2)) + 4; + if (xval < 10) { xval = "0" + xval;} + xval += ":00"; + sql2.push('"timeto"=' +"'" + xval + "'"); + }else { + var xval = parseInt($('#timefrom').val().substring(1,2)) + parseInt($('#hours').val()); + if (xval < 10) { xval = "0" + xval;} + xval += ":00"; + sql2.push('"timeto"=' +"'" + xval + "'"); + } + } + } + + } + + }); + + var xsql = ""; + if (type == 'upd') { + xsql = "UPDATE vacancycalendar SET " + sql2.join(',') + " where \"uuid\"='" + cuuid + "';"; + } else { + + xsql = "INSERT INTO vacancycalendar (" + sql1.join(',') + ") VALUES (" + sql2.join(',') + ");"; + } + + appdb.dbexec(xsql); + load_table_vacancy(); + + $("#frmeditvacancy #uuid").val("0"); + $("#edit_vacancy").modal('hide'); +} + + +function set_selectyears() { + + var years = appdb.dbquery("select strftime('%Y',coalesce(min(entrydate),date('now','-1 year'))) as minyear, strftime('%Y',date('now', '+1 year')) as maxyear from staff where uuid='"+pconfig.uuid+"';"); + var minyear = parseInt(years.sqldata[0].minyear); + var maxyear = parseInt(years.sqldata[0].maxyear); + for (var y=minyear;y<=maxyear;y++){ + + var sel = ""; + if (y == pconfig.year) { + sel=' selected="1" '; + + } + + $(".selyear").append(""); + } + +} + +function calcvacancy() { + //"Calc Vacancy Data!\n"); + var csel = "select days,hours from staffvacancydays where staffuuid='"+pconfig.uuid+"' and vacancyyear='"+pconfig.year+"';"; + //"SQL:"+ csel +"\n"); + var cnum = appdb.dbquery(csel); + + if (cnum.sqldata.length > 0) { + if (pconfig.vacancyunit == "hours"){ + if ((!cnum.sqldata[0].hours) || (cnum.sqldata[0].hours === "")){ + cnum.sqldata[0].hours = cnum.sqldata[0].days * 8; + } + $('#vacancyyeartotal').val(cnum.sqldata[0].hours); + }else{ + $('#vacancyyeartotal').val(cnum.sqldata[0].days); + } + + }else { + $('#vacancyyeartotal').val(""); + } + var vdays = (($('#vacancyyeartotal').val() === "")?"":cnum.sqldata[0].days); + var weekhours = $('#staff_weekhours').val(); + if (vdays === '') { + $('#vacancystatus').html('
    Pas de jours de congés configuré pour l\'année '+ pconfig.year+'!
    '); + return; + }else if (weekhours === '') { + $('#vacancystatus').html('
    Pas de heures par semaine configurées!
    '); + return; + } + + var vcalcsql = "select printf(\"%.2f\",(sum(dayhours) / ("+weekhours+"/5))) as days, SUM(dayhours) as hours,"+ + "taken,type,accepted from (" + + "select vd.daydate,case when daydate <= date('now') then 1 else 0 end as taken,case when vc.timefrom=vc.timeto then cast ("+weekhours+"/5 as real) else (cast (substr(vc.timeto,1,2) as int) + (cast(substr(vc.timeto,4,5) as int)/60)) - (cast(substr(vc.timefrom,1,2) as int) + (cast(substr(vc.timeto,4,5) as int)/60)) end as dayhours,type,case when type != -1 then accepted else '1' end as accepted "+ + "from vacancycalendar vc left join ( "+ + "select daydate from ( "; + var df = new Date(pconfig.year,0,1); + var dt = new Date(pconfig.year,11,31); + var yd = []; + for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){ + yd.push("select date('"+dx.toLocaleFormat('%Y-%m-%d')+"') as daydate"); + } + vcalcsql += yd.join(" UNION ") + + ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+pconfig.year+"-01-01' and '"+pconfig.year+"-12-31' and vacancydateto is null) " + + ") vd on (vd.daydate between vc.datefrom and vc.dateto) " + + "left join staffvacancydays svd on (vc.staffuuid=svd.staffuuid) " + + "where vc.staffuuid='"+pconfig.uuid+ "' and daydate is not null group by daydate) group by type,taken,accepted;"; + //dump("SQL2:" + vcalcsql + "\n"); + var vcalc = appdb.dbquery(vcalcsql); + vcalc = vcalc.sqldata; + //dump(JSON.stringify(vcalc)+ "\n"); + vhours = vdays * 8; + var vac = {}; + $("#lblyear").html(pconfig.year); + vac.normal = {taken:{hours:0,days:0},open:{vhours:parseFloat(vhours), days:parseFloat(vdays)},accepted:{hours:0,days:0},asked:{hours:0,days:0}}; + vac.extra = {taken:{hours:0,days:0},open:{hours:0, days:0},accepted:{hours:0,days:0},asked:{hours:0,days:0}}; + vac.ill = {taken:{hours:0,days:0},open:{hours:0, days:0},accepted:{hours:0,days:0},asked:{hours:0,days:0}}; + vac.total = {taken:{hours:0,days:0},open:{hours:0, days:0},accepted:{hours:0,days:0},asked:{hours:0,days:0}}; + //dump(JSON.stringify(vac) + "\n"); + if (vcalc) { + for (var c in vcalc){ + if (vcalc[c].type == '0' ){ //normal + if (vcalc[c].taken == '1'){ + if (vcalc[c].accepted=='1'){ + vac.normal.taken.days = vac.normal.taken.days + parseFloat(vcalc[c].days); + vac.normal.taken.hours = vac.normal.taken.hours + parseFloat(vcalc[c].hours); + } else { + vac.normal.asked.days = vac.normal.asked.days + parseFloat(vcalc[c].days); + vac.normal.asked.hours = vac.normal.asked.hours + parseFloat(vcalc[c].hours); + } + + } else if (vcalc[c].taken == '0') { + if (vcalc[c].accepted=='1'){ + vac.normal.accepted.days = vac.normal.accepted.days + parseFloat(vcalc[c].days); + vac.normal.accepted.hours = vac.normal.accepted.hours + parseFloat(vcalc[c].hours); + } else { + vac.normal.asked.days = vac.normal.asked.days + parseFloat(vcalc[c].days); + vac.normal.asked.hours = vac.normal.asked.hours + parseFloat(vcalc[c].hours); + } + + } + vac.normal.open.days = parseFloat(vdays) - vac.normal.taken.days - vac.normal.accepted.days - vac.normal.asked.days; + vac.normal.open.hours = parseFloat(vhours) - vac.normal.taken.hours - vac.normal.accepted.hours - vac.normal.asked.hours; + //total + + } else if (vcalc[c].type == '1' ){ //extra + if (vcalc[c].taken == '1'){ + if (vcalc[c].accepted=='1'){ + vac.extra.taken.days = vac.extra.taken.days + parseFloat(vcalc[c].days); + vac.extra.taken.hours = vac.extra.taken.hours + parseFloat(vcalc[c].hours); + } else { + vac.extra.asked.days = vac.extra.asked.days + parseFloat(vcalc[c].days); + vac.extra.asked.hours = vac.extra.asked.hours + parseFloat(vcalc[c].hours); + } + } else if (vcalc[c].taken == '0'){ + if (vcalc[c].accepted=='1'){ + vac.extra.accepted.days = vac.extra.accepted.days + parseFloat(vcalc[c].days); + vac.extra.accepted.hours = vac.extra.accepted.hours + parseFloat(vcalc[c].hours); + } else { + vac.extra.asked.days = vac.extra.asked.days + parseFloat(vcalc[c].days); + vac.extra.asked.hours = vac.extra.asked.hours + parseFloat(vcalc[c].hours); + } + } + vac.extra.open.days = 0; + vac.extra.open.hours = 0; + } else if (vcalc[c].type == '-1' ){ //ill + if (vcalc[c].taken == '1'){ + vac.ill.taken.days = vac.ill.taken.days + parseFloat(vcalc[c].days); + vac.ill.taken.hours = vac.ill.taken.hours + parseFloat(vcalc[c].hours); + } else if (vcalc[c].taken == '0'){ + if (vcalc[c].accepted=='1'){ + vac.ill.accepted.days = vac.ill.accepted.days + parseFloat(vcalc[c].days); + vac.ill.accepted.hours = vac.ill.accepted.hours + parseFloat(vcalc[c].hours); + } else { + vac.ill.asked.days = vac.ill.asked.days + parseFloat(vcalc[c].days); + vac.ill.asked.hours = vac.ill.asked.hours + parseFloat(vcalc[c].hours); + } + } + vac.ill.open.days = 0; + vac.ill.open.hours = 0; + + } + vac.total.taken.days = vac.normal.taken.days + vac.extra.taken.days + vac.ill.taken.days; + vac.total.taken.hours = vac.normal.taken.hours + vac.extra.taken.hours + vac.ill.taken.hours; + vac.total.open.days = vac.normal.open.days + vac.extra.open.days + vac.ill.open.days; + vac.total.open.hours = vac.normal.open.hours + vac.extra.open.hours + vac.ill.open.hours; + vac.total.accepted.days = vac.normal.accepted.days + vac.extra.accepted.days + vac.ill.accepted.days; + vac.total.accepted.hours = vac.normal.accepted.hours + vac.extra.accepted.hours + vac.ill.accepted.hours; + vac.total.asked.days = vac.normal.asked.days + vac.extra.asked.days + vac.ill.asked.days; + vac.total.asked.hours = vac.normal.asked.hours + vac.extra.asked.hours + vac.ill.asked.hours; + } + //JSON.stringify(vac) + "\n"); + if (pconfig.vacancyunit == 'days'){ + $("#vacnopen").html(((vac.normal.open.days && vac.normal.open.days != 0)?vac.normal.open.days.toFixed(2)+" j":" ")); + $("#vacntaken").html(vac.normal.taken.days.toFixed(2)+" j"); + $("#vacnasked").html(vac.normal.asked.days.toFixed(2)+" j"); + $("#vacnplanned").html(vac.normal.accepted.days.toFixed(2)+" j"); + + $("#vaceopen").html(" "); + $("#vacetaken").html(vac.extra.taken.days.toFixed(2)+" j"); + $("#vaceasked").html(vac.extra.asked.days.toFixed(2)+" j"); + $("#vaceplanned").html(vac.extra.accepted.days.toFixed(2)+" j"); + + $("#vacmopen").html(" "); + $("#vacmtaken").html(vac.ill.taken.days.toFixed(2)+" j"); + $("#vacmasked").html(vac.ill.asked.days.toFixed(2)+" j"); + $("#vacmplanned").html(vac.ill.accepted.days.toFixed(2)+" j"); + + $("#vactopen").html(vac.total.open.days.toFixed(2)+" j"); + $("#vacttaken").html(vac.total.taken.days.toFixed(2)+" j"); + $("#vactasked").html(vac.total.asked.days.toFixed(2)+" j"); + $("#vactplanned").html(vac.total.accepted.days.toFixed(2)+" j"); + } else { + vac.normal.open.hours=vac.normal.open.hours + parseInt($("#vacancylastyearrest").val()); + $("#vacnopen").html(((vac.normal.open.hours && vac.normal.open.hours != 0)?vac.normal.open.hours+" h":" ")); + $("#vacntaken").html(((vac.normal.taken.hours && vac.normal.taken.hours > 0)?vac.normal.taken.hours+" h":" ")); + $("#vacnasked").html(((vac.normal.asked.hours && vac.normal.asked.hours > 0)?vac.normal.asked.hours+" h":" ")); + $("#vacnplanned").html(((vac.normal.accepted.hours && vac.normal.accepted.hours > 0)?vac.normal.accepted.hours+" h":" ")); + + $("#vacetaken").html(((vac.extra.taken.hours && vac.extra.taken.hours > 0)?vac.extra.taken.hours+" h":" ")); + $("#vaceasked").html(((vac.extra.asked.hours && vac.extra.asked.hours > 0)?vac.extra.asked.hours+" h":" ")); + $("#vaceplanned").html(((vac.extra.accepted.hours && vac.extra.accepted.hours > 0)?vac.extra.accepted.hours+" h":" ")); + + $("#vacmtaken").html(((vac.ill.taken.hours && vac.ill.taken.hours > 0)?vac.ill.taken.hours+" h":" ")); + $("#vacmasked").html(((vac.ill.asked.hours && vac.ill.asked.hours > 0)?vac.ill.asked.hours+" h":" ")); + $("#vacmplanned").html(((vac.ill.accepted.hours && vac.ill.accepted.hours > 0)?vac.ill.accepted.hours+" h":" ")); + + $("#vactopen").html(((vac.total.open.hours && vac.total.open.hours > 0)?vac.total.open.hours+" h":" ")); + $("#vacttaken").html(((vac.total.taken.hours && vac.total.taken.hours > 0)?vac.total.taken.hours+" h":" ")); + $("#vactasked").html(((vac.total.asked.hours && vac.total.asked.hours > 0)?vac.total.asked.hours+" h":" ")); + $("#vactplanned").html(((vac.total.accepted.hours && vac.total.accepted.hours > 0)?vac.total.accepted.hours+" h":" ")); + + } + + //dump(JSON.stringify(vac) + " - Set data vacancy status\n"); + // var hdata = " pris: "+ vac.taken.hours +" h ("+ vac.taken.days.toFixed(2)+" jour(s)) - "; + // hdata += " planifié: "+ vac.rest.hours+" h ("+ vac.rest.days.toFixed(2)+" jour(s)) - "; + // hdata += " ouvert: "+ vac.open.hours +" h ("+ vac.open.days.toFixed(2)+" jour(s))"; + // if (vac.ill > 0) { + // hdata += " -  (maladie: "+ vac.ill.hours+" h ("+ vac.ill.days.toFixed(2)+" jour(s)))"; + // } + //dump("HTML: --" + document.getElementById("vacancystatus").innerHTML +"//\n->" + hdata + "\n"); + //$("#vacancystatus").html(""); + //if ($("#vacancystatus")){ + //dump("vacancystatus exists\n"); + // + //} + $("#vacancystatus").html(""); + } + else { + $("#vacancystatus").html(""); + } + } + + +function setvacancyunit(){ + var vacunit = $('#vacancy_unit').val(); + if ($('#vacancyyeartotal').val() !== ""){ + var vacval = parseFloat($('#vacancyyeartotal').val().replace(',','.')); + if (((!pconfig.vacancyunit) || (pconfig.vacancyunit == 'days')) && (vacunit == 'hours')){ + $('#vacancyyeartotal').val(vacval * 8); + }else if (pconfig.vacancyunit != vacunit){ + $('#vacancyyeartotal').val(vacval / 8); + } + } + //dump("vacunit: " + vacunit + "\n"); + pconfig.vacancyunit = vacunit; + apppref.setpreference("pageconfig.coworker",pconfig); +} + +function setfreq() { + + curfreq.freq = $('#freq option:selected').val(); + + $('#freqinterval').hide(); + $('#freqmonthly').hide(); + $('#freqweekly').hide(); + if (curfreq.freq != "") { + + $('#lblfreq').text(lblfreq[curfreq.freq]); + $('#freqinterval').show(); + if (curfreq.freq != 'daily') { + $('#freq' + curfreq.freq).show(); + } + } + +} + +function getlastyearsrest(){ + var weekhours = $('#staff_weekhours').val(); + if (weekhours === '') { + $("#vacancylastyearrest").val(0); + return; + } + var df = new Date(pconfig.year-1,0,1); + var dt = new Date(pconfig.year-1,11,31); + var vcalcrestsql = "select (select hours from staffvacancydays where staffuuid='"+pconfig.uuid+ "' and vacancyyear="+df.getFullYear()+")-SUM(dayhours) AS hours from (" + + "select vd.daydate,case when daydate <= date('now') then 1 else 0 end as taken,case when vc.timefrom=vc.timeto then cast ("+weekhours+"/5 as real) else (cast (substr(vc.timeto,1,2) as int) + (cast(substr(vc.timeto,4,5) as int)/60)) - (cast(substr(vc.timefrom,1,2) as int) + (cast(substr(vc.timeto,4,5) as int)/60)) end as dayhours,type,case when type != -1 then accepted else '1' end as accepted "+ + "from vacancycalendar vc left join ( "+ + "select daydate from ( "; + + var yd = []; + for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){ + yd.push("select date('"+dx.toLocaleFormat('%Y-%m-%d')+"') as daydate"); + } + vcalcrestsql += yd.join(" UNION ") + + ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+df.getFullYear()+"-01-01' and '"+dt.getFullYear()+"-12-31' and vacancydateto is null) " + + ") vd on (vd.daydate between vc.datefrom and vc.dateto) " + + "left join staffvacancydays svd on (vc.staffuuid=svd.staffuuid) " + + "where vc.staffuuid='"+pconfig.uuid+ "' and daydate is not null group by daydate) where type in (0,1) and taken=1 and accepted=1 group by taken,accepted;"; + //dump("SQLREST:" + vcalcrestsql + "\n"); + var vcalc = appdb.dbquery(vcalcrestsql); + //dump(JSON.stringify(vcalc) + "\n"); + if (vcalc && vcalc.sqldata[0]){ + + $("#vacancylastyearrest").val(vcalc.sqldata[0].hours); + }else { + $("#vacancylastyearrest").val(0); + } + return; +} + diff --git a/modules/staff/js/staff.js b/modules/staff/js/staff.js new file mode 100644 index 0000000..60374b3 --- /dev/null +++ b/modules/staff/js/staff.js @@ -0,0 +1,120 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var pconfig = {}; +var delcoworker = null; +var wh = window.innerHeight - 100; +var tblstaff = null; + +function initdata() { + + loadtable(); + set_infoheader(""); + if (!pconfig.printlayout) { + pconfig.printlayout = 'list'; + apppref.setpreference("pageconfig.staff", pconfig); + } + } + +function loadtable() { + var sql = "SELECT ' ' as action, coalesce(prename,'') || '
    ' || coalesce(surname,'') as name,case when color is not null then '
    ' else null end color, coalesce(address,'')|| '
    ' || coalesce(zip,'') || ' ' || coalesce(city,'') || '
    ' || coalesce(country,'') as address, case when phone is not null then ': ' || phone || '
    ' else '' end || case when email is not null then ':' || email else '' end as phonemail, coalesce(jobtitle,'') || '
    ' || case when entrydate is not null then 'à partir du: ' || strftime('%d.%m.%Y',entrydate) else '' end || case when exitdate is not null then ' jusqu''au: ' || strftime('%d.%m.%Y',exitdate) else '' end as jobtitle FROM staff;"; + //dump("STAFFSQL:" +sql + "\n"); + var data = appdb.dbqueryarray(sql); + + var headerdata = getlabels(data.sqlhead.join(",")); + $("#tbl_staff").html(""); + tblstaff = $("#tbl_staff").dataTable({ + "language": { + "url": "../../web/js/locale/datatable_fr.json" + }, + "data": data.sqldata, + "columns": headerdata, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "ordering": true, + "info": false, + "filter": true, + "destroy": true + }); +// $('#tbl_staff').on('search.dt', function() { +// pconfig.filter = tblstaff.api().search(); +// apppref.setpreference("pageconfig.staff", pconfig); +// }); + + $('#tbl_staff').on('order.dt', function() { + pconfig.order = tblstaff.fnSettings().aaSorting; + apppref.setpreference("pageconfig.staff", pconfig); + + }); +// if (pconfig.filter) { +// tblstaff.fnFilter(pconfig.filter); +// } + if (pconfig.order) { + tblstaff.fnSort(pconfig.order); + } + if (/*(!pconfig.filter) && */ (!pconfig.order)) { + tblstaff.fnDraw(); + } +} + + + +function add_coworker() { + var newuuid = appdb.generate_uuid(); + appdb.dbexec("insert into staff (uuid) VALUES ('" + newuuid + "');"); + + globelreq.send_request({ + page: 'coworker', + module: 'staff', + data: { + "uuid": newuuid + }, + header: 'Employé(e)' + }); +} + +function confirm_delete_coworker(myuuid) { + //alert('TEST'); + delcoworker = myuuid; + $("#confirm_delete_coworker").modal('show'); + return false; +} + +function delete_coworker() { + //var frmdata = new Object(); + //appdb.dbexec("DELETE FROM planningstaff where staffuuid='"+delcoworker +"';"); + var evdel = appdb.dbquery("select eventcalendaruuid,count(staffuuid) as cnt from staffplanning where staffuuid='" + delcoworker + "';"); + + appdb.dbexec("DELETE FROM staffvacancydays where staffuuid='" + delcoworker + "';"); + appdb.dbexec("DELETE FROM vacancycalendar where staffuuid='" + delcoworker + "';"); + appdb.dbexec("DELETE FROM staffplanning where staffuuid='" + delcoworker + "';"); + appdb.dbexec("DELETE FROM staff where uuid='" + delcoworker + "';"); + for (var e in evdel.sqldata) { + if (evdel.sqldata[e].cnt == 1) { + appdb.dbexec("DELETE FROM eventcalendar where uuid='" + evdel.sqldata[e].eventcalendaruuid + "';"); + } + } + // + delcoworker = null; + loadtable(); + // + $("#confirm_delete_coworker").modal('hide'); + +} + +function load_coworker(couuid){ + //"coworker uuid:" + couuid + "\n"); + var cwdata = apppref.getpreference("pageconfig.coworker"); + var cow = new Object(); + if (cwdata && cwdata !== ""){ + cow = JSON.parse(cwdata); + } + //dump("Current CoWorker cfg:" +JSON.stringify(cow) + "\n"); + cow.uuid = couuid; + //dump("New CoWorker cfg:" +JSON.stringify(cow) + "\n"); + apppref.setpreference("pageconfig.coworker",cow); + globelreq.send_request({page:'coworker', + module:'staff', + data:null, + header:'Employé(e)'}); + +} \ No newline at end of file diff --git a/modules/staff/js/staff_basic.js b/modules/staff/js/staff_basic.js new file mode 100644 index 0000000..c51de6a --- /dev/null +++ b/modules/staff/js/staff_basic.js @@ -0,0 +1,122 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +var pconfig = {}; +var wh = window.innerHeight - 100; + +function initdata() { + set_infoheader(""); + if (!pconfig.printlayout) { + pconfig.printlayout = 'list'; + apppref.setpreference("pageconfig.staff", pconfig); + } + load_staff_selection(); + var stlist = appdb.dbquery("select * from creche;"); + //dump(JSON.stringify(stlist) + "\n"); + if ((stlist.sqldata) && stlist.sqldata[0].stafflist == '1'){ + $("#stafflist").show(); + loadtable_staff(); + $("#stafflogin").hide(); + } +} + +function loadtable_staff() { + var sql = "SELECT ' ' as action, coalesce(prename,'') || '
    ' || coalesce(surname,'') as name,case when color is not null then '
    ' else null end color, coalesce(address,'')|| '
    ' || coalesce(zip,'') || ' ' || coalesce(city,'') || '
    ' || coalesce(country,'') as address, case when phone is not null then ': ' || phone || '
    ' else '' end || case when email is not null then ':' || email else '' end as phonemail, coalesce(jobtitle,'') || '
    ' || case when entrydate is not null then 'à partir du: ' || strftime('%d.%m.%Y',entrydate) else '' end || case when exitdate is not null then ' jusqu''au: ' || strftime('%d.%m.%Y',exitdate) else '' end as jobtitle FROM staff;"; + //dump(sql + "\n"); + var data = appdb.dbqueryarray(sql); + + var headerdata = getlabels(data.sqlhead.join(",")); + $("#tbl_staff").html(""); + tblstaff = $("#tbl_staff").dataTable({ + "language": { + "url": "../../web/js/locale/datatable_fr.json" + }, + "data": data.sqldata, + "columns": headerdata, + "paging": false, + "scrollY": wh + "px", + "scrollCollapse": true, + "ordering": true, + "info": false, + "filter": true, + "destroy": true + }); +// $('#tbl_staff').on('search.dt', function() { +// pconfig.filter = tblstaff.api().search(); +// apppref.setpreference("pageconfig.staff", pconfig); +// }); + + $('#tbl_staff').on('order.dt', function() { + pconfig.order = tblstaff.fnSettings().aaSorting; + apppref.setpreference("pageconfig.staff", pconfig); + + }); +// if (pconfig.filter) { +// tblstaff.fnFilter(pconfig.filter); +// } + if (pconfig.order) { + tblstaff.fnSort(pconfig.order); + } + if (/*(!pconfig.filter) && */ (!pconfig.order)) { + tblstaff.fnDraw(); + } + } + +function load_coworker_basic(){ + var couuid= $('#sel_staff :selected').val(); + var copwd = $('#txtpasswd').val(); + var encpwd = MD5(copwd); + var cwpwd = appdb.dbquery("select password from staff where uuid='"+couuid+"';"); + //dump(cwpwd + "\n"); + //dump("SQL: select password from staff where uuid='"+couuid+"';\n"); + //dump("PWD: " + copwd + " ENC: " + encpwd + " CMP: "+ cwpwd.sqldata[0].password +"\n"); + if (cwpwd.sqldata[0].password == encpwd){ + var cwdata = apppref.getpreference("pageconfig.coworker"); + var cow = new Object(); + if (cwdata && cwdata !== ""){ + cow = JSON.parse(cwdata); + } + cow.uuid = couuid; + //dump("New CoWorker cfg:" +JSON.stringify(cow) + "\n"); + apppref.setpreference("pageconfig.coworker",cow); + globelreq.send_request({page:'coworker_basic', + module:'staff', + data:null, + header:'Employé(e)'}); + + } + + +} + +function load_coworker(couuid){ + //"coworker uuid:" + couuid + "\n"); + var cwdata = apppref.getpreference("pageconfig.coworker"); + var cow = new Object(); + if (cwdata && cwdata !== ""){ + cow = JSON.parse(cwdata); + } + //dump("Current CoWorker cfg:" +JSON.stringify(cow) + "\n"); + cow.uuid = couuid; + //dump("New CoWorker cfg:" +JSON.stringify(cow) + "\n"); + apppref.setpreference("pageconfig.coworker",cow); + globelreq.send_request({page:'coworker_basic', + module:'staff', + data:null, + header:'Employé(e)'}); + + } + +function load_staff_selection(){ + var stdata = appdb.dbquery("select uuid, coalesce(surname,'') || ' ' || coalesce(prename,'') as name,case when color is null then '#000' else color end as color from staff where password is not null order by surname,prename"); + stdata = stdata.sqldata; + //JSON.stringify(stdata)); + for (var s in stdata){ + $('#sel_staff').append(''); + } +} + +function onselstaff(objid) { + + //pconfig.filterstaff = $('#' + objid).val(); + //apppref.setpreference("pageconfig.calactivity",pconfig); + //load_calendar_data(); +} \ No newline at end of file diff --git a/modules/staff/staff.html b/modules/staff/staff.html new file mode 100644 index 0000000..7c05876 --- /dev/null +++ b/modules/staff/staff.html @@ -0,0 +1,69 @@ + + + + + + + Creorga - Staff + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    +
    + +
    + + + + + + + + + + + + + diff --git a/modules/staff/staff.xul b/modules/staff/staff.xul new file mode 100644 index 0000000..4bcd895 --- /dev/null +++ b/modules/staff/staff.xul @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/modules/staff/staff_basic.html b/modules/staff/staff_basic.html new file mode 100644 index 0000000..4688e9b --- /dev/null +++ b/modules/staff/staff_basic.html @@ -0,0 +1,77 @@ + + + + + + + Creorga - Staff Basic + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    +
    +

    Login

    +
    +
    +
    +
    + + + + + +
    +
    +
    +
    + + + + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + diff --git a/modules/staff/staff_basic.xul b/modules/staff/staff_basic.xul new file mode 100644 index 0000000..b8daf7f --- /dev/null +++ b/modules/staff/staff_basic.xul @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/modules/waitlist/waitlist.html b/modules/waitlist/waitlist.html new file mode 100644 index 0000000..9b8b2a0 --- /dev/null +++ b/modules/waitlist/waitlist.html @@ -0,0 +1,130 @@ + + + + + + Liste d'attente + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    + +
    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/waitlist/waitlist.js b/modules/waitlist/waitlist.js new file mode 100644 index 0000000..72941a4 --- /dev/null +++ b/modules/waitlist/waitlist.js @@ -0,0 +1,206 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +var pconfig = {}; +var wh= window.innerHeight-130; +var delwl = null; +var tblwaitlist = null; + +function initdata(){ + load_helpers(); + var pdata = apppref.getpreference("pageconfig.waitlist"); + if (pdata != '') { + pconfig = JSON.parse(pdata); + } + if (!pconfig.printlayout) { + pconfig.printlayout = 'list'; + apppref.setpreference("pageconfig.waitlist",pconfig); + } + + loadtextareas(200); + set_infoheader(""); + load_waitlist_table(); + +} + +//$('#tbl_waitlist').on( 'search.dt', function () { +// pconfig.filter = tblwaitlist.api().search(); +// apppref.setpreference("pageconfig.waitlist",pconfig); +//} ); + +$('#tbl_waitlist').on( 'order.dt', function () { + pconfig.order= tblwaitlist.fnSettings().aaSorting; + apppref.setpreference("pageconfig.waitlist",pconfig); +} ); + +function load_waitlist_table(){ + var waitlistsql = "select uuid, '' || strftime('%Y-%m-%d',waitdate) || '' || strftime('%d.%m.%Y',waitdate) as waitdate, name,phone, email, age, note FROM waitlist order by waitdate;"; + var headerdata = []; + headerdata = getlabelswithkey("act,waitdate,contactinfo,childinfo"); + + var waitlistdata = appdb.dbquery(waitlistsql); + $("#tbl_waitlist").html(""); + var tblheader = ''; + for (var h in headerdata){ + if ((headerdata[h].keyname == 'act') && (headerdata[h].class.indexOf('action1btn') == -1)){ + headerdata[h].class +=" action1btn"; + } + tblheader += ''+ headerdata[h].title+''; + + } + tblheader += ''; + tblacc = null; + $("#tbl_waitlist").append("" + tblheader + ""); + $("#tbl_waitlist").append(""); + for (var i in waitlistdata.sqldata){ + var row = waitlistdata.sqldata[i]; + var tr = ''+ + ''+ + ''; + tr += '' + row.waitdate + ''; + tr += '' + ((row.name !=='')?row.name + '
    ':'')+((row.phone !== '')?row.phone + '
    ':'')+row.email + ''; + tr += '' + ((row.age !== '')?row.age+ '
    ':'') + htmlUnescape(row.note) + ''; + $("#tbl_waitlist").append(tr); + + } + + $("#tbl_waitlist").append(""); + tblwaitlist = $("#tbl_waitlist").dataTable({ + "language": { + "url": "js/locale/datatable_fr.json" + }, + + "paging": false, + "ordering": true, + "scrollY": wh + "px", + "scrollCollapse": true, + "info": true, + "filter": true, + "destroy": true + }); +// if (pconfig.filter) { +// tblwaitlist.fnFilter(pconfig.filter); +// } + if (pconfig.order) { + //dump(JSON.stringify(pconfig.order) + "\n"); + tblwaitlist.fnSort(pconfig.order); + } else { + pconfig.order = [[1,"asc"]]; + tblwaitlist.fnSort(pconfig.order); + } +} + +function dlg_waitlist(uuid,type){ + if ((type == 'upd') || (type == 'ins')) { + + var wlsql = "SELECT '0' as uuid,strftime('%d.%m.%Y',date('now')) as waitdate, '' as name, '' as phone, '' as email, ''as age, '' as note FROM waitlist LIMIT 1;"; + if (type == 'upd') { + + wlsql = "SELECT uuid, strftime('%d.%m.%Y',date(waitdate)) as waitdate, name, phone, email, age, note FROM waitlist where uuid='"+uuid.uuid+"';"; + } + var wldata = appdb.dbquery(wlsql); + + wldata = wldata.sqldata[0]; + for (var w in wldata){ + if ($("#frmeditwaitlist #" +w)) { + if ($("#frmeditwaitlist #"+w).prop("tagName") === "TEXTAREA"){ + $("#frmeditwaitlist #"+w).summernote('code',htmlUnescape(wldata[w])); + } + else { + $("#frmeditwaitlist #"+w).val(wldata[w]); + } + } + } + $("#edit_waitlist").modal('show'); + }else if (type == 'del') { + //dump("UUID to delete: " + JSON.stringify(uuid) + "\n"); + delwl = uuid.uuid; + confirm_delete_waitlist(); + } + } + + function confirm_delete_waitlist(){ + + $("#confirm_delete_waitlist").modal('show'); + return false; + } + + function delete_waitlist(){ + + var delsql = "DELETE FROM waitlist where uuid='"+delwl +"';"; + //dump(JSON.stringify(delwl) + " - " + delsql + "\n"); + appdb.dbexec(delsql); + delwl =null; + load_waitlist_table(); + + $("#confirm_delete_waitlist").modal('hide'); + + return false; + } + + function save_waitlist(){ + var sql1 = new Array(); + var sql2 = new Array(); + var type = 'ins'; + var cuuid = ""; + if ($("#frmeditwaitlist #uuid").val() != 0) { + type = 'upd'; + cuuid = $("#frmeditwaitlist #uuid").val(); + } + $("#frmeditwaitlist :input").each(function(){ + var input = $(this); + if (input.attr("id")){ + if (type == 'ins') { + sql1.push('"' + input.attr("id") + '"'); + if (input.attr("id") == 'uuid') { + if (input.val() == "" || input.val() == "0") { + sql2.push("'" + appdb.generate_uuid()+"'"); + } + else { + sql2.push("'" + input.val()+"'"); + } + } else { + var ival = encodeparam(input.val(),input.attr('type')); + sql2.push(ival); + } + }else { + if (input.attr("id") != 'uuid') { + var ival = encodeparam(input.val(),input.attr('type')); + sql2.push('"' + input.attr("id") +'"='+ ival); + } + } + + + } + + }); + var xsql = ""; + if (type == 'upd') { + xsql = "UPDATE waitlist SET "+sql2.join(',')+" where \"uuid\"='" + cuuid +"';"; + }else { + xsql = "INSERT INTO waitlist ("+sql1.join(',')+") VALUES ("+sql2.join(',')+");"; + } + + appdb.dbexec(xsql); + load_waitlist_table(); + $("#frmeditwaitlist #uuid").val("0"); + $("#edit_waitlist").modal('hide'); + } + +function print_list(){ + globelreq.send_request({page:'preview2',data:{page: 'waitlist'}}); +} + +function add_child(uuid){ +var newuuid = appdb.generate_uuid(); + var wlsql = "SELECT uuid, name, phone, email, age, note FROM waitlist where uuid='"+uuid+"';"; + var wldata = appdb.dbquery(wlsql); + appdb.dbexec("insert into childs (uuid,birthday,entrydate,leavedate,remark) VALUES ('" + newuuid + "',date('now','-2 months'),date('now'),date('now'),'"+ appdb.strreplace(wldata.sqldata[0].name + '
    ' + wldata.sqldata[0].phone + '
    ' + wldata.sqldata[0].email+ '
    ' + wldata.sqldata[0].age + '
    ' +htmlUnescape(wldata.sqldata[0].note)) +"');"); + appdb.dbexec("DELETE FROM waitlist where waitlist='"+ uuid +"';"); + globelreq.send_request({ + page: 'child', + data: { + "uuid": newuuid + }, + header: 'Enfant' + }); +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ded50a9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1261 @@ +{ + "name": "creorga", + "version": "4.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@fortawesome/fontawesome-free": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.7.2.tgz", + "integrity": "sha512-Ha4HshKdCVKgu4TVCtG8XyPPYdzTzNW4/fvPnn+LT7AosRABryhlRv4cc4+o84dgpvVJN9reN7jo/c+nYujFug==", + "dev": true + }, + "@types/node": { + "version": "10.12.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz", + "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==", + "dev": true + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bootstrap": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==", + "dev": true + }, + "bootstrap-datepicker": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/bootstrap-datepicker/-/bootstrap-datepicker-1.8.0.tgz", + "integrity": "sha512-213St/G8KT3mjs4qu4qwww74KWysMaIeqgq5OhrboZjIjemIpyuxlSo9FNNI5+KzpkkxkRRba+oewiRGV42B1A==", + "dev": true, + "requires": { + "jquery": ">=1.7.1 <4.0.0" + } + }, + "bootstrap-table": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/bootstrap-table/-/bootstrap-table-1.13.4.tgz", + "integrity": "sha512-033fnjYKgFZO98PL6E0JAqmwTJ2isoQxJBFU6BwEbIMmRZETk5iDoPGgV+7wORt4c+yABNWj8EnbFBWAHz5YPw==", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-4.0.5.tgz", + "integrity": "sha512-UWFH6SrzNtzfvusGUFYxXDrgsUEbtBXkH/66hpDWxjA2Ckt7ozcYIujZpshbr7LPy8kV3ZRxIvoyCMdaS5DkVQ==", + "dev": true, + "requires": { + "@types/node": "^10.12.18", + "electron-download": "^4.1.0", + "extract-zip": "^1.0.3" + } + }, + "electron-download": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz", + "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==", + "dev": true, + "requires": { + "debug": "^3.0.0", + "env-paths": "^1.0.0", + "fs-extra": "^4.0.1", + "minimist": "^1.2.0", + "nugget": "^2.0.1", + "path-exists": "^3.0.0", + "rc": "^1.2.1", + "semver": "^5.4.1", + "sumchecker": "^2.0.2" + } + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jquery": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "dev": true, + "requires": { + "mime-db": "~1.38.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "nugget": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", + "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", + "dev": true, + "requires": { + "debug": "^2.1.3", + "minimist": "^1.1.0", + "pretty-bytes": "^1.0.2", + "progress-stream": "^1.1.0", + "request": "^2.45.0", + "single-line-log": "^1.1.2", + "throttleit": "0.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "popper.js": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz", + "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ==", + "dev": true + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.1.0" + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dev": true, + "requires": { + "speedometer": "~0.1.2", + "through2": "~0.2.3" + } + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "single-line-log": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", + "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", + "dev": true, + "requires": { + "string-width": "^1.0.1" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true + }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "store2": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.7.1.tgz", + "integrity": "sha512-zzzP5ZY6QWumnAFV6kBRbS44pUMcpZBNER5DWUe1HETlaKXqLcCQxbNu6IHaKr1pUsjuhUGBdOy8sWKmMkL6pQ==", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "sumchecker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", + "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", + "dev": true, + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dev": true, + "requires": { + "readable-stream": "~1.1.9", + "xtend": "~2.1.1" + } + }, + "tinymce": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-5.0.0.tgz", + "integrity": "sha512-aWBXuV1S+JaZUoteLgOoDv9Ra7wcohpRFoHhldoRWUg9fdA36zC9XPjWfxNgzaANqKdOICxZ3tguLmi3RLtiLA==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "~0.4.0" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "~1.0.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..aa10d68 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "creorga", + "version": "4.0.0", + "description": "Crèche Management Software", + "main": "main.js", + "scripts": { + "start": "electron ." + }, + "author": "Kilian Saffran", + "license": "MIT", + "devDependencies": { + "@fortawesome/fontawesome-free": "^5.7.2", + "bootstrap": "^4.3.1", + "bootstrap-datepicker": "^1.8.0", + "bootstrap-table": "^1.13.4", + "electron": "^4.0.5", + "jquery": "^3.3.1", + "popper.js": "^1.14.7", + "store2": "^2.7.1", + "tinymce": "^5.0.0" + } +} -- 2.39.5