From: Kilian Saffran Date: Thu, 21 Feb 2019 09:12:39 +0000 (+0100) Subject: Initial input X-Git-Url: http://cloud.dks.lu/git/?a=commitdiff_plain;h=0d3ae3cc179df5b7fb5195d887e982473e0d73cb;p=creorga_mini.git Initial input --- 0d3ae3cc179df5b7fb5195d887e982473e0d73cb 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 0000000..15689f8 Binary files /dev/null and b/img/creorga.png differ diff --git a/img/dks_1000.png b/img/dks_1000.png new file mode 100644 index 0000000..87b44eb Binary files /dev/null and b/img/dks_1000.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..73159b2 --- /dev/null +++ b/index.html @@ -0,0 +1,54 @@ + + + + + + + + + + +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 0000000..545d90b Binary files /dev/null and b/modules/presences/img/presence.png differ diff --git a/modules/presences/js/dailypresences.js b/modules/presences/js/dailypresences.js new file mode 100644 index 0000000..6efc6ce --- /dev/null +++ b/modules/presences/js/dailypresences.js @@ -0,0 +1,400 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) + +var pconfig = { + "groupuuid": null, + "presday": 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 weekday = initdate.getDay(); + +var presencedropdown = ''; + +var wdays = ["sun","mon","tue","wed","thu","fri","sat"]; + +var presences = { + "btn-default": 0, + "btn-success": 1, + "btn-warning": 2, + "btn-danger": 3, + "btn-absent2": 31, + "btn-info": 4, + "btn-primary": 5 +}; + +var presenceids = { + 0: { + text: "default", + class: "btn-default", + icon: '' + + }, + 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 0000000..8c760e8 Binary files /dev/null and b/modules/reports/img/logoprint.png differ diff --git a/modules/reports/img/print.png b/modules/reports/img/print.png new file mode 100644 index 0000000..335f482 Binary files /dev/null and b/modules/reports/img/print.png differ diff --git a/modules/reports/img/save.png b/modules/reports/img/save.png new file mode 100644 index 0000000..ef5ba59 Binary files /dev/null and b/modules/reports/img/save.png differ diff --git a/modules/reports/img/settings.png b/modules/reports/img/settings.png new file mode 100644 index 0000000..3a8b3b3 Binary files /dev/null and b/modules/reports/img/settings.png differ diff --git a/modules/reports/js/print.js b/modules/reports/js/print.js new file mode 100644 index 0000000..4ae6ede --- /dev/null +++ b/modules/reports/js/print.js @@ -0,0 +1,64 @@ +//Source-code licensed under EUPL v1.1 ( Copyright 2016 By DKS s.à r.l. - Kilian Saffran - Luxembourg ) +document.onreadystatechange = function () { + if (document.readyState == "complete") { + try { + initdata(); + }catch(e){ + //dump("Print.js No initdata function!\n"); + } + } +} + +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.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 0000000..679ba25 Binary files /dev/null and b/modules/staff/img/staff.png differ 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" + } +}