v20200110
authorKilian Saffran <ksaffran@dks.lu>
Mon, 11 Jan 2021 06:45:14 +0000 (07:45 +0100)
committerKilian Saffran <ksaffran@dks.lu>
Mon, 11 Jan 2021 06:45:14 +0000 (07:45 +0100)
38 files changed:
desktopapp/css/fonts/appicons.svg
desktopapp/css/fonts/appicons.ttf
desktopapp/css/fonts/appicons.woff
desktopapp/css/icons.css
desktopapp/dialogs/AddFiles.html
desktopapp/dialogs/Email.html
desktopapp/dialogs/InvoiceBooking.html [deleted file]
desktopapp/dialogs/SelectAddress.html
desktopapp/dialogs/SelectProduct.html
desktopapp/dialogs/confirm.html
desktopapp/dialogs/dataload.html
desktopapp/dialogs/message.html
desktopapp/index.html
desktopapp/js/email.js
desktopapp/js/lang/de.js
desktopapp/modules/addresses/addresses.html
desktopapp/modules/addresses/addresses.js
desktopapp/modules/bookings/bookings.html
desktopapp/modules/datasets/datasets.html
desktopapp/modules/datasets/datasets.js
desktopapp/modules/invoices/invoice.html
desktopapp/modules/invoices/invoice.js
desktopapp/modules/invoices/invoices.html
desktopapp/modules/invoices/invoices.js
desktopapp/modules/mailtemplates/mailtempates.html
desktopapp/modules/mailtemplates/mailtemplates.js
desktopapp/modules/modules.json
desktopapp/modules/offers/offer.html
desktopapp/modules/offers/offers.html
desktopapp/modules/products/products.html
desktopapp/modules/products/products.js
desktopapp/modules/settings/settings.html
desktopapp/modules/settings/settings.js
desktopapp/modules/templates/templates.html
desktopapp/modules/transactions/transactions.html
desktopapp/package-lock.json
desktopapp/package.json
dev/mail.bat

index 8458cab..98b28c8 100644 (file)
 <glyph unicode="&#xe95b;" glyph-name="pc-datatransfer" d="M614.364 395.61v-214.028h338.216v214.028zM71.424 804.67v-214.069h338.216v214.069zM0 867.337h481.018v-184.968h302.406v-224.051h240.58v-339.401h-175.444l-0.046-42.411h71.329v-47.841h-272.693v47.841h71.232l0.048 42.411h-175.444v339.401h176.069v167.49h-238.036v-97.874h-175.397l-0.047-42.368h71.281v-47.884h-272.742v47.884h71.331l0.046 42.368h-175.49z" />
 <glyph unicode="&#xe95c;" glyph-name="pc-mac" d="M432.304 112.864h159.373c21.749 0 39.395-17.602 39.395-39.374v-39.374l77.857-0.003c21.75 0 39.375-17.625 39.375-39.394v-39.374h-472.608v39.374c0 21.769 17.636 39.394 39.385 39.394h77.847v39.378c0 21.773 17.625 39.374 39.376 39.374zM512.013 307.84c-31.62 0-57.245-25.626-57.245-57.23 0-31.626 25.624-57.25 57.245-57.25 31.601 0 57.203 25.624 57.203 57.25 0 31.605-25.602 57.23-57.203 57.23zM585.056 700.678c23.917 0 49.209-13.038 67.294-35.539-59.169-32.417-49.545-116.917 10.226-139.522-8.229-18.249-12.144-26.395-22.77-42.499-14.749-22.501-35.628-50.582-61.417-50.769-22.959-0.208-28.834 14.957-60.001 14.729-31.125-0.168-37.668-15-60.585-14.773-25.833 0.23-45.585 25.542-60.377 47.999-41.311 62.999-45.699 136.834-20.167 176.103 18.125 27.894 46.751 44.23 73.627 44.23 27.333 0 44.543-15.024 67.168-15.024 21.959 0 35.335 15.062 67.003 15.062zM578.118 782.72c3.144-21.272-5.605-42.105-17.063-56.875-12.335-15.856-33.543-28.081-54.043-27.436-3.75 20.355 5.874 41.355 17.5 55.499 12.832 15.541 34.791 27.541 53.606 28.812zM118.154 861.072c-21.698 0-39.386-17.707-39.386-39.395v-433.229c0-21.688 17.687-39.376 39.386-39.376h787.688c21.706 0 39.374 17.688 39.374 39.376v433.229c0 21.688-17.669 39.395-39.374 39.395zM78.772 940.72h866.453c43.499 0 78.791-35.272 78.791-78.772v-630.106c0-43.499-35.291-78.77-78.791-78.77h-866.453c-43.498 0-78.772 35.271-78.772 78.77v630.106c0 43.5 35.274 78.772 78.772 78.772z" />
 <glyph unicode="&#xe95d;" glyph-name="pc-windows" d="M236.966 33.696h550.062c21.646 0 39.291-17.648 39.291-39.273v-39.287h-628.624v39.287c0 0 17.646 39.273 39.27 39.273zM917.474 258.64c-15.688 0-28.418-12.75-28.418-28.48s12.73-28.48 28.418-28.48c15.73 0 28.478 12.749 28.478 28.48s-12.749 28.48-28.478 28.48zM519.666 562.511c36.604-24.667 74.146-42.791 160.274-13.312l-40.25-139.854c-84.483-35-125.086-15.206-161.754 9.669zM419.742 604.225c32.918-0.48 56.111-12.997 77.82-27.715l-42.189-145.060c-36.687 24.664-76.604 44.999-161.229 9.976l41.25 143.499 0.48 0.23c34.269 14.092 61.345 19.398 83.868 19.070zM568.209 731.259c36.564-24.71 77.167-44.273 161.647-9.398l-41.584-143.998c-81.041-36.227-125.168-15.937-161.688 8.856zM463.094 774.863c35.773 0.561 60.231-13 83.135-28.481l-41.666-143.747c-22.021 14.851-45.793 28.788-79.502 29.019-22.229 0.189-48.727-6.144-82.353-20.019l41.666 144.331c31.719 13.14 57.256 18.561 78.72 18.897zM119.1 858.8c-21.646 0-39.292-17.647-39.292-39.293v-471.478c0-21.645 17.647-39.293 39.292-39.293h785.8c21.647 0 39.292 17.648 39.292 39.293v471.478c0 21.646-17.645 39.293-39.292 39.293zM39.292 940.8h945.417c21.709 0 39.291-17.584 39.291-39.293v-709.686c0-21.71-17.582-39.293-39.291-39.293h-338.013l0.547-0.901c3.024-5.567 4.741-11.951 4.741-18.741v-11.437c0-21.71-17.586-39.274-39.292-39.274h-201.382c-21.709 0-39.294 17.563-39.294 39.274v11.437c0 6.79 1.717 13.173 4.741 18.741l0.547 0.901h-338.012c-21.728 0-39.292 17.582-39.292 39.293v709.686c0 21.709 17.564 39.293 39.292 39.293z" />
-<glyph unicode="&#xe95e;" glyph-name="rndcheck-not" d="M102.028 909.967c-28.698 0-51.995-23.297-51.995-52.076v-819.786c0-28.777 23.297-52.073 51.995-52.073h819.943c28.7 0 51.994 23.295 51.994 52.073v819.786c0 28.779-23.294 52.076-51.994 52.076zM103.709 960h816.581c57.24 0 103.71-46.552 103.71-103.709v-816.583c0-57.159-46.47-103.708-103.71-103.708h-816.581c-57.238 0-103.709 46.549-103.709 103.708v816.583c0 57.157 46.471 103.709 103.709 103.709z" />
-<glyph unicode="&#xe95f;" glyph-name="rndcheck-ok" d="M738.661 656.323l71.412-81.779-381.889-334.986-214.096 248.151 82.33 70.728 142.483-165.486zM102.083 909.962c-28.745 0-52.044-23.299-52.044-52.071v-819.9c0-28.77 23.299-52.072 52.044-52.072h819.955c28.746 0 52.044 23.302 52.044 52.072v819.9c0 28.772-23.298 52.071-52.044 52.071zM103.698 960h816.723c57.18 0 103.7-46.549 103.7-103.727v-816.666c0-57.184-46.52-103.727-103.7-103.727h-816.723c-57.178 0-103.698 46.544-103.698 103.727v816.666c0 57.178 46.52 103.727 103.698 103.727z" />
-<glyph unicode="&#xe960;" glyph-name="sale" d="M482.645 428.889v-12.534c0-11.389-3.407-20.83-10.136-28.275-6.811-7.445-15.615-11.184-26.375-11.184-7.725 0-13.915 2.088-18.481 6.274-4.488 4.171-6.812 9.552-6.812 16.083 0 14.432 9.386 22.842 27.995 25.273zM769.582 492.704c21.599 0 32.357-13.331 32.357-39.997h-68.538c1.455 11.391 5.565 20.903 12.295 28.545 6.731 7.641 14.706 11.451 23.886 11.451zM769.996 531.435c-26.253 0-48.31-9.034-66.252-27.090-17.946-18.067-26.915-42.552-26.915-73.453 0-29.82 8.345-53.060 24.92-69.715 16.616-16.665 40.002-25.003 69.994-25.003 27.539 0 49.927 4.6 67.166 13.81v41.461c-15.536-9.71-33.565-14.549-54.001-14.549-32.191 0-49.223 13.52-51.133 40.538h121.456v24.195c0 27.63-7.435 49.508-22.262 65.612-14.872 16.137-35.849 24.194-62.973 24.194zM457.058 531.435c-11.38 0-24.049-1.578-37.922-4.734-13.915-3.158-24.839-6.792-32.771-10.903v-43.269c19.937 13.208 41.036 19.803 63.176 19.803 22.138 0 33.104-10.167 33.104-30.54l-50.508-6.728c-42.782-5.565-64.214-26.417-64.214-62.54 0-17.070 5.192-30.745 15.575-40.994 10.343-10.239 24.588-15.357 42.616-15.357 24.505 0 42.99 10.424 55.451 31.265h0.788v-26.728h54.29v111.26c0 52.977-26.544 79.465-79.585 79.465zM267.981 605.811c-13.832 0-26.918-1.485-39.296-4.467-12.377-2.958-23.219-7.601-32.65-13.904-9.387-6.301-16.78-14.329-22.304-24.080-5.4-9.762-8.184-21.422-8.184-35.005 0-17.332 5.027-32.118 14.996-44.362 10.052-12.243 25.213-22.617 45.567-31.101 8.058-3.27 15.493-6.481 22.387-9.636 6.855-3.147 12.921-6.418 17.946-9.805 5.026-3.404 8.973-7.091 11.88-11.101 2.865-4.007 4.363-8.545 4.363-13.634 0-3.747-0.958-7.248-2.701-10.468-1.869-3.206-4.568-5.989-8.307-8.347-3.696-2.359-8.266-4.217-13.832-5.557-5.483-1.329-12.006-1.992-19.358-1.992-12.586 0-25.046 2.211-37.423 6.635-12.381 4.434-23.844 11.069-34.354 19.906v-58.183c9.43-4.849 20.561-8.482 33.482-10.904 12.917-2.42 26.541-3.633 40.872-3.633 13.915 0 27.166 1.329 39.67 3.997 12.626 2.67 23.591 7.063 33.064 13.178 9.428 6.126 16.904 14.113 22.427 23.997 5.485 9.888 8.267 22.109 8.267 36.647 0 10.54-1.538 19.791-4.734 27.715-3.158 7.954-7.726 15.017-13.625 21.184-5.941 6.189-13.044 11.736-21.35 16.646-8.35 4.913-17.695 9.542-28.12 13.904-7.604 3.158-14.498 6.21-20.521 9.189-6.023 2.961-11.214 6.004-15.494 9.098-4.237 3.074-7.478 6.355-9.802 9.803-2.327 3.458-3.407 7.362-3.407 11.734 0 3.988 0.997 7.601 3.073 10.81 2.035 3.218 4.986 5.981 8.681 8.286 3.781 2.295 8.35 4.082 13.833 5.359 5.441 1.265 11.547 1.91 18.193 1.91 4.86 0 9.968-0.374 15.411-1.099 5.317-0.716 10.76-1.84 16.241-3.365 5.4-1.516 10.757-3.428 15.95-5.733 5.069-2.294 9.885-4.964 14.204-7.986v54.373c-8.805 3.376-18.483 5.898-28.991 7.54-10.469 1.618-22.515 2.45-36.055 2.45zM582.117 616.354v-275.651h57.5v275.651zM625.263 954.894c9.98 0.12 19.785-4.458 26.096-12.904l67.454-89.873 112.276-4.426c15.325-0.602 28.077-11.92 30.487-27.019l17.944-110.924 97.402-56.106c13.21-7.632 19.233-23.571 14.373-38.098l-35.682-106.54 60.188-94.901c8.224-12.92 6.149-29.865-4.943-40.469l-81.079-77.745 9.138-111.973c1.246-15.285-8.431-29.283-23.136-33.541l-107.912-31.142-44.028-103.384c-5.94-14.124-21.102-22.171-36.055-18.961l-110.070 22.553-86.937-71.131c-5.9-4.839-13.168-7.268-20.354-7.268-7.27 0-14.452 2.429-20.435 7.268l-86.936 71.131-110.114-22.553c-14.912-3.251-30.072 4.881-36.012 18.961l-43.946 103.384-107.912 31.142c-14.787 4.259-24.465 18.256-23.219 33.541l9.138 111.973-81.079 77.745c-11.090 10.604-13.083 27.549-4.901 40.469l60.104 94.901-35.639 106.54c-4.86 14.527 1.163 30.466 14.455 38.098l97.322 56.106 17.942 110.924c2.408 15.099 15.161 26.417 30.489 27.019l112.273 4.426 67.456 89.873c9.179 12.243 25.753 16.345 39.502 9.751l101.514-48.255 101.433 48.255c4.297 2.074 8.87 3.099 13.406 3.153z" />
-<glyph unicode="&#xe961;" glyph-name="settings-bars" d="M764.252 285.696v-133.021h189.598v133.021zM70.060 285.715v-133.017h189.595v133.017zM420.167 505.934v-133.019h189.674v133.019zM810.134 960h97.828v-637.611h82.576v-206.406h-82.576v-178.158h-97.828v178.158h-82.581v206.406h82.581zM466.112 960h97.84v-417.37h82.517v-206.407h-82.517v-400.367h-97.84v400.367h-82.581v206.407h82.581zM116.005 960h97.775v-637.593h82.57v-206.401h-82.57v-180.15h-97.775v180.15h-82.64v206.401h82.64z" />
-<glyph unicode="&#xe962;" glyph-name="shop" d="M675.041 184.16c54.269 0 98.415-45.251 98.415-100.877 0-55.616-44.146-100.867-98.415-100.867-54.301 0-98.497 45.251-98.497 100.867 0 55.626 44.196 100.877 98.497 100.877zM201.965 184.16c54.274 0 98.419-45.251 98.419-100.877 0-55.616-44.145-100.867-98.419-100.867-54.24 0-98.365 45.251-98.365 100.867 0 55.626 44.124 100.877 98.365 100.877zM675.23 465.57c-19.584 0-36.136-14.043-39.354-33.374l-13.231-79.96c-1.467-8.79 1.054-17.789 6.886-24.654 6.219-7.354 15.418-11.573 25.218-11.573h5.022c19.282 0 36.188 12.792 41.125 31.114l2.904 10.854c5.243 19.261 11.794 43.469 18.96 72.074 2.094 8.397 0.23 17.166-5.134 24.043-5.614 7.186-14.447 11.477-23.69 11.477zM514.384 465.57c-19.383 0-35.165-15.77-35.165-35.146v-84.115c0-16.707 13.73-30.301 30.573-30.301 16.635 0 30.709 12.021 33.448 28.592l14.042 84.752c1.499 9.042-1.051 18.238-6.958 25.229-5.949 6.981-14.605 10.989-23.762 10.989zM354.736 465.57c-9.155 0-17.821-4.008-23.759-10.989-5.906-6.99-8.458-16.187-6.958-25.219l13.915-84.749c2.742-16.574 16.835-28.605 33.511-28.605 16.824 0 30.533 13.605 30.533 30.323v84.093c0 19.376-15.781 35.146-35.165 35.146zM183.028 465.57c-9.144 0-17.626-4.125-23.237-11.342-5.605-7.178-7.564-16.376-5.334-25.21 7.123-28.418 13.644-52.49 18.822-71.603l2.363-8.782c5.168-19.208 21.688-32.624 40.149-32.624h13.040c8.73 0 17.011 3.843 22.707 10.562 5.981 7.062 8.542 16.419 7.013 25.666l-13.232 79.96c-3.208 19.331-19.747 33.374-39.354 33.374zM710.22 687.863c-19.227 0-35.48-14.030-38.685-33.376l-12.094-73.25c-1.491-9.042 1.042-18.248 6.968-25.229 5.936-6.978 14.584-10.99 23.739-10.99h27.104c19.458 0 36.325 12.854 40.991 31.261 5.333 21.146 10.406 39.822 14.895 56.387l4.877 18.102c2.363 8.802 0.499 18.010-5.074 25.283-5.781 7.499-14.562 11.811-24.093 11.811zM513.864 687.863c-19.093 0-34.645-15.771-34.645-35.157v-72.543c0-19.374 15.783-35.146 35.165-35.146h26.981c19.603 0 36.157 14.032 39.365 33.346l12.187 73.269c1.467 8.875-1.030 17.907-6.875 24.79-6.155 7.274-15.227 11.44-24.875 11.44zM320.135 687.863c-9.637 0-18.688-4.166-24.856-11.44-5.843-6.883-8.365-15.934-6.874-24.79l12.197-73.269c3.19-19.314 19.751-33.346 39.367-33.346h26.845c19.384 0 35.165 15.771 35.165 35.146v72.543c0 19.386-15.512 35.157-34.573 35.157zM127.082 687.863c-9.326 0-18.211-4.342-23.793-11.616-5.302-6.906-7.073-15.654-4.824-24.019l5.333-19.75c4.398-16.208 9.366-34.45 14.595-55.032 4.874-19.093 21.854-32.427 41.304-32.427h31.469c9.174 0 17.832 4.013 23.759 10.99 5.928 6.981 8.459 16.187 6.979 25.229l-12.134 73.25c-3.178 19.346-20 33.376-39.97 33.376zM890.503 913.52l99.273-0.344c18.875-0.043 34.24-15.459 34.24-34.323s-15.344-34.198-34.199-34.198h-54.24c-19.595 0-36.532-13.293-41.208-32.314l-130.064-531.104c-6.438-26.291-29.824-44.645-56.885-44.645h-537.891c-27.083 0-50.594 18.342-57.178 44.615l-111.365 445.646c-2.447 9.792-0.282 19.96 5.896 27.906 6.219 7.938 15.563 12.491 25.656 12.491h741.183c19.563 0 36.594 13.217 41.439 32.154l17.875 69.688c6.707 26.158 30.259 44.428 57.468 44.428z" />
-<glyph unicode="&#xe963;" glyph-name="shop3" d="M231.45 80.224c39.711 0 71.942-32.217 71.942-71.842 0-39.707-32.231-71.822-71.942-71.822-39.523 0-71.754 32.115-71.754 71.822 0 39.625 32.231 71.842 71.754 71.842zM469.339 80.224c39.521 0 71.749-32.217 71.749-71.842 0-39.707-32.228-71.822-71.749-71.822-39.706 0-71.915 32.115-71.915 71.822 0 39.625 32.209 71.842 71.915 71.842zM475.264 398.752v-71.132h65.494c1.541 0 2.938 0.522 4.333 1.312l21.903 69.82zM316.784 398.752v-71.132h106.928v71.132zM192.76 398.752l33.12-71.132h39.352v71.132zM475.264 517.616v-67.392h107.877l21.142 67.392zM316.784 517.616v-67.392h106.928v67.392zM137.416 517.616l31.379-67.392h96.438v67.392zM475.264 640.298v-71.146h145.186l18.849 60.083c1.397 4.365 2.272 8.011 2.792 11.064zM316.784 640.298v-71.146h106.928v71.146zM82.025 640.298c0.52-2.792 1.375-5.926 2.604-9.312l28.791-61.835h151.812v71.146zM847.078 959.44h137.417c21.938 0 39.522-17.68 39.522-39.616 0-21.864-17.584-39.624-39.522-39.624h-137.417c-32.395 0-43-6.010-55.563-48.677-13.229-45.189-185.458-631.483-185.458-631.483-0.354-1.304-0.875-2.614-1.395-3.834-1.75-4.437-45.647-108.573-155.522-108.573h-310.501c-21.938 0-39.709 17.762-39.709 39.616s17.771 39.613 39.709 39.613h310.501c52.083 0 77.335 48.939 81.688 57.991 1.031 3.54 3.155 10.797 6.183 21.133l0.037 0.127h-321.291c-40.73 0-59.709 34.229-63.543 47.021l-142.293 305.364c-21.958 52.862-11.146 123.215 70.021 123.215 91.417 0 539.171 0 575.233 0 5.658 0 11.715-0.68 17.809-2.164l2.85-0.77 0.565 1.921c20.32 69.132 35.573 120.978 39.2 133.197 15.333 52.25 43.019 105.544 131.479 105.544z" />
-<glyph unicode="&#xe964;" glyph-name="shoppingcard" d="M572.606 148.691c32.177 0 58.388-26.226 58.388-58.473 0-32.311-26.211-58.452-58.388-58.452-32.306 0-58.519 26.14-58.519 58.452 0 32.247 26.213 58.473 58.519 58.473zM378.999 148.691c32.31 0 58.545-26.226 58.545-58.473 0-32.311-26.235-58.452-58.545-58.452-32.159 0-58.396 26.14-58.396 58.452 0 32.247 26.237 58.473 58.396 58.473zM577.429 407.917v-57.893h53.288c1.249 0 2.413 0.42 3.532 1.067l17.83 56.826zM448.446 407.917v-57.893h87.015v57.893zM347.525 407.917l26.956-57.893h32.011v57.893zM577.429 504.643v-54.839h87.792l17.206 54.839zM448.446 504.643v-54.839h87.015v54.839zM302.487 504.643l25.535-54.839h78.471v54.839zM577.429 604.49v-57.895h118.161l15.341 48.893c1.12 3.555 1.853 6.518 2.261 9.002zM448.446 604.49v-57.895h87.015v57.895zM233.622 747.044l-105.484-78.099-30.286 40.897-27.313-20.206 50.491-68.235 132.82 98.341zM162.561 854.308c89.776 0 162.538-72.784 162.538-162.551 0-89.781-72.762-162.565-162.538-162.565-89.778 0-162.561 72.784-162.561 162.565 0 89.767 72.783 162.551 162.561 162.551zM880.022 864.217h111.834c17.836 0 32.16-14.388 32.16-32.235 0-17.802-14.324-32.257-32.16-32.257h-111.834c-26.364 0-35.002-4.889-45.232-39.613-10.771-36.769-150.909-513.916-150.909-513.916-0.301-1.067-0.731-2.134-1.163-3.125-1.421-3.608-37.133-88.359-126.567-88.359h-252.662c-17.878 0-32.331 14.455-32.331 32.237 0 17.792 14.453 32.245 32.331 32.245h252.662c42.39 0 62.939 39.825 66.493 47.194 0.839 2.881 2.566 8.787 5.030 17.199l0.027 0.093h-261.468c-33.149 0-48.571 27.862-51.716 38.266l-85.729 183.992 1.535 0.521c24.159 8.864 46.117 22.326 64.81 39.321l0.855 0.815h110.506v57.895h-67.075l0.927 1.808c8.321 17.246 14.206 35.88 17.204 55.453l1.147 8.998h5.971c135.386 0 337.628 0 359.187 0 4.604 0 9.534-0.554 14.492-1.762l2.307-0.623 0.459 1.563c16.537 56.262 28.951 98.455 31.901 108.4 12.493 42.521 35.024 85.891 107.009 85.891z" />
-<glyph unicode="&#xe965;" glyph-name="stripe" d="M694.731 489.845c-8.948 0.084-18.745-5.26-18.745-5.26l-1.403-105.555c14.047-4.923 22.475 0.708 22.475 0.708 22.535 17.597 11.999 94.995 11.999 94.995-0.922 11.699-7.367 15.047-14.326 15.112zM907.050 501.474c-9.192 0-16.685-7.364-16.685-16.449v-34.449h33.312v34.449c0 9.085-7.435 16.449-16.627 16.449zM481.766 547.221h82.327v-220.962h-82.327zM82.936 548.461c33.29 0.549 61.325-10.628 61.325-10.628l-1.873-53.949c-15.513 5.631-40.803 8.441-40.803 8.441-34.715 0.474-15.513-22.514-15.513-22.514 63.81-26.266 64.747-51.139 64.747-51.139 16.45-76.463-37.525-92.883-37.525-92.883-33.31-16.414-107.423 4.689-107.423 4.689v56.77c43.145-15.952 65.683-7.51 65.683-7.51 14.518 18.762-8.957 27.677-8.957 27.677-3.747 0.474-28.568 13.604-28.568 13.604-68.962 52.544-11.767 108.84-11.767 108.84 18.836 13.72 40.701 18.271 60.675 18.601zM445.426 548.622c10.153-0.124 17.783-2.819 17.783-2.819v-67.546c-43.142 15.946-54.381-5.169-54.381-5.169l-1.405-147.76h-77.913v220.949l61.464 0.234c10.068-6.562 13.639-21.349 13.639-21.349 10.537 19.529 27.76 23.619 40.813 23.459zM720.792 549.035c3.791 0.018 7.595-0.259 11.385-0.849 5.327-0.831 10.536-2.201 15.512-4.226 2.341-0.96 4.624-2.060 6.848-3.272 5.853-3.208 11.589-8.406 15.277-14.026 4.331-6.761 8.487-13.938 11.706-21.319 4.564-10.513 6.965-21.934 8.487-33.261 2.106-15.594 1.931-31.37 0.176-46.988-2.342-21.156-7.902-41.597-14.457-61.792-4.157-12.855-12.819-23.86-24.174-30.884-12.408-7.686-26.456-10.841-40.972-11.298-11.823-0.381-23.881 1.61-35.293 4.437v-78.815h-79.546l0.703 299.771h64.033l10.595-16.18c-0.76 1.095 15.687 10.484 16.739 11.005 10.362 4.926 21.611 7.642 32.983 7.698zM906.006 550.439c117.987-0.585 90.15-139.739 90.15-139.739l-105.556-0.345c0.703-23.579 18.325-28.502 18.325-28.502 19.671-4.221 75.991 6.328 75.991 6.328v-55.581c-156.959-52.783-171.009 62.623-171.009 62.623-23.945 141.432 66.507 153.403 66.507 153.403 9.213 1.275 17.727 1.852 25.593 1.813zM270.934 611.958l-1.405-67.084h44.087l-11.241-50.67h-31.441v-90.066c-1.874-37.066 41.745-20.646 41.745-20.646v-54.885c-119.674-36.124-120.142 44.102-120.142 44.102l-0.937 121.495h-28.338v50.67h28.396l9.368 49.254zM523.277 649.253c21.020 0 38-17.017 38-38.003s-16.98-37.997-38-37.997c-20.961 0-38 17.011-38 37.997s17.038 38.003 38 38.003z" />
-<glyph unicode="&#xe966;" glyph-name="tag" d="M193.384 831.891c11.23-0.456 22.267-5.209 30.426-14.138 16.509-18.050 15.357-45.893-2.687-62.215-17.852-16.514-45.687-15.17-62.003 2.688-16.509 17.858-15.357 45.701 2.687 62.023 8.926 8.257 20.348 12.097 31.578 11.641zM191.18 864.915c-18.448-0.093-36.916-6.8-51.586-20.299-31.298-28.798-33.602-77.371-4.8-108.667 28.802-31.484 77.379-33.405 108.869-4.8 31.298 28.798 33.41 77.371 4.608 108.86-15.301 16.624-36.183 25.013-57.091 24.907zM202.764 960l225.614-31.873 1.538 1.153 574.883-626.642-399.96-366.696-574.886 626.839 1.538 1.148-12.289 227.506z" />
-<glyph unicode="&#xe967;" glyph-name="video" d="M838.739 328.251v-78.174h125.48v78.174zM69.984 328.251v-78.174h125.469v78.174zM838.739 487.963v-78.174h125.48v78.174zM69.984 487.963v-78.174h125.469v78.174zM255.263 628.044v-368.956h513.411v368.956zM838.739 647.674v-78.213h125.48v78.213zM69.984 647.674v-78.213h125.469v78.213zM0 791.666h70.3v-53.442h125.555v53.442h59.408v-95.938h513.411v95.938h70.453v-53.442h125.493v53.442h59.398v-687.333h-62.17v54.096h-125.487v-54.096h-67.687v87.078h-513.411v-87.078h-62.152v54.096h-125.47v-54.096h-67.641z" />
-<glyph unicode="&#xe968;" glyph-name="win10" d="M468.218 421.434l555.782-0.915-0.144-461.101-554.851 74.509zM0.305 426.777l417.968-2.594 0.321-384.454-418.273 54.812zM418.465 852.454l0.193-383.993-418.273-2.291-0.385 332.083zM1023.856 936.582v-463.236l-554.851-4.276v390.409z" />
+<glyph unicode="&#xe95e;" glyph-name="pc1" d="M733.791 206.687c-24.045-1.007-43.562-25.904-43.562-55.682 0-29.759 19.517-53.082 43.562-52.077 24.066 0.988 43.583 25.908 43.583 55.687 0 29.732-19.517 53.057-43.583 52.072zM725.783 323.154c-15.207-0.615-27.524-16.368-27.524-35.205 0-18.818 12.317-33.543 27.524-32.931 15.229 0.637 27.589 16.39 27.589 35.205 0 18.818-12.36 33.563-27.589 32.931zM166.106 344.351v-101.584l90.408-40.653v109.727zM787.832 570.544l-201.901-5.864 0.743-85.439 202.689 9.037zM187.417 637.953l-21.311-68.064 20.305-78.222h41.638l16.256 74.15-16.256 72.136zM586.674 715.977v-101.893l282.374 2.428v89.050zM586.062 861.608v-101.893l282.986-15.666v97.102zM518.083 960l384.025-32.009v-928.874l-384.025-63.168zM493.298 960v-1024.050l-371.389 205.733v737.537z" />
+<glyph unicode="&#xe95f;" glyph-name="reporttemplate" d="M566.991 94.581l24.947-158.581-147.542 68.422zM517.894 361.402h228.958v-47.368h-228.958zM319.878 436.486l212.832-289.239-122.666-90.235-212.761 289.283zM229.507 504.913c18.39-0.372 36.487-7.225 50.633-19.991l-122.601-89.892c-15.254 32.737-5.821 72.669 24.449 94.857 13.254 9.708 28.563 14.605 43.839 15.015 1.228 0.033 2.455 0.037 3.681 0.012zM434.653 526.898h312.2v-47.313h-312.2zM371.173 701.245h375.68v-47.35h-375.68zM162.176 960h539.727l171.727-139.704v-39.344h-0.166v-750.301c0-39.464-32.003-71.441-71.441-71.441h-189.572l-11.262 71.441h200.834v750.301h-59.349c-26.326 0-47.66 21.336-47.66 47.639v59.917h-461.394v-360.274c-1.901 0.115-3.754 0.518-5.678 0.518-21.692 0-42.481-6.815-60.062-19.672-2.067-1.52-3.778-3.35-5.702-5.012v384.44z" />
+<glyph unicode="&#xe960;" glyph-name="rndcheck-not" d="M102.028 909.967c-28.698 0-51.995-23.297-51.995-52.076v-819.786c0-28.777 23.297-52.073 51.995-52.073h819.943c28.7 0 51.994 23.295 51.994 52.073v819.786c0 28.779-23.294 52.076-51.994 52.076zM103.709 960h816.581c57.24 0 103.71-46.552 103.71-103.709v-816.583c0-57.159-46.47-103.708-103.71-103.708h-816.581c-57.238 0-103.709 46.549-103.709 103.708v816.583c0 57.157 46.471 103.709 103.709 103.709z" />
+<glyph unicode="&#xe961;" glyph-name="rndcheck-ok" d="M738.661 656.323l71.412-81.779-381.889-334.986-214.096 248.151 82.33 70.728 142.483-165.486zM102.083 909.962c-28.745 0-52.044-23.299-52.044-52.071v-819.9c0-28.77 23.299-52.072 52.044-52.072h819.955c28.746 0 52.044 23.302 52.044 52.072v819.9c0 28.772-23.298 52.071-52.044 52.071zM103.698 960h816.723c57.18 0 103.7-46.549 103.7-103.727v-816.666c0-57.184-46.52-103.727-103.7-103.727h-816.723c-57.178 0-103.698 46.544-103.698 103.727v816.666c0 57.178 46.52 103.727 103.698 103.727z" />
+<glyph unicode="&#xe962;" glyph-name="sale" d="M482.645 428.889v-12.534c0-11.389-3.407-20.83-10.136-28.275-6.811-7.445-15.615-11.184-26.375-11.184-7.725 0-13.915 2.088-18.481 6.274-4.488 4.171-6.812 9.552-6.812 16.083 0 14.432 9.386 22.842 27.995 25.273zM769.582 492.704c21.599 0 32.357-13.331 32.357-39.997h-68.538c1.455 11.391 5.565 20.903 12.295 28.545 6.731 7.641 14.706 11.451 23.886 11.451zM769.996 531.435c-26.253 0-48.31-9.034-66.252-27.090-17.946-18.067-26.915-42.552-26.915-73.453 0-29.82 8.345-53.060 24.92-69.715 16.616-16.665 40.002-25.003 69.994-25.003 27.539 0 49.927 4.6 67.166 13.81v41.461c-15.536-9.71-33.565-14.549-54.001-14.549-32.191 0-49.223 13.52-51.133 40.538h121.456v24.195c0 27.63-7.435 49.508-22.262 65.612-14.872 16.137-35.849 24.194-62.973 24.194zM457.058 531.435c-11.38 0-24.049-1.578-37.922-4.734-13.915-3.158-24.839-6.792-32.771-10.903v-43.269c19.937 13.208 41.036 19.803 63.176 19.803 22.138 0 33.104-10.167 33.104-30.54l-50.508-6.728c-42.782-5.565-64.214-26.417-64.214-62.54 0-17.070 5.192-30.745 15.575-40.994 10.343-10.239 24.588-15.357 42.616-15.357 24.505 0 42.99 10.424 55.451 31.265h0.788v-26.728h54.29v111.26c0 52.977-26.544 79.465-79.585 79.465zM267.981 605.811c-13.832 0-26.918-1.485-39.296-4.467-12.377-2.958-23.219-7.601-32.65-13.904-9.387-6.301-16.78-14.329-22.304-24.080-5.4-9.762-8.184-21.422-8.184-35.005 0-17.332 5.027-32.118 14.996-44.362 10.052-12.243 25.213-22.617 45.567-31.101 8.058-3.27 15.493-6.481 22.387-9.636 6.855-3.147 12.921-6.418 17.946-9.805 5.026-3.404 8.973-7.091 11.88-11.101 2.865-4.007 4.363-8.545 4.363-13.634 0-3.747-0.958-7.248-2.701-10.468-1.869-3.206-4.568-5.989-8.307-8.347-3.696-2.359-8.266-4.217-13.832-5.557-5.483-1.329-12.006-1.992-19.358-1.992-12.586 0-25.046 2.211-37.423 6.635-12.381 4.434-23.844 11.069-34.354 19.906v-58.183c9.43-4.849 20.561-8.482 33.482-10.904 12.917-2.42 26.541-3.633 40.872-3.633 13.915 0 27.166 1.329 39.67 3.997 12.626 2.67 23.591 7.063 33.064 13.178 9.428 6.126 16.904 14.113 22.427 23.997 5.485 9.888 8.267 22.109 8.267 36.647 0 10.54-1.538 19.791-4.734 27.715-3.158 7.954-7.726 15.017-13.625 21.184-5.941 6.189-13.044 11.736-21.35 16.646-8.35 4.913-17.695 9.542-28.12 13.904-7.604 3.158-14.498 6.21-20.521 9.189-6.023 2.961-11.214 6.004-15.494 9.098-4.237 3.074-7.478 6.355-9.802 9.803-2.327 3.458-3.407 7.362-3.407 11.734 0 3.988 0.997 7.601 3.073 10.81 2.035 3.218 4.986 5.981 8.681 8.286 3.781 2.295 8.35 4.082 13.833 5.359 5.441 1.265 11.547 1.91 18.193 1.91 4.86 0 9.968-0.374 15.411-1.099 5.317-0.716 10.76-1.84 16.241-3.365 5.4-1.516 10.757-3.428 15.95-5.733 5.069-2.294 9.885-4.964 14.204-7.986v54.373c-8.805 3.376-18.483 5.898-28.991 7.54-10.469 1.618-22.515 2.45-36.055 2.45zM582.117 616.354v-275.651h57.5v275.651zM625.263 954.894c9.98 0.12 19.785-4.458 26.096-12.904l67.454-89.873 112.276-4.426c15.325-0.602 28.077-11.92 30.487-27.019l17.944-110.924 97.402-56.106c13.21-7.632 19.233-23.571 14.373-38.098l-35.682-106.54 60.188-94.901c8.224-12.92 6.149-29.865-4.943-40.469l-81.079-77.745 9.138-111.973c1.246-15.285-8.431-29.283-23.136-33.541l-107.912-31.142-44.028-103.384c-5.94-14.124-21.102-22.171-36.055-18.961l-110.070 22.553-86.937-71.131c-5.9-4.839-13.168-7.268-20.354-7.268-7.27 0-14.452 2.429-20.435 7.268l-86.936 71.131-110.114-22.553c-14.912-3.251-30.072 4.881-36.012 18.961l-43.946 103.384-107.912 31.142c-14.787 4.259-24.465 18.256-23.219 33.541l9.138 111.973-81.079 77.745c-11.090 10.604-13.083 27.549-4.901 40.469l60.104 94.901-35.639 106.54c-4.86 14.527 1.163 30.466 14.455 38.098l97.322 56.106 17.942 110.924c2.408 15.099 15.161 26.417 30.489 27.019l112.273 4.426 67.456 89.873c9.179 12.243 25.753 16.345 39.502 9.751l101.514-48.255 101.433 48.255c4.297 2.074 8.87 3.099 13.406 3.153z" />
+<glyph unicode="&#xe963;" glyph-name="settings-bars" d="M764.252 285.696v-133.021h189.598v133.021zM70.060 285.715v-133.017h189.595v133.017zM420.167 505.934v-133.019h189.674v133.019zM810.134 960h97.828v-637.611h82.576v-206.406h-82.576v-178.158h-97.828v178.158h-82.581v206.406h82.581zM466.112 960h97.84v-417.37h82.517v-206.407h-82.517v-400.367h-97.84v400.367h-82.581v206.407h82.581zM116.005 960h97.775v-637.593h82.57v-206.401h-82.57v-180.15h-97.775v180.15h-82.64v206.401h82.64z" />
+<glyph unicode="&#xe964;" glyph-name="shop" d="M675.041 184.16c54.269 0 98.415-45.251 98.415-100.877 0-55.616-44.146-100.867-98.415-100.867-54.301 0-98.497 45.251-98.497 100.867 0 55.626 44.196 100.877 98.497 100.877zM201.965 184.16c54.274 0 98.419-45.251 98.419-100.877 0-55.616-44.145-100.867-98.419-100.867-54.24 0-98.365 45.251-98.365 100.867 0 55.626 44.124 100.877 98.365 100.877zM675.23 465.57c-19.584 0-36.136-14.043-39.354-33.374l-13.231-79.96c-1.467-8.79 1.054-17.789 6.886-24.654 6.219-7.354 15.418-11.573 25.218-11.573h5.022c19.282 0 36.188 12.792 41.125 31.114l2.904 10.854c5.243 19.261 11.794 43.469 18.96 72.074 2.094 8.397 0.23 17.166-5.134 24.043-5.614 7.186-14.447 11.477-23.69 11.477zM514.384 465.57c-19.383 0-35.165-15.77-35.165-35.146v-84.115c0-16.707 13.73-30.301 30.573-30.301 16.635 0 30.709 12.021 33.448 28.592l14.042 84.752c1.499 9.042-1.051 18.238-6.958 25.229-5.949 6.981-14.605 10.989-23.762 10.989zM354.736 465.57c-9.155 0-17.821-4.008-23.759-10.989-5.906-6.99-8.458-16.187-6.958-25.219l13.915-84.749c2.742-16.574 16.835-28.605 33.511-28.605 16.824 0 30.533 13.605 30.533 30.323v84.093c0 19.376-15.781 35.146-35.165 35.146zM183.028 465.57c-9.144 0-17.626-4.125-23.237-11.342-5.605-7.178-7.564-16.376-5.334-25.21 7.123-28.418 13.644-52.49 18.822-71.603l2.363-8.782c5.168-19.208 21.688-32.624 40.149-32.624h13.040c8.73 0 17.011 3.843 22.707 10.562 5.981 7.062 8.542 16.419 7.013 25.666l-13.232 79.96c-3.208 19.331-19.747 33.374-39.354 33.374zM710.22 687.863c-19.227 0-35.48-14.030-38.685-33.376l-12.094-73.25c-1.491-9.042 1.042-18.248 6.968-25.229 5.936-6.978 14.584-10.99 23.739-10.99h27.104c19.458 0 36.325 12.854 40.991 31.261 5.333 21.146 10.406 39.822 14.895 56.387l4.877 18.102c2.363 8.802 0.499 18.010-5.074 25.283-5.781 7.499-14.562 11.811-24.093 11.811zM513.864 687.863c-19.093 0-34.645-15.771-34.645-35.157v-72.543c0-19.374 15.783-35.146 35.165-35.146h26.981c19.603 0 36.157 14.032 39.365 33.346l12.187 73.269c1.467 8.875-1.030 17.907-6.875 24.79-6.155 7.274-15.227 11.44-24.875 11.44zM320.135 687.863c-9.637 0-18.688-4.166-24.856-11.44-5.843-6.883-8.365-15.934-6.874-24.79l12.197-73.269c3.19-19.314 19.751-33.346 39.367-33.346h26.845c19.384 0 35.165 15.771 35.165 35.146v72.543c0 19.386-15.512 35.157-34.573 35.157zM127.082 687.863c-9.326 0-18.211-4.342-23.793-11.616-5.302-6.906-7.073-15.654-4.824-24.019l5.333-19.75c4.398-16.208 9.366-34.45 14.595-55.032 4.874-19.093 21.854-32.427 41.304-32.427h31.469c9.174 0 17.832 4.013 23.759 10.99 5.928 6.981 8.459 16.187 6.979 25.229l-12.134 73.25c-3.178 19.346-20 33.376-39.97 33.376zM890.503 913.52l99.273-0.344c18.875-0.043 34.24-15.459 34.24-34.323s-15.344-34.198-34.199-34.198h-54.24c-19.595 0-36.532-13.293-41.208-32.314l-130.064-531.104c-6.438-26.291-29.824-44.645-56.885-44.645h-537.891c-27.083 0-50.594 18.342-57.178 44.615l-111.365 445.646c-2.447 9.792-0.282 19.96 5.896 27.906 6.219 7.938 15.563 12.491 25.656 12.491h741.183c19.563 0 36.594 13.217 41.439 32.154l17.875 69.688c6.707 26.158 30.259 44.428 57.468 44.428z" />
+<glyph unicode="&#xe965;" glyph-name="shop3" d="M231.45 80.224c39.711 0 71.942-32.217 71.942-71.842 0-39.707-32.231-71.822-71.942-71.822-39.523 0-71.754 32.115-71.754 71.822 0 39.625 32.231 71.842 71.754 71.842zM469.339 80.224c39.521 0 71.749-32.217 71.749-71.842 0-39.707-32.228-71.822-71.749-71.822-39.706 0-71.915 32.115-71.915 71.822 0 39.625 32.209 71.842 71.915 71.842zM475.264 398.752v-71.132h65.494c1.541 0 2.938 0.522 4.333 1.312l21.903 69.82zM316.784 398.752v-71.132h106.928v71.132zM192.76 398.752l33.12-71.132h39.352v71.132zM475.264 517.616v-67.392h107.877l21.142 67.392zM316.784 517.616v-67.392h106.928v67.392zM137.416 517.616l31.379-67.392h96.438v67.392zM475.264 640.298v-71.146h145.186l18.849 60.083c1.397 4.365 2.272 8.011 2.792 11.064zM316.784 640.298v-71.146h106.928v71.146zM82.025 640.298c0.52-2.792 1.375-5.926 2.604-9.312l28.791-61.835h151.812v71.146zM847.078 959.44h137.417c21.938 0 39.522-17.68 39.522-39.616 0-21.864-17.584-39.624-39.522-39.624h-137.417c-32.395 0-43-6.010-55.563-48.677-13.229-45.189-185.458-631.483-185.458-631.483-0.354-1.304-0.875-2.614-1.395-3.834-1.75-4.437-45.647-108.573-155.522-108.573h-310.501c-21.938 0-39.709 17.762-39.709 39.616s17.771 39.613 39.709 39.613h310.501c52.083 0 77.335 48.939 81.688 57.991 1.031 3.54 3.155 10.797 6.183 21.133l0.037 0.127h-321.291c-40.73 0-59.709 34.229-63.543 47.021l-142.293 305.364c-21.958 52.862-11.146 123.215 70.021 123.215 91.417 0 539.171 0 575.233 0 5.658 0 11.715-0.68 17.809-2.164l2.85-0.77 0.565 1.921c20.32 69.132 35.573 120.978 39.2 133.197 15.333 52.25 43.019 105.544 131.479 105.544z" />
+<glyph unicode="&#xe966;" glyph-name="shoppingcard" d="M572.606 148.691c32.177 0 58.388-26.226 58.388-58.473 0-32.311-26.211-58.452-58.388-58.452-32.306 0-58.519 26.14-58.519 58.452 0 32.247 26.213 58.473 58.519 58.473zM378.999 148.691c32.31 0 58.545-26.226 58.545-58.473 0-32.311-26.235-58.452-58.545-58.452-32.159 0-58.396 26.14-58.396 58.452 0 32.247 26.237 58.473 58.396 58.473zM577.429 407.917v-57.893h53.288c1.249 0 2.413 0.42 3.532 1.067l17.83 56.826zM448.446 407.917v-57.893h87.015v57.893zM347.525 407.917l26.956-57.893h32.011v57.893zM577.429 504.643v-54.839h87.792l17.206 54.839zM448.446 504.643v-54.839h87.015v54.839zM302.487 504.643l25.535-54.839h78.471v54.839zM577.429 604.49v-57.895h118.161l15.341 48.893c1.12 3.555 1.853 6.518 2.261 9.002zM448.446 604.49v-57.895h87.015v57.895zM233.622 747.044l-105.484-78.099-30.286 40.897-27.313-20.206 50.491-68.235 132.82 98.341zM162.561 854.308c89.776 0 162.538-72.784 162.538-162.551 0-89.781-72.762-162.565-162.538-162.565-89.778 0-162.561 72.784-162.561 162.565 0 89.767 72.783 162.551 162.561 162.551zM880.022 864.217h111.834c17.836 0 32.16-14.388 32.16-32.235 0-17.802-14.324-32.257-32.16-32.257h-111.834c-26.364 0-35.002-4.889-45.232-39.613-10.771-36.769-150.909-513.916-150.909-513.916-0.301-1.067-0.731-2.134-1.163-3.125-1.421-3.608-37.133-88.359-126.567-88.359h-252.662c-17.878 0-32.331 14.455-32.331 32.237 0 17.792 14.453 32.245 32.331 32.245h252.662c42.39 0 62.939 39.825 66.493 47.194 0.839 2.881 2.566 8.787 5.030 17.199l0.027 0.093h-261.468c-33.149 0-48.571 27.862-51.716 38.266l-85.729 183.992 1.535 0.521c24.159 8.864 46.117 22.326 64.81 39.321l0.855 0.815h110.506v57.895h-67.075l0.927 1.808c8.321 17.246 14.206 35.88 17.204 55.453l1.147 8.998h5.971c135.386 0 337.628 0 359.187 0 4.604 0 9.534-0.554 14.492-1.762l2.307-0.623 0.459 1.563c16.537 56.262 28.951 98.455 31.901 108.4 12.493 42.521 35.024 85.891 107.009 85.891z" />
+<glyph unicode="&#xe967;" glyph-name="stripe" d="M694.731 489.845c-8.948 0.084-18.745-5.26-18.745-5.26l-1.403-105.555c14.047-4.923 22.475 0.708 22.475 0.708 22.535 17.597 11.999 94.995 11.999 94.995-0.922 11.699-7.367 15.047-14.326 15.112zM907.050 501.474c-9.192 0-16.685-7.364-16.685-16.449v-34.449h33.312v34.449c0 9.085-7.435 16.449-16.627 16.449zM481.766 547.221h82.327v-220.962h-82.327zM82.936 548.461c33.29 0.549 61.325-10.628 61.325-10.628l-1.873-53.949c-15.513 5.631-40.803 8.441-40.803 8.441-34.715 0.474-15.513-22.514-15.513-22.514 63.81-26.266 64.747-51.139 64.747-51.139 16.45-76.463-37.525-92.883-37.525-92.883-33.31-16.414-107.423 4.689-107.423 4.689v56.77c43.145-15.952 65.683-7.51 65.683-7.51 14.518 18.762-8.957 27.677-8.957 27.677-3.747 0.474-28.568 13.604-28.568 13.604-68.962 52.544-11.767 108.84-11.767 108.84 18.836 13.72 40.701 18.271 60.675 18.601zM445.426 548.622c10.153-0.124 17.783-2.819 17.783-2.819v-67.546c-43.142 15.946-54.381-5.169-54.381-5.169l-1.405-147.76h-77.913v220.949l61.464 0.234c10.068-6.562 13.639-21.349 13.639-21.349 10.537 19.529 27.76 23.619 40.813 23.459zM720.792 549.035c3.791 0.018 7.595-0.259 11.385-0.849 5.327-0.831 10.536-2.201 15.512-4.226 2.341-0.96 4.624-2.060 6.848-3.272 5.853-3.208 11.589-8.406 15.277-14.026 4.331-6.761 8.487-13.938 11.706-21.319 4.564-10.513 6.965-21.934 8.487-33.261 2.106-15.594 1.931-31.37 0.176-46.988-2.342-21.156-7.902-41.597-14.457-61.792-4.157-12.855-12.819-23.86-24.174-30.884-12.408-7.686-26.456-10.841-40.972-11.298-11.823-0.381-23.881 1.61-35.293 4.437v-78.815h-79.546l0.703 299.771h64.033l10.595-16.18c-0.76 1.095 15.687 10.484 16.739 11.005 10.362 4.926 21.611 7.642 32.983 7.698zM906.006 550.439c117.987-0.585 90.15-139.739 90.15-139.739l-105.556-0.345c0.703-23.579 18.325-28.502 18.325-28.502 19.671-4.221 75.991 6.328 75.991 6.328v-55.581c-156.959-52.783-171.009 62.623-171.009 62.623-23.945 141.432 66.507 153.403 66.507 153.403 9.213 1.275 17.727 1.852 25.593 1.813zM270.934 611.958l-1.405-67.084h44.087l-11.241-50.67h-31.441v-90.066c-1.874-37.066 41.745-20.646 41.745-20.646v-54.885c-119.674-36.124-120.142 44.102-120.142 44.102l-0.937 121.495h-28.338v50.67h28.396l9.368 49.254zM523.277 649.253c21.020 0 38-17.017 38-38.003s-16.98-37.997-38-37.997c-20.961 0-38 17.011-38 37.997s17.038 38.003 38 38.003z" />
+<glyph unicode="&#xe968;" glyph-name="tag" d="M193.384 831.891c11.23-0.456 22.267-5.209 30.426-14.138 16.509-18.050 15.357-45.893-2.687-62.215-17.852-16.514-45.687-15.17-62.003 2.688-16.509 17.858-15.357 45.701 2.687 62.023 8.926 8.257 20.348 12.097 31.578 11.641zM191.18 864.915c-18.448-0.093-36.916-6.8-51.586-20.299-31.298-28.798-33.602-77.371-4.8-108.667 28.802-31.484 77.379-33.405 108.869-4.8 31.298 28.798 33.41 77.371 4.608 108.86-15.301 16.624-36.183 25.013-57.091 24.907zM202.764 960l225.614-31.873 1.538 1.153 574.883-626.642-399.96-366.696-574.886 626.839 1.538 1.148-12.289 227.506z" />
 <glyph unicode="&#xe969;" glyph-name="stopwatches" d="M62.16 549.79h132v-60.078h-132v60.078zM62.16 280.402h132v-60.078h-132v60.078zM0 415.096h194.15v-60.078h-194.15v60.078zM951.526 629.82l29.992-29.992 42.48 42.48-102.466 102.466-42.48-42.48 29.992-29.992-41.594-41.594c-47.856 43.010-107.662 72.958-173.762 84.208v74.442h50.776v82.622h-218.658v-82.62h50.776v-74.442c-164.062-27.922-289.372-171.078-289.372-342.97 0-191.848 156.078-347.926 347.926-347.926s347.926 156.078 347.926 347.926c0 81.046-27.858 155.708-74.496 214.916l42.96 42.956zM635.136 105.62c-146.852 0-266.324 119.472-266.324 266.324s119.472 266.324 266.324 266.324 266.324-119.472 266.324-266.324c0-146.852-119.472-266.324-266.324-266.324zM635.136 578.192c-113.724 0-206.246-92.522-206.246-206.246s92.522-206.246 206.246-206.246 206.246 92.522 206.246 206.246-92.522 206.246-206.246 206.246zM656.378 350.704l-42.48 42.48 85.738 85.738 42.48-42.48-85.738-85.738z" />
 <glyph unicode="&#xe96a;" glyph-name="paragraph" d="M780.568 485.99c-17.424 50.36-54.372 91.13-104.034 114.806-1.222 0.582-2.472 1.102-3.748 1.558l-148.456 53.074c-0.784 0.28-1.576 0.536-2.374 0.766-0.736 0.212-1.588 0.464-2.524 0.746-9.322 4.148-18.812 7.542-28.394 10.206-38.126 15.86-94.174 48.272-94.174 101.734 0 61.272 51.14 111.12 114 111.12h21c65.608 0 117-49.198 117-112 0-22.092 17.908-40 40-40s40 17.908 40 40c0 51.994-20.682 100.546-58.236 136.716-37.010 35.652-86.29 55.284-138.76 55.284h-21c-106.972 0-194-85.736-194-191.12 0-39.972 14.924-77.082 43.458-108.756-45.138-17.822-83.974-51.508-106.882-97.78-23.454-47.376-27.010-100.522-10.012-149.646 17.424-50.36 54.372-91.13 104.034-114.806 1.276-0.608 2.582-1.148 3.914-1.618l158.192-55.764c0.728-0.258 1.464-0.492 2.206-0.708 20.888-6.030 125.092-39.792 125.092-112.686 0-61.272-51.14-111.12-114-111.12h-21c-65.608 0-117 49.196-117 112 0 22.092-17.908 40-40 40s-40-17.908-40-40c0-51.994 20.682-100.546 58.236-136.716 37.012-35.648 86.292-55.28 138.762-55.28h21c106.972 0 194 85.736 194 191.12 0 49.424-22.808 94.474-65.958 130.28-30.148 25.016-71.24 45.922-115.81 58.938l-154.994 54.638c-29.264 14.484-50.916 38.526-61.074 67.882-9.936 28.72-7.768 59.968 6.106 87.992 25.696 51.906 84.694 77.538 139.842 64.402 8.558-3.408 17.334-6.53 26.272-9.34 2.698-1.17 5.454-2.016 8.236-2.56l144.33-51.6c29.304-14.48 50.982-38.538 61.148-67.92 9.936-28.718 7.768-59.968-6.106-87.992-9.802-19.798-1.698-43.792 18.1-53.596 5.704-2.824 11.754-4.162 17.716-4.162 14.728 0 28.9 8.17 35.878 22.262 23.458 47.374 27.012 100.522 10.014 149.646z" />
 <glyph unicode="&#xe96b;" glyph-name="support" d="M512 960c-215.883 0-391.531-175.648-391.531-391.531v-361.406c0-49.828 40.531-90.359 90.352-90.359 49.828 0 90.359 40.531 90.359 90.359v301.172c0 49.82-40.531 90.352-90.359 90.352-10.141 0-19.734-2.055-28.852-5.148 12.852 171.023 155.805 306.328 330.031 306.328 174.133 0 317.047-135.18 330.016-306.086-9.062 3.102-18.711 4.906-28.836 4.906-49.828 0-90.359-40.531-90.359-90.352v-301.172c0-49.828 40.531-90.359 90.359-90.359 10.609 0 20.648 2.172 30.117 5.547v-35.664c0-16.617-13.531-30.117-30.117-30.117h-216.375c-12.477 34.984-45.594 60.234-84.805 60.234-49.82 0-90.352-40.531-90.352-90.352s40.531-90.352 90.352-90.352c39.211 0 72.328 25.258 84.805 60.234h216.375c49.82 0 90.352 40.531 90.352 90.352 0 181.156 0 300.531 0 481.883 0 215.883-175.648 391.531-391.531 391.531zM963.766 532.805v-350.312c34.977 12.469 60.234 45.586 60.234 84.805v180.703c0 39.211-25.258 72.328-60.234 84.805zM0 448v-180.703c0-39.219 25.258-72.336 60.234-84.805v350.312c-34.977-12.477-60.234-45.594-60.234-84.805z" />
 <glyph unicode="&#xe96c;" glyph-name="mobile" d="M480.662 55.352c-12.786 0-23.172-12.453-23.172-27.832v-17.426c0-15.434 10.386-27.886 23.172-27.886h65.189c12.763 0 23.17 12.452 23.17 27.886v17.426c0 15.378-10.408 27.832-23.17 27.832zM286.313 833.5v-731.648h446.487v731.648zM415.901 918.418c-6.041 0-10.93-5.138-10.93-11.483 0-6.363 4.888-11.483 10.93-11.483h201.726c6.017 0 10.884 5.12 10.884 11.483 0 6.345-4.866 11.483-10.884 11.483zM301.18 960h421.619c33.081 0 59.963-28.233 59.963-63.104v-897.81c0-34.872-26.882-63.086-59.963-63.086h-421.619c-33.105 0-59.942 28.214-59.942 63.086v897.81c0 34.871 26.837 63.104 59.942 63.104z" />
-<glyph unicode="&#xe96d;" glyph-name="website2" d="M819.943 157.727c-26.753-53.054-60.627-98.926-99.781-134.943 65.075 31.969 121.701 78.223 165.801 134.943zM662.958 157.727c-16.128-69.199-38.352-128.222-66.546-168.015 72.772 26.672 135.959 86.671 180.969 168.015zM400.257 157.727c28.289-114.559 71.317-183.726 111.669-183.726 40.468 0 83.462 69.168 111.782 183.726zM246.652 157.727c44.915-81.343 108.052-141.343 180.874-168.015-28.163 39.759-50.404 98.816-66.484 168.015zM138.038 157.727c44.13-56.655 100.709-102.912 165.718-134.912-39.169 35.986-72.898 81.858-99.763 134.912zM885.034 413.761c-3.905-78.93-20.626-152.897-47.779-218.146h75.379c40.482 64.065 66.020 138.322 71.748 218.146zM693.169 413.761c-1.792-75.008-9.233-150.241-22.21-218.146h125.302c28.723 64.065 46.851 138.322 50.947 218.146zM368.961 413.761c1.84-81.855 10.161-155.426 22.77-218.146h240.46c12.64 62.72 20.992 136.29 22.849 218.146zM176.857 413.761c4.048-79.824 22.161-154.081 50.85-218.146h125.334c-12.977 67.905-20.432 143.138-22.162 218.146zM39.65 413.761c5.761-79.824 31.265-154.081 71.763-218.146h75.268c-27.106 65.249-43.891 139.216-47.731 218.146zM848.857 669.679c23.409-66.127 36.898-139.838 37.297-217.983h99.781c-0.625 78.688-20.514 152.832-55.138 217.983zM676.335 669.679c11.233-69.072 17.073-144.111 17.25-217.983h154.694c-0.416 78.688-14.496 152.832-39.171 217.983zM386.034 669.679c-10.8-63.775-17.425-137.199-17.616-217.983h287.164c-0.191 80.783-6.83 154.208-17.664 217.983zM214.874 669.679c-24.593-65.151-38.737-139.295-39.106-217.983h154.694c0.194 73.871 6.034 148.91 17.203 217.983zM93.269 669.679c-34.674-65.151-54.547-139.295-55.139-217.983h99.669c0.447 78.145 13.969 151.856 37.265 217.983zM303.774 873.216c-76.435-37.6-141.462-94.848-187.992-165.648h74.131c28.577 66.112 67.427 122.912 113.861 165.648zM720.131 873.264c46.513-42.736 85.346-99.584 113.892-165.696h74.212c-46.547 70.8-111.557 128.112-188.104 165.696zM596.412 906.304c32.256-45.472 56.77-116.384 73.092-198.736h123.62c-45.202 96.944-114.981 168.816-196.712 198.736zM427.526 906.304c-81.734-29.92-151.449-101.792-196.667-198.736h123.622c16.319 82.352 40.833 153.264 73.044 198.736zM511.927 922.048c-43.872 0-90.883-81.584-118.708-214.48h237.498c-27.839 132.896-74.85 214.48-118.79 214.48zM511.927 960c282.43 0 512.073-229.664 512.073-511.952 0-105.312-32.051-203.295-86.787-284.815v-5.505h-3.953c-92.469-133.759-246.747-221.727-421.334-221.727-174.502 0-328.75 87.968-421.187 221.727h-3.92v5.489c-54.771 81.504-86.82 179.456-86.82 284.832 0 282.288 229.707 511.952 511.927 511.952z" />
+<glyph unicode="&#xe96d;" glyph-name="video" d="M838.739 328.251v-78.174h125.48v78.174zM69.984 328.251v-78.174h125.469v78.174zM838.739 487.963v-78.174h125.48v78.174zM69.984 487.963v-78.174h125.469v78.174zM255.263 628.044v-368.956h513.411v368.956zM838.739 647.674v-78.213h125.48v78.213zM69.984 647.674v-78.213h125.469v78.213zM0 791.666h70.3v-53.442h125.555v53.442h59.408v-95.938h513.411v95.938h70.453v-53.442h125.493v53.442h59.398v-687.333h-62.17v54.096h-125.487v-54.096h-67.687v87.078h-513.411v-87.078h-62.152v54.096h-125.47v-54.096h-67.641z" />
 <glyph unicode="&#xe96e;" glyph-name="private-cloud" d="M511.927 591.6c42.834 0 77.607-33.418 80.607-75.5h-0.062v-79.3h-161.214v79.050c2.874 42.207 37.71 75.75 80.669 75.75zM511.927 622.080c-59.67 0-108.172-46.836-111.297-105.668h-0.166v-79.612h-29.328v-205.568h281.728v205.568h-29.264v79.3h-0.397c-2.938 58.98-51.564 105.98-111.276 105.98zM508.666 760.64c115.73 0 213.605-87.793 246.168-208.627 18.102 5.062 37.102 7.958 56.832 7.958 117.27 0 212.334-95.064 212.334-212.315 0-75.437-39.501-141.521-98.835-179.188-23.77-19.333-53.998-31-87-31.293-8.728-1.040-17.499-1.832-26.499-1.832-8.832 0-17.562 0.73-26.104 1.792h-546.728c-8.669-1.042-17.501-1.792-26.565-1.792-117.27 0-212.269 91.394-212.269 204.126 0 112.708 94.999 204.126 212.269 204.126 16.23 0 31.96-1.918 47.168-5.25 28.626 127.75 129.168 222.294 249.229 222.294z" />
 <glyph unicode="&#xe96f;" glyph-name="shield" d="M587.539 620.362c2.633-0.177 5.726-2.677 11.194-6.699 9.71-7.144 19.062-14.625 27.499-23.187 11.667-11.851 22.396-28.332 31.667-44.039 3.459-5.811 6.709-11.561 9.709-16.835 11.875-21.038 15.917-44.999 15.917-68.936 0-27.312 2.418-64.1-10.208-89.267-10.001-19.958-24.374-41.918-38.792-59.167-9.416-11.313-32.499-35.145-49.188-32.625 8.459 15.062 24.563 24.398 31.523 41.354 6.707 16.27 6.541 38.081 2.25 54.793-3.002 11.601-6.042 16.437-15.625 23.851-6.043 4.71-15.166 8.835-18.291 16.667-7.752 19.563 11.291 37.294 26.083 46.855 11.665 7.582 52.875 27.062 23.563 37.788-23.584 8.688-45.895-14.206-67.583 5.606-15.771 14.312-10.125 40.043-4.146 58.354 4.958 15.038 6.917 35.038 16 48.249 3.625 5.27 5.797 7.415 8.43 7.238zM472.218 636.236c6.833 0.022 12.912-0.915 16.35-3.572 17.749-13.707 1.104-50.706-3.374-67.061-5.979-21.976-7.667-52.249-28.708-66.205-15.459-10.251-8.189 9.518-19.875 16.041-14.040 7.832-38.748-13.773-34.875-29.124 1.981-7.835 20.792-14.917 27.875-14.561 15.374 0.77 30.667 16.437 40.103-0.274 21.731-38.395-27.228-78.956-21.605-117.768 1.022-7.187 26.833-96.080 19.001-96.518-40.625-2.043-79.793 41.937-98.5 73.687-6.665 11.312-9.083 10.645-18.582 16.726-18.854 12.149-32.689 38.148-33.731 60.354-0.979 20.355 7.835 36.355 22.48 49.706 6.792 6.211 10.625 9.211 19.397 11.211 8.541 1.914 20.144-2.274 25.665 7.206 5.106 8.707-0.938 15.544-7.624 20-11.313 7.481-40.521 3.75-43.563 21.145-1.875 10.811 7.75 11.773 13.376 18.398 5.666 6.769 2.541 11.163-0.293 16.125-2.478 4.374-4.75 9.206-0.624 16.477 9.915 17.398 33.499 26.648 49.459 37.561 14.248 9.774 29.040 21.292 45.956 25.875 6.824 1.836 20.303 4.536 31.691 4.572zM500.256 696.080c-136.998 0-248.080-111.041-248.080-248.078 0-137.041 111.082-248.082 248.080-248.082 136.997 0 248.080 111.041 248.080 248.082 0 137.036-111.083 248.078-248.080 248.078zM511.322 960c0 0 153.292-172.398 423.25-172.398 0 0 27.497-344.875-62.5-539.894-62.875-135.981-189.874-246-371.831-311.707-181.917 65.707-308.894 181.082-371.706 317.082-90.083 195.019-62.583 534.52-62.583 534.52 269.956 0 445.37 172.398 445.37 172.398z" />
 <glyph unicode="&#xe970;" glyph-name="cloud-data" d="M864 670c-3.808 0-7.606-0.136-11.388-0.406-11.4 36.354-32.826 69.152-62.046 94.38-39.278 33.914-90.14 51.808-142.172 49.884-50.996 89.422-146.334 146.142-248.394 146.142-128.204 0-241.65-88.114-275.706-211.726-73.786-32.8-122.294-106.482-122.294-188.274 0-79.748 45.55-149.052 112-183.272v75.272c0 49.626 40.374 90 90 90h616c49.628 0 90-40.374 90-90v-91.138c64.752 19.746 112 80.012 112 151.138 0 87.122-70.88 158-158 158zM820 482h-616c-16.568 0-30-13.432-30-30v-211.888h676v211.888c0 16.568-13.434 30-30 30zM431.23 328h-159.23c-16.568 0-30 13.432-30 30s13.432 30 30 30h159.23c16.566 0 30-13.432 30-30s-13.434-30-30-30zM624 328.288c-16.568 0-30 13.432-30 30s13.432 30 30 30c16.566 0 30-13.432 30-30s-13.434-30-30-30zM752 328.288c-16.568 0-30 13.432-30 30s13.432 30 30 30c16.566 0 30-13.432 30-30s-13.434-30-30-30zM174-34c0-16.568 13.432-30 30-30h616c16.566 0 30 13.432 30 30v214.112h-676zM752 96c16.566 0 30-13.432 30-30s-13.434-30-30-30c-16.568 0-30 13.432-30 30s13.432 30 30 30zM624 96c16.566 0 30-13.432 30-30s-13.434-30-30-30c-16.568 0-30 13.432-30 30s13.432 30 30 30zM272 96h159.23c16.566 0 30-13.432 30-30s-13.434-30-30-30h-159.23c-16.568 0-30 13.432-30 30s13.432 30 30 30z" />
 <glyph unicode="&#xe972;" glyph-name="menu" d="M18.003 205.37h988.234v-269.514h-988.234zM18.003 582.709h988.234v-269.562h-988.234zM18.003 960h988.234v-269.562h-988.234z" />
 <glyph unicode="&#xe973;" glyph-name="rendezvous" d="M204.412 366.925c20.005 0.565 37.826-15.148 40.815-36.805l0.094-0.622c7.878 22.245 28.491 36.284 49.168 32.067 17.616-3.634 29.944-19.444 32.313-38.605 10.628 21.54 30.049 34.537 48.755 30.317 23.194-5.249 36.285-34.935 29.161-66.251l-1.373-6.070c10.888 14.32 28.165 21.751 44.854 17.344 23.031-6.058 36.122-32.125 29.219-58.225l-14.123-53.595c-6.879-26.064-31.129-42.285-54.136-36.227-19.361 5.134-31.504 24.379-30.882 45.885-11.123-15.623-27.378-24.379-43.131-20.815-19.642 4.464-31.854 26.475-30.858 52.164-10.139-12.916-25.445-19.946-40.798-16.782-14.884 3.024-25.95 14.872-30.474 30.003-4.336-2.695-9.223-4.57-14.532-5.321-21.635-2.964-41.7 13.35-44.853 36.45l-6.599 47.534c-3.153 23.090 11.791 44.219 33.356 47.22 1.349 0.185 2.693 0.295 4.026 0.333zM220.697 670.443h40.412c0 0-70.194-70.323 6.472-131.645 0 0 39.662-35.186 95.394 1.5l105.452 57.946 64.732-32.161 296.98-212.81c0 0 25.070-17.967 18.356-46.377 0 0-12.189-30.379-37.977-28.598l-138.304 99.296c-6.037 4.244-13.572 3.869-16.971-0.879-3.469-4.782-1.383-12.095 4.558-16.373l112.015-80.333c2.192-6.656 4.256-19.246-4.993-32.501 0 0-12.823-15.47-28.762-15.754l-139.43 100.457c-6.025 4.244-13.562 3.867-16.971-0.879-3.471-4.781-1.373-12.095 4.57-16.375l110.174-79.017c2.626-5.37 5.72-15.66-0.915-27.568 0 0-13.43-20.934-33.754-20.369l-99.696 71.507c-5.346 3.785-12.319 3-15.73-1.747-3.469-4.781-1.935-11.697 3.317-15.506l62.67-44.947c1.219-4.688 2.216-13.783-4.313-25.845 0 0-13.723-22.914-37.413-18.19l-66.105 49.133c0 0 50.377 122.421-56.575 133.273 0 0-21.32 81.166-102.862 45.628 0 0-37.036 33.663-83.791 6.342 0 0-56.482 47.138-105.521-20.934l-11.31 3.997c0 0 4.501 175.022 76.29 299.728zM966.743 682.517c0 0 21.038 0.305 24.473-27.32l32.813-239.657c0 0 3.19-25.597-23.966-28.751l-43.785-0.094c0 0 0.996 180.424-76.66 272.815zM115.214 709.398c3.803 0.051 8.081-0.594 12.877-2.197l46.344-24.437c0 0-82.514-168.269-83.51-320.89l-75.821 12.974c0 0-22.691 10.185-12.447 41.384l85.304 272.287c0 0 6.717 20.601 27.255 20.879zM473.014 751.751c6.525-0.188 13.194-1.978 19.553-5.136l162.029-69.723 0.199 0.094 95.021-42.286 93.521 11.251c86.792-100.266 70.289-255.852 70.289-255.852l-52.356-14.181-296.304 220.398-88.199 37.973-133.558-75.29c-20.97-11.814-49.979-0.059-64.852 26.253-14.815 26.347-9.847 57.253 11.124 69.102l164.842 92.918c5.784 3.252 12.165 4.668 18.691 4.48z" />
 <glyph unicode="&#xe974;" glyph-name="events" d="M960.678 366.457l63.222-63.199-266.16-266.165-0.163 0.201-150.263 150.245 63.212 63.224 87.214-87.247zM341.472 512.38c13.904 0 26.763-2.977 38.527-9.001 11.76-5.987 20.742-14.167 26.961-24.507 6.232-10.307 9.324-21.333 9.324-32.952 0-11.027-2.945-21.106-8.869-30.17-5.92-9.065-14.739-16.265-26.388-21.595 15.134-3.503 26.897-10.768 35.257-21.696 8.41-11.028 12.564-24.836 12.564-41.261 0-22.35-8.165-41.265-24.425-56.811-16.28-15.542-36.858-23.297-61.759-23.297-22.411 0-41.030 6.707-55.885 20.062-14.819 13.444-23.296 30.789-25.39 52.095l31.394 4.12c3.632-17.735 9.736-30.63 18.391-38.451 8.654-7.849 19.205-11.777 31.638-11.777 14.772 0 27.223 5.105 37.448 15.346 10.125 10.245 15.231 22.873 15.231 38.057 0 14.363-4.714 26.343-14.102 35.635-9.458 9.39-21.416 14.039-35.96 14.039-5.903 0-13.268-1.179-22.133-3.473l3.484 27.522c2.094-0.298 3.762-0.36 5.022-0.36 13.398 0 25.47 3.502 36.155 10.472 10.698 6.936 16.032 17.702 16.032 32.294 0 11.489-3.893 21.011-11.663 28.536-7.82 7.559-17.881 11.355-30.184 11.355-12.172 0-22.415-3.891-30.513-11.518-8.145-7.657-13.398-19.208-15.687-34.492l-31.347 5.533c3.796 21.072 12.547 37.402 26.144 48.918 13.613 11.584 30.512 17.377 50.732 17.377zM557.843 512.405h20.221v-256.666h-31.393v200.056c-7.559-7.264-17.457-14.496-29.692-21.662-12.321-7.198-23.3-12.565-33.097-16.197v30.3c17.57 8.31 32.916 18.255 46.099 30.003 13.107 11.686 22.415 23.104 27.863 34.165zM76.808 786.636h84.286v-94.785h152.748v94.785h214.198v-94.785h152.751v94.785h91.872c42.417 0 76.793-34.35 76.793-76.794v-406.333l-81.165-81.116v374.018h-687.115v-413.068h482.054l89.374-89.383h-652.604v89.383h0.065v526.499c0 42.443 34.338 76.794 76.742 76.794zM557.157 858.982h94.56v-136.173h-94.56zM190.225 858.982h94.535v-136.173h-94.535z" />
+<glyph unicode="&#xe975;" glyph-name="mailtemplate" d="M544.664 297.813c2.674 0.107 5.345-0.772 7.308-2.733l109.328-109.362c3.928-3.923 3.944-10.274-0.016-14.236-1.248-1.23-2.903-2.216-4.644-2.696l-148.556-39.23c-3.451-0.892-7.122 0.102-9.665 2.63-2.509 2.523-3.516 6.209-2.612 9.66l38.924 148.246c0.427 1.71 1.329 3.278 2.612 4.544 1.972 1.978 4.648 3.070 7.322 3.176zM776.796 530.261c2.664 0 5.223-1.024 7.101-2.9l109.44-108.888c3.891-3.892 3.928-10.243 0-14.174l-191.805-192.886c-1.883-1.875-4.423-2.932-7.106-2.932-2.659 0-5.223 1.057-7.101 2.932l-109.115 109.163c-3.891 3.894-3.928 10.211-0.018 14.137l191.535 192.61c1.862 1.882 4.405 2.939 7.069 2.939zM915.374 652.035c12.017 0.167 23.212-4.302 31.545-12.6l59.608-59.282c17.379-17.383 16.849-46.131-1.143-64.16l-71.405-71.85c-3.978-3.994-10.38-4.099-14.271-0.236l-108.566 107.972c-1.843 1.876-2.884 4.405-2.85 7.068 0.034 2.695 1.125 5.257 3.055 7.203l71.439 71.85c8.792 8.81 20.349 13.791 32.589 14.034zM0.131 767.394h811.936l-406.362-255.882zM0.119 767.394l405.973-337.040 405.975 337.040-0.75-142.178-342.128-342.13h-469.071l3.79 2.184-3.909-1.434z" />
+<glyph unicode="&#xe976;" glyph-name="website2" d="M819.943 157.727c-26.753-53.054-60.627-98.926-99.781-134.943 65.075 31.969 121.701 78.223 165.801 134.943zM662.958 157.727c-16.128-69.199-38.352-128.222-66.546-168.015 72.772 26.672 135.959 86.671 180.969 168.015zM400.257 157.727c28.289-114.559 71.317-183.726 111.669-183.726 40.468 0 83.462 69.168 111.782 183.726zM246.652 157.727c44.915-81.343 108.052-141.343 180.874-168.015-28.163 39.759-50.404 98.816-66.484 168.015zM138.038 157.727c44.13-56.655 100.709-102.912 165.718-134.912-39.169 35.986-72.898 81.858-99.763 134.912zM885.034 413.761c-3.905-78.93-20.626-152.897-47.779-218.146h75.379c40.482 64.065 66.020 138.322 71.748 218.146zM693.169 413.761c-1.792-75.008-9.233-150.241-22.21-218.146h125.302c28.723 64.065 46.851 138.322 50.947 218.146zM368.961 413.761c1.84-81.855 10.161-155.426 22.77-218.146h240.46c12.64 62.72 20.992 136.29 22.849 218.146zM176.857 413.761c4.048-79.824 22.161-154.081 50.85-218.146h125.334c-12.977 67.905-20.432 143.138-22.162 218.146zM39.65 413.761c5.761-79.824 31.265-154.081 71.763-218.146h75.268c-27.106 65.249-43.891 139.216-47.731 218.146zM848.857 669.679c23.409-66.127 36.898-139.838 37.297-217.983h99.781c-0.625 78.688-20.514 152.832-55.138 217.983zM676.335 669.679c11.233-69.072 17.073-144.111 17.25-217.983h154.694c-0.416 78.688-14.496 152.832-39.171 217.983zM386.034 669.679c-10.8-63.775-17.425-137.199-17.616-217.983h287.164c-0.191 80.783-6.83 154.208-17.664 217.983zM214.874 669.679c-24.593-65.151-38.737-139.295-39.106-217.983h154.694c0.194 73.871 6.034 148.91 17.203 217.983zM93.269 669.679c-34.674-65.151-54.547-139.295-55.139-217.983h99.669c0.447 78.145 13.969 151.856 37.265 217.983zM303.774 873.216c-76.435-37.6-141.462-94.848-187.992-165.648h74.131c28.577 66.112 67.427 122.912 113.861 165.648zM720.131 873.264c46.513-42.736 85.346-99.584 113.892-165.696h74.212c-46.547 70.8-111.557 128.112-188.104 165.696zM596.412 906.304c32.256-45.472 56.77-116.384 73.092-198.736h123.62c-45.202 96.944-114.981 168.816-196.712 198.736zM427.526 906.304c-81.734-29.92-151.449-101.792-196.667-198.736h123.622c16.319 82.352 40.833 153.264 73.044 198.736zM511.927 922.048c-43.872 0-90.883-81.584-118.708-214.48h237.498c-27.839 132.896-74.85 214.48-118.79 214.48zM511.927 960c282.43 0 512.073-229.664 512.073-511.952 0-105.312-32.051-203.295-86.787-284.815v-5.505h-3.953c-92.469-133.759-246.747-221.727-421.334-221.727-174.502 0-328.75 87.968-421.187 221.727h-3.92v5.489c-54.771 81.504-86.82 179.456-86.82 284.832 0 282.288 229.707 511.952 511.927 511.952z" />
+<glyph unicode="&#xe977;" glyph-name="win10" d="M468.218 421.434l555.782-0.915-0.144-461.101-554.851 74.509zM0.305 426.777l417.968-2.594 0.321-384.454-418.273 54.812zM418.465 852.454l0.193-383.993-418.273-2.291-0.385 332.083zM1023.856 936.582v-463.236l-554.851-4.276v390.409z" />
 </font></defs></svg>
\ No newline at end of file
index 3a28598..6f5c468 100644 (file)
Binary files a/desktopapp/css/fonts/appicons.ttf and b/desktopapp/css/fonts/appicons.ttf differ
index 5b34afc..7a42089 100644 (file)
Binary files a/desktopapp/css/fonts/appicons.woff and b/desktopapp/css/fonts/appicons.woff differ
index 03357f7..c6a7d2c 100644 (file)
@@ -1,9 +1,9 @@
 @font-face {
   font-family: 'appicons';
   src:
-    url('fonts/appicons.ttf?o9n2mq') format('truetype'),
-    url('fonts/appicons.woff?o9n2mq') format('woff'),
-    url('fonts/appicons.svg?o9n2mq#appicons') format('svg');
+    url('fonts/appicons.ttf?doc1wu') format('truetype'),
+    url('fonts/appicons.woff?doc1wu') format('woff'),
+    url('fonts/appicons.svg?doc1wu#appicons') format('svg');
   font-weight: normal;
   font-style: normal;
   font-display: block;
   -moz-osx-font-smoothing: grayscale;
 }
 
-.icon-menu:before {
-  content: "\e972";
-}
-.icon-rendezvous:before {
-  content: "\e973";
-}
-.icon-events:before {
-  content: "\e974";
-}
-.icon-mailserver:before {
-  content: "\e971";
-}
-.icon-private-cloud:before {
-  content: "\e96e";
-}
-.icon-shield:before {
-  content: "\e96f";
-}
-.icon-cloud-data:before {
-  content: "\e970";
-}
-.icon-mobile:before {
-  content: "\e96c";
-}
-.icon-website2:before {
-  content: "\e96d";
-}
-.icon-stopwatches:before {
-  content: "\e969";
-}
-.icon-paragraph:before {
-  content: "\e96a";
-}
-.icon-support:before {
-  content: "\e96b";
-}
-.icon-helpdesk:before {
-  content: "\e935";
-}
-.icon-printer:before {
-  content: "\e936";
-}
-.icon-user:before {
-  content: "\e937";
-}
-.icon-open:before {
-  content: "\e938";
-}
 .icon-add:before {
   content: "\e930";
 }
 .icon-close:before {
   content: "\e907";
 }
+.icon-cloud-data:before {
+  content: "\e970";
+}
 .icon-code:before {
   content: "\e943";
 }
 .icon-email:before {
   content: "\e911";
 }
+.icon-events:before {
+  content: "\e974";
+}
 .icon-exit:before {
   content: "\e912";
 }
 .icon-help-important:before {
   content: "\e950";
 }
+.icon-helpdesk:before {
+  content: "\e935";
+}
 .icon-home:before {
   content: "\e951";
 }
 .icon-mailsend:before {
   content: "\e957";
 }
+.icon-mailserver:before {
+  content: "\e971";
+}
+.icon-mailtemplate:before {
+  content: "\e975";
+}
+.icon-menu:before {
+  content: "\e972";
+}
+.icon-mobile:before {
+  content: "\e96c";
+}
 .icon-msstore:before {
   content: "\e958";
 }
 .icon-ok:before {
   content: "\e959";
 }
+.icon-open:before {
+  content: "\e938";
+}
 .icon-out:before {
   content: "\e900";
 }
+.icon-paragraph:before {
+  content: "\e96a";
+}
 .icon-pc:before {
   content: "\e95a";
 }
 .icon-pc-windows:before {
   content: "\e95d";
 }
+.icon-pc1:before {
+  content: "\e95e";
+}
 .icon-pdf:before {
   content: "\e91e";
 }
 .icon-print:before {
   content: "\e922";
 }
+.icon-printer:before {
+  content: "\e936";
+}
+.icon-private-cloud:before {
+  content: "\e96e";
+}
 .icon-product:before {
   content: "\e923";
 }
 .icon-reload:before {
   content: "\e925";
 }
+.icon-rendezvous:before {
+  content: "\e973";
+}
+.icon-reporttemplate:before {
+  content: "\e95f";
+}
 .icon-rndcheck-not:before {
-  content: "\e95e";
+  content: "\e960";
 }
 .icon-rndcheck-ok:before {
-  content: "\e95f";
+  content: "\e961";
 }
 .icon-sale:before {
-  content: "\e960";
+  content: "\e962";
 }
 .icon-save:before {
   content: "\e934";
   content: "\e926";
 }
 .icon-settings-bars:before {
-  content: "\e961";
+  content: "\e963";
+}
+.icon-shield:before {
+  content: "\e96f";
 }
 .icon-shop:before {
-  content: "\e962";
+  content: "\e964";
 }
 .icon-shop3:before {
-  content: "\e963";
+  content: "\e965";
 }
 .icon-shoppingcard:before {
-  content: "\e964";
+  content: "\e966";
 }
 .icon-sortasc:before {
   content: "\e932";
 .icon-star:before {
   content: "\e927";
 }
+.icon-stopwatches:before {
+  content: "\e969";
+}
 .icon-stripe:before {
-  content: "\e965";
+  content: "\e967";
+}
+.icon-support:before {
+  content: "\e96b";
 }
 .icon-tag:before {
-  content: "\e966";
+  content: "\e968";
 }
 .icon-template:before {
   content: "\e928";
 .icon-upload:before {
   content: "\e92a";
 }
+.icon-user:before {
+  content: "\e937";
+}
 .icon-userconfig:before {
   content: "\e92c";
 }
   content: "\e92b";
 }
 .icon-video:before {
-  content: "\e967";
+  content: "\e96d";
 }
 .icon-viewpdf:before {
   content: "\e92d";
 .icon-website:before {
   content: "\e92e";
 }
+.icon-website2:before {
+  content: "\e976";
+}
 .icon-win10:before {
-  content: "\e968";
+  content: "\e977";
 }
index de0baed..37bc60b 100644 (file)
@@ -3,28 +3,28 @@
     <header> 
       <span onclick="document.getElementById('dlgAddFiles').style.display='none'; return false;" 
        class="button toolbarbtn display-topright" ><span class="icon icon-remove" style="font-size: 18px;"></span></span>
-      <h3 id="dlgAddFiles_title">Datei(en) hinzufügen</h3>
+      <h3 id="dlgAddFiles_title">{{addfiles}}</h3>
     </header>
     <div class="container">
       <div id="dlg_AddFiles_infomsg"></div>
         <form id="frm_AddFiles">
         <input type="hidden" class="data_addFiles" id="AddFiles_folder" data-table="galleryitems"  data-column="" data-id="" value=""/>
         <div class="row">
-                <div class="cell container" style="width: 400px;">
-                <label for="AddFiles_file" class="label">Datei(en)</label>
-                  <input type="file" class="input  data_AddFiles " id="AddFiles_file" data-column="filename"  data-table="files" multiple data-id="" value="" onchange="files.showUploadSize();"/>
-                </div>
+          <div class="cell container" style="width: 400px;">
+            <label for="AddFiles_file" class="label">{{files}}</label>
+            <input type="file" class="input  data_AddFiles " id="AddFiles_file" data-column="filename"  data-table="files" multiple data-id="" value="" onchange="files.showUploadSize();"/>
+          </div>
         </div>
         <div class="row">
             <div class="cell container" style="width: 300px;">
-              <label class="label" for="AddFiles_file_filesize">taille</label>
+              <label class="label" for="AddFiles_file_filesize">{{filesize}}</label>
               <input class="input border text data_formname readonly" data-column="column" data-id="" data-table="table" id="AddFiles_file_filesize"   readonly>
             </div>          
         </div>
        </form>  
     </div>
     <footer>
-    <button class="button theme-light margin-right border" onclick="document.getElementById('dlgAddFiles').style.display='none'; return false;"><span class="icon icon-remove"></span>Abbrechen</button>
-    <button class="button actionbtn margin-right border" id="btnAddFiles" onclick="files.addFiles();"><span class="icon icon-save"></span>Importieren</button>  
+    <button class="button theme-light margin-right border" onclick="document.getElementById('dlgAddFiles').style.display='none'; return false;"><span class="icon icon-remove"></span>{{cancel}}</button>
+    <button class="button actionbtn margin-right border" id="btnAddFiles" onclick="files.addFiles();"><span class="icon icon-save"></span>{{import}}</button>  
     </footer>
   </div>
\ No newline at end of file
index d338d42..6913cd0 100644 (file)
@@ -1,43 +1,53 @@
 <div id="dlgEmail" class="modal" >
   <div class="modal-content animate-opacity card-4" >
     <header>
-      <div class="bar-item SubHeadTitle">Email verschicken</div>
+      <div class="bar-item SubHeadTitle">{{email_send}}</div>
       <span onclick="myapp.closeDialog('Email');" class="button display-topright">&times;</span>
     </header>
     <div class="container padding">
       <form id="frm_email" >
         <div class="row">
+          <div class="cell" style="width: 600px;">
           <div class="cell container">
-            <label class="label" for="email_templatename">Vorlage</label>
+            <label class="label" for="email_templatename">{{template}}</label>
             <select class="select border data_email" data-column="templatename" data-id="" data-selected="" data-table="email" id="email_templatename"></select>
           </div>
           <div class="cell container" >
-            <label class="label" for="email_to">An</label>
+            <label class="label" for="email_to">{{mail_to}}</label>
             <input class="input data_email border text" data-column="to" data-id="" data-table="email" id="email_to"  type="text">
           </div>
           <div class="cell container" >
-            <label class="label" for="email_cc">Kopie An:</label>
+            <label class="label" for="email_cc">{mail_cc}</label>
             <input class="input data_email border text" data-column="cc" data-id="" data-table="email" id="email_cc"  type="text">
           </div>
           <div class="cell container" >
-            <label class="label" for="email_bcc">Blind-Kopie an:</label>
+            <label class="label" for="email_bcc">{{mail_bcc}}</label>
             <input class="input data_email border text" data-column="bcc" data-id="" data-table="email" id="email_bcc"  type="text">
           </div>
           <div class="cell container" >
-              <label class="label" for="email_subject">Betreff</label>
+              <label class="label" for="email_subject">{{mail_subject}}</label>
               <input class="input data_email border text" data-column="subject" data-id="" data-table="email" id="email_subject"  type="text">
           </div>
           <div class="cell container">
-            <label class="label" for="email_body">Nachricht</label>
-            <textarea class="input border data_formname richeditarea" style="height: 400px;"  data-id="" data-column="body" data-table="email"  id="email_body" ></textarea>
+            <label class="label" for="email_body">{{mail_body}}</label>
+            <textarea class="input border data_email richeditarea" style="height: 400px;"  data-id="" data-column="body" data-table="email"  id="email_body" ></textarea>
           </div>
-          
+        </div>
+        <div class="cell">
+          <div class="bar">
+            <button class="bar-item SubHeadTitle">{{mail_attachements}}</button>
+            <button class="bar-item toolbarbtn right">{{delete}}</button>
+            <button class="bar-item toolbarbtn right">{{add}}</button>
+          </div>
+          <div id="tbl_mailattachments"></div>
+        </div>
         </div>
       </form>
     </div>
     <footer class="container right-align padding-16">
-      <button class="button theme-light margin-right border" onclick="myapp.closeDialog('Email');"><span class="icon-close" style="font-size: 16px;"></span>Abbrechen</button>
-      <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="email.sendEmail();"><span class="icon-save" style="font-size: 16px;"></span>Senden</button>
+      <button class="button theme-light margin-right border" onclick="myapp.closeDialog('Email');"><span class="icon-close" style="font-size: 16px;"></span>{{cancel}}</button>
+      <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="mailtemplates.open();"><span class="icon-save" style="font-size: 16px;"></span>{{email_open}}</button>
+      <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="email.sendEmail();"><span class="icon-save" style="font-size: 16px;"></span>{{senden}}</button>
     </footer>
   </div>
 </div>
\ No newline at end of file
diff --git a/desktopapp/dialogs/InvoiceBooking.html b/desktopapp/dialogs/InvoiceBooking.html
deleted file mode 100644 (file)
index e69de29..0000000
index eb22793..8768674 100644 (file)
@@ -2,16 +2,14 @@
   <div class="modal-content animate-top card-4">
     <header class="container" style="margin-bottom: 0px;">
       <span class="button display-topright" onclick="document.getElementById('dlgSelectAddress').style.display='none'; return false;">&times;</span>
-      <h2>
-        Adressen
-      </h2>
+      <h2> {{addresses}} </h2>
     </header>
     <div class="container" style="padding: 0px;">
       <div id="tbl_addressselect"></div>
     </div>
     <footer class="container right-align padding-16" style="margin-top: 0px;">
-      <button class="button theme light margin-right border" onclick="document.getElementById('dlgSelectAddress').style.display='none'; return false;">Abbrechen</button> <button class="button moduletoolbar margin-right border" id=
-      "dlgSelectAddress_btnOK" onclick="invoice.setAccount();">OK</button>
+      <button class="button theme light margin-right border" onclick="document.getElementById('dlgSelectAddress').style.display='none'; return false;">{{cancel}}</button> <button class="button moduletoolbar margin-right border" id=
+      "dlgSelectAddress_btnOK" onclick="invoice.setAccount();">{{ok}}</button>
     </footer>
   </div>
 </div>
\ No newline at end of file
index b38ec1e..dae1391 100644 (file)
@@ -2,16 +2,14 @@
   <div class="modal-content animate-top card-4">
     <header class="container" style="margin-bottom: 0px;">
       <span class="button display-topright" onclick="myapp.closeDialog('SelectProduct');">&times;</span>
-      <h2>
-        Adressen
-      </h2>
+      <h2>{{products}}</h2>
     </header>
     <div class="container" style="padding: 0px;">
       <div id="tbl_productselect"></div>
     </div>
     <footer class="container right-align padding-16" style="margin-top: 0px;">
-      <button class="button theme light margin-right border" onclick="myapp.closeDialog('SelectProduct');">Abbrechen</button> <button class="button moduletoolbar margin-right border" id=
-      "dlgSelectProduct_btnOK" onclick="invoice.addProducts();">Hinzufügen</button>
+      <button class="button theme light margin-right border" onclick="myapp.closeDialog('SelectProduct');">{{cancel}}</button> <button class="button moduletoolbar margin-right border" id=
+      "dlgSelectProduct_btnOK" onclick="invoice.addProducts();">{{add}}</button>
     </footer>
   </div>
 </div>
\ No newline at end of file
index 9e4abb2..3e308a4 100644 (file)
@@ -8,8 +8,8 @@
       <div id="dlgconfirm_text"></div>
     </div>
     <footer class="container right-align padding-16">
-      <button class="button theme light margin-right border" id="dlgconfirm_btncancel" onclick="document.getElementById('dlgconfirm').style.display='none'; return false;">Abbrechen</button> <button class="button blue-grey margin-right border"
-      id="dlgconfirm_btnok" onclick="document.getElementById('dlgconfirm').style.display='none';">OK</button>
+      <button class="button theme light margin-right border" id="dlgconfirm_btncancel" onclick="document.getElementById('dlgconfirm').style.display='none'; return false;">{{cancel}}</button> <button class="button blue-grey margin-right border"
+      id="dlgconfirm_btnok" onclick="document.getElementById('dlgconfirm').style.display='none';">{{ok}}</button>
     </footer>
   </div>
 </div>
\ No newline at end of file
index 6d0e7d4..00dac28 100644 (file)
@@ -5,7 +5,7 @@
     </header>
     <div class="container">
       <div class="container" id="dlgdataload_text">
-        Attentez s.v.p.!
+        {{pleasewait}}
       </div>
       <div class="container padding">
         <progress class="progress block" indeterminate=""></progress>
index 7931c02..88b5c40 100644 (file)
@@ -8,7 +8,7 @@
       <div id="dlgmessage_text"></div>
     </div>
     <footer class="container right-align padding-16">
-      <button class="button blue-grey margin-right border" onclick="document.getElementById('dlgmessage').style.display='none'; return false;">OK</button>
+      <button class="button blue-grey margin-right border" onclick="document.getElementById('dlgmessage').style.display='none'; return false;">{{ok}}</button>
     </footer>
   </div>
 </div>
\ No newline at end of file
index f690748..1a15526 100644 (file)
@@ -37,6 +37,9 @@
                 </div>
               </div>
             </div>
+            <div class="container margin" id="pnl_overview">
+              
+            </div>
           </div>
         </div>
         
index 4560180..c7ecb52 100644 (file)
@@ -1,4 +1,5 @@
-
+var emlformat= require('eml-format');
+const nodemailer = require("nodemailer");
 
 let email = {
     tmpfolder: usersystem.profilepath() + 'tmp/',
@@ -15,65 +16,137 @@ let email = {
         }).then(data => resolve(data)).catch(err => reject(err));
       });
     },
-    sendSMTP: function (email,attach = [],callback = null){
+    sendSMTP: function (maildata,attach = [],callback = null){
       email.callback = callback;
-      email.tmpbodyfile = report.tmpfolder + email.tmptemplate + ".mail.html";
-      //repdata = db.query("select * from public.mailtemplates WHERE id='".$tmpl."'");
-      result = fs.writeFileSync(email.tmpbodyfile, email.tmpbody);
-      var args= [];
-      args.push("-f",'"' + preferences.defaultdata.smtpfrom + '"');
-      args.push('-s','"'+preferences.defaultdata.smtpserver + ':' + preferences.defaultdata.smtpport+ '"');
-      args.push('-xu','"'+preferences.defaultdata.smtpuser+'"'); 
-      args.push('-xp',"'" + preferences.defaultdata.smtppassword + "'"); 
-      args.push('-q');
-      args.push('-o','tls=auto');
-      args.push('-t','"'+ email+ '"');
-      args.push('-u','"'+ email.tmpsubject+ '"');
-      args.push('-o','message-content-type=html');
-      args.push('-o','message-charset=ISO-8859-1');
-      args.push('-o','message-file='+ email.tmpbodyfile);
-      if ((attach) && (attach.length > 0)){
-        for (var a in attach){
-          args.push("-a",'"'+a + '"');
-        }
-        
-      }
-      const mailout = spawn(usersystem.getApplicationPath()+ '/tools/sendEmail.exe', args);
-      mailout.stdout.on('data', (data) => {
-        console.log(`emailout stdout: ${data}`);
+      let transporter = nodemailer.createTransport({
+        host: preferences.defaultdata.smtpserve,
+        port: parseInt(preferences.defaultdata.smtpport),
+        secure: ((parseInt(preferences.defaultdata.smtpport) == 465)?true:false), // true for 465, false for other ports
+        auth: {
+          user: preferences.defaultdata.smtpuser, // generated ethereal user
+          pass: preferences.defaultdata.smtppassword, // generated ethereal password
+        },
       });
-      mailout.stderr.on('data', (data) => {
-        console.error(`emailout stderr: ${data}`);
-      });
-      mailout.on('close', (code) => {
-        console.log(`emailout: child process exited with code ${code}`);
-        if (code == 0){
-        //console.log("Copy",report.tmpoutput,"to",report.output);
-        email.tmpbodyfile = null;
-        email.tmpbody= null;
-        email.tmpsubject= null;
-        email.tmptemplate= null;
-        if (fs.existsSync(email.tmpbodyfile)){
-           fs.unlinkSync(email.tmpbodyfile);
-        }
-        
-        email.callback({"mail":" Mail wurde erfolgreich verschickt an " + email});
+      let mattach = [];
+      for (var a in attach){
+         mattach.push({file: attach[a]});
+      }
+      let mailobj = {
+        from: preferences.defaultdata.smtpfrom, // sender address
+        to: maildata.to, // list of receivers
+        subject: maildata.subject, // Subject line
+        //text: "Hello world?", // plain text body
+        html: maildata.body, // html body
+        attachments: mattach
+      }
+      if (maildata.cc){
+        mailobj["cc"] = maildata.cc; // (comma separated)
+      }
+      if (maildata.bcc){
+        mailobj["bcc"] = maildata.bcc; // (comma separated)
       }
+      // send mail with defined transport object
+      let msg = await transporter.sendMail();
+    
+      console.log("Message sent: %s", msg.messageId);
+      // Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
+    
+      // Preview only available when sending through an Ethereal account
+      console.log("Preview URL: %s", nodemailer.getTestMessageUrl(msg));
+      email.callback({"mail":lbl[preferences.global.language].mailsent + " " + email});
+      // email.tmpbodyfile = report.tmpfolder + email.tmptemplate + ".mail.html";
+      // //repdata = db.query("select * from public.mailtemplates WHERE id='".$tmpl."'");
+      // result = fs.writeFileSync(email.tmpbodyfile, email.tmpbody);
+      // var args= [];
+      // args.push("-f",'"' + preferences.defaultdata.smtpfrom + '"');
+      // args.push('-s','"'+preferences.defaultdata.smtpserver + ':' + preferences.defaultdata.smtpport+ '"');
+      // args.push('-xu','"'+preferences.defaultdata.smtpuser+'"'); 
+      // args.push('-xp',"'" + preferences.defaultdata.smtppassword + "'"); 
+      // args.push('-q');
+      // args.push('-o','tls=auto');
+      // args.push('-t','"'+ email+ '"');
+      // args.push('-u','"'+ email.tmpsubject+ '"');
+      // args.push('-o','message-content-type=html');
+      // args.push('-o','message-charset=ISO-8859-1');
+      // args.push('-o','message-file='+ email.tmpbodyfile);
+      // if ((attach) && (attach.length > 0)){
+      //   for (var a in attach){
+      //     args.push("-a",'"'+a + '"');
+      //   }
+        
+      // }
+      // const mailout = spawn(usersystem.getApplicationPath()+ '/tools/sendEmail.exe', args);
+      // mailout.stdout.on('data', (data) => {
+      //   console.log(`emailout stdout: ${data}`);
+      // });
+      // mailout.stderr.on('data', (data) => {
+      //   console.error(`emailout stderr: ${data}`);
+      // });
+      // mailout.on('close', (code) => {
+      //   console.log(`emailout: child process exited with code ${code}`);
+      //   if (code == 0){
+      //   //console.log("Copy",report.tmpoutput,"to",report.output);
+      //   email.tmpbodyfile = null;
+      //   email.tmpbody= null;
+      //   email.tmpsubject= null;
+      //   email.tmptemplate= null;
+      //   if (fs.existsSync(email.tmpbodyfile)){
+      //      fs.unlinkSync(email.tmpbodyfile);
+      //   }
+        
+      //   email.callback({"mail":" Mail wurde erfolgreich verschickt an " + email});
+      // }
       
-    });
+    // });
       
   },
-  openthunderbird: function(maildata){
+
+  open: function(maildata,attach){
     let args =[];
     let mailcfg =[];
-    mailcfg.push("to='"+ maildata.to+"'");
-    mailcfg.push("from='"+ maildata.from +"'");
-    mailcfg.push("subject='"+ maildata.subject +"'");
-    mailcfg.push("format=1"); // format => 1=HTML, 2=text
-    mailcfg.push("body='"+ maildata.body+"'");
-    mailcfg.push("attachment='"+ maildata.attachments.join(',').replace(/\//g,"\\")+"'"); 
-    args.push("-compose",mailcfg.join(","))
-    
+    if (preferences.global.mailapp == "thunderbird"){
+      mailcfg.push("to='"+ maildata.to+"'");
+      mailcfg.push("from='"+ maildata.from +"'");
+      mailcfg.push("subject='"+ maildata.subject +"'");
+      mailcfg.push("format=1"); // format => 1=HTML, 2=text
+      mailcfg.push("body='"+ maildata.body+"'");
+      mailcfg.push("attachment='"+ maildata.attachments.join(',').replace(/\//g,"\\")+"'"); 
+      args.push("-compose",mailcfg.join(","))
+    } else if (preferences.global.mailapp == "outlook"){
+      let mailobj = {
+        from: maildata.from,
+        to: maildata.to,
+        subject: maildata.subject,
+        html: maildata.body,
+      }
+      if (maildata.cc){
+        mailobj["cc"] = maildata.cc;
+      }
+      if (maildata.bcc){
+        mailobj["bcc"] = maildata.bcc;
+      }
+      if ((attach) && (attach.length > 0)){
+        mailobj.attachments =[];
+        for (var a in attach){
+          let tmpf = 
+          mailobj.attachments.push({
+            name: path.basename,
+            contentType: "application/pdf",
+            data: fs.readfileSync(attach[a]),
+            inline: true,
+          });
+        }
+        
+      }
+      //var eml = fs.readFileSync("sample.eml", "utf-8");
+      emlformat.build(data, function(error, eml) {
+        if (error) return console.log(error);
+        fs.writeFileSync(email.tmpfolder + "/build.eml", eml);
+        console.log("Done!");
+      });
+      //outlook.exe /c ipm.note /m "someone@microsoft.com&subject=test%20subject&body=test%20body" /a test.txt
+      args = ["/c","ipm.note","/f",email.tmpfolder + "/build.eml"]
+    }
     const mailappout = spawn(preferences.global.mailapp, args);
     mailappout.stdout.on('data', (data) => {
 
@@ -88,10 +161,10 @@ let email = {
       // console.log(`mailappout: child process exited with code ${code}`);
     });
   },
-  openOutlook: function(){
-    const mailappout = spawn(preferences.global.mailapp, args);
-    //outlook.exe /c ipm.note /m "someone@microsoft.com&subject=test%20subject&body=test%20body" /a test.txt
-  },
+  // openOutlook: function(){
+  //   const mailappout = spawn(preferences.global.mailapp, args);
+    
+  // },
   // create: function(mailtemplate,repdata,accdata){
   //   if (mailtemplate == 'msg'){
   //     email.templatetype ='msg';
index 58c4497..dcce79f 100644 (file)
@@ -1,4 +1,136 @@
 lbl["de"] = {
+  back:"zurück",
   invoices:"Rechnungen",
+  addresses:"Addressen",
+  address_new:"Neue Adresse",
+  address_delete:"Adresse löschen?",
+  address_delete_question:"Sind Sie Sicher dass Sie die Adresse löschen möchten?",
+  invoice:"Rechnung",
+  new:"neu",
+  edit:"bearbeiten",
+  duplicate:"duplizieren",
+  delete:"löschen",
+  address:"Adresse",
+  companyname: "Firma / Name",
+  clientnumber:"Kunden Nr.",
+  clientnumber_short:"Nr.",
+  title:"Titel",
+  prename:"Vorname",
+  surname:"Nachname",
+  country:"Land",
+  zip:"PLZ",
+  city:"Ort",
+  email:"E-Mail",
+  phone:"Telefon",
+  bankaccount:"Bank-Konto",
+  bic:"BIC",
+  vatid:"Ust-Id",
+  language:"Sprache",
+  cancel:"Abbrechen",
+  save:"Speichern",
+
+  pdf_open:"PDF Ã¶ffnen",
+  pdf_create:"PDF erstellen",
+  pdf_import:"importieren",
+  send:"verschicken",
+  email_send:"senden",
+  email_open:"öffnen",
+  invoice_type:"Typ",
+  status:"Status",
+  report_template:"Druck-Vorlage",
+  invoice_date:"Datum",
+  deadline_days:"Tage",
+  deadline_date:"Fälligkeit",
+  businessyear:"G.Jahr",
+  payedamount:"Bezahlt",
+  reference:"Referenz",
+  addressee:"Addressat",
+  invoice_item:"Rechnungs Posten",
+  invoice_items:"Rechnungs Posten",
+  preface:"Vorwort",
+  annotiation:"Annmerkung",
+  sku:"SKU",
+  item_name:"Name",
+  quantity:"Anzahl",
+  unit:"Einheit",
+  unitamount:"Preis",
+  tax:"Mehrwertsteuer",
+  netamount:"Netto",
+  grossamount:"Brutto",
+  description:"Beschreibung",
   
+
+  files: "Dateien",
+  invoice_item_delete: "Posten löschen?",
+  invoice_item_delete_question:"Sind Sie sicher dass sie  die/den ausgewählten Posten löschen möchten?",
+  invoice_delete:"Rechnung löschen",
+  invoice_delete_question: "Sind Sie Sicher dass Sie die Rechnung(en) löschen möchten?",
+
+  products:"Produkte",
+  product:"Produkt",
+  service:"Dienstleistung",
+  product_heading:"Produkt / Dienstleitung",
+  product_name:"Name",
+  product_type:"Typ",
+  product_group:"Produkt-Gruppe",
+  group:"Gruppe",
+  product_delete:"Produkt löschen",
+  product_delete_question: "Sind Sie Sicher dass Sie das Produkt löschen möchten?",
+  settings:"Einstellungen",
+  document_types:"Dokument-Typen",
+  general:"Allgemein",
+
+  company_data:"Unternehmens-Daten",
+  company:"Unternehmen",
+  website:"Webseite",
+  rcs:"Handelsregister",
+  default_values:"Standard-Werte",
+  language:"Sprache",
+  deadline:"Fälligkeit",
+  days:"Tage",
+  default_invoice_template:"Rechnungs-Vorlage",
+  default_creditnote_template:"Gutschrift-Vorlage",
+  default_offer_template:"Angebots-Vorlage",
+  default_delivery_template:"Lieferschein-Vorlage",
+  mail_settings:"Mail-Einstellungen",
+  mail_from:"Absender",
+  mail_server:"Mailserver",
+  mail_port:"Port",
+  mail_user:"Benutzer",
+  mail_password:"Passwort",
+  mail_app:"Mail-Anwendung",
+  offers:"Angebote",
+  reporttemplates:"Druck-Vorlagen",
+  mailtemplates:"Mail-Vorlagen",
+  datasets:"Datensätze",
+  backup:"Backup",
+  category:"Kategorie",
+  name:"Name",
+  top:"Oben",
+  bottom:"Unten",
+  left:"Links",
+  right:"Rechts",
+  header:"Kopfzeile",
+  footer:"Fußzeile",
+  template_pagecontent:"Seiteninhalt",
+  template_layout_definition:"Layout Definition",
+  template:"Vorlage",
+  mail_to:"An:",
+  mail_cc:"Kopie An:",
+  mail_bcc:"Blindkopie An:",
+  mail_subject:"Betreff",
+  mail_body:"Nachricht",
+  mail_attachments:"Anhänge",
+  add:"hinzufügen",
+  mailsent: "E-Mail wurde erfolgreich verschickt an: ",
+  pleasewait:"Bitter warten...!",
+  addfiles:"Datei(en) hinzufügen",
+  files:"Dateien",
+  import:"Importiern",
+  filesize:"Datei-Größe",
+  ok:"OK",
+  mail_send:"senden",
+  id:"Id",
+  color:"Farbe",
+  position:"Position"
 }
\ No newline at end of file
index 29d67be..e385c17 100644 (file)
@@ -1,19 +1,19 @@
 <div class="display-container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
-  <div class="bar-item PageHeadTitle">Adressen</div>
+  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
+  <div class="bar-item PageHeadTitle">{{addresses}}</div>
   <div class="hide-small">
-  <button class="bar-item toolbarbtn right" onclick="addresses.confirmremove();"><span class="icon-trash text-red" style="font-size: 16px;"></span>löschen</button> 
-  <button class="bar-item toolbarbtn right" onclick="addresses.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>dupizieren</button> 
-  <button class="bar-item toolbarbtn right" onclick="addresses.edit();"><span class="icon-edit" style="font-size: 16px;"></span>bearb.</button>
-  <button class="bar-item toolbarbtn right" onclick="addresses.add();"><span class="icon-add" style="font-size: 16px;"></span> neu</button>
+  <button class="bar-item toolbarbtn right" onclick="addresses.confirmremove();"><span class="icon-trash text-red" style="font-size: 16px;"></span>{{delete}}</button> 
+  <button class="bar-item toolbarbtn right" onclick="addresses.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button> 
+  <button class="bar-item toolbarbtn right" onclick="addresses.edit();"><span class="icon-edit" style="font-size: 16px;"></span>{{edit}}</button>
+  <button class="bar-item toolbarbtn right" onclick="addresses.add();"><span class="icon-add" style="font-size: 16px;"></span> {{new}}</button>
 </div>
   <div class="hide-large">
     <button class="bar-item toolbarbtn right" onclick="myapp.togglemenu();"><span class="icon-menu" style="font-size: 36px;"></span></button>
     <div class="bar" id="mobilemenu" style="display: none;">
-      <button class="bar-item toolbarbtn right" onclick="addresses.confirmremove();"><span class="icon-trash text-red" style="font-size: 16px;"></span>löschen</button> 
-      <button class="bar-item toolbarbtn right" onclick="addresses.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>dupizieren</button> 
-      <button class="bar-item toolbarbtn right" onclick="addresses.edit();"><span class="icon-edit" style="font-size: 16px;"></span>bearb.</button>
-      <button class="bar-item toolbarbtn right" onclick="addresses.add();"><span class="icon-add" style="font-size: 16px;"></span> neu</button>
+      <button class="bar-item toolbarbtn right" onclick="addresses.confirmremove();"><span class="icon-trash text-red" style="font-size: 16px;"></span>{{delete}}</button> 
+      <button class="bar-item toolbarbtn right" onclick="addresses.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button> 
+      <button class="bar-item toolbarbtn right" onclick="addresses.edit();"><span class="icon-edit" style="font-size: 16px;"></span>{{edit}}</button>
+      <button class="bar-item toolbarbtn right" onclick="addresses.add();"><span class="icon-add" style="font-size: 16px;"></span> {{new}}</button>
     </div>
   </div>
 </div>
 <div id="dlgAddress" class="modal" >
   <div class="modal-content animate-opacity card-4" >
     <header>
-      <div class="bar-item SubHeadTitle">Adresse</div>
+      <div class="bar-item SubHeadTitle">{{address}}</div>
       <span onclick="myapp.closeDialog('Address');" class="button display-topright">&times;</span>
     </header>
     <div class="container padding">
       <form id="frm_addresses" >
         <div class="row">
           <div class="container twothird">
-              <label class="label" for="addresses_receipient">Name / Firma</label>
+              <label class="label" for="addresses_receipient">{{companyname}}</label>
               <input class="input data_addresses border text" data-column="receipient" data-id="" data-table="addresses" id="addresses_receipient"  type="text">
           </div>
           <div class="container third">
-              <label class="label" for="addresses_clientnumber">Kundern-Nr.</label> 
+              <label class="label" for="addresses_clientnumber">{{clientnumber}}</label> 
               <input class="input data_addresses border text" data-column="clientnumber" data-id="" data-table="addresses" id="addresses_clientnumber"  placeholder="YYMMDDNNN" type="text">
           </div>
         </div>
         <div class="row">
           <div class="container fifth">
-              <label class="label" for="addresses_title">Titel</label> 
+              <label class="label" for="addresses_title">{{title}}</label> 
               <input class="input border data_addresses text" data-column="title" data-id="" data-table="addresses" id="addresses_title"  type="text">
           </div>
           <div class="container twofifth" >
-              <label class="label" for="addresses_prename">Vorname</label> 
+              <label class="label" for="addresses_prename">{{prename}}</label> 
               <input class="input border data_addresses text" data-column="prename" data-id="" data-table="addresses" id="addresses_prename"  type="text">
           </div>
           <div class="container twofifth">
-              <label class="label" for="addresses_surname">Nachname</label> 
+              <label class="label" for="addresses_surname">{{surname}}</label> 
               <input class="input border data_addresses text" data-column="surname" data-id="" data-table="addresses" id="addresses_surname"  type="text">
           </div>
         </div>
         <div class="row">
           <div class="container">
-              <label class="label" for="addresses_address">Adresse</label> 
+              <label class="label" for="addresses_address">{{address}}</label> 
               <input class="input border data_addresses text" data-column="address" data-id="" data-table="addresses" id="addresses_address"  type="text">
           </div>
         </div>
         <div class="row">
           <div class="container fifth" >
-              <label class="label" for="addresses_country">Land</label> 
+              <label class="label" for="addresses_country">{{country}}</label> 
               <input class="input border data_addresses text" data-column="country" data-id="" data-table="addresses" id="addresses_country"  type="text">
           </div>
           <div class="container fifth" >
-              <label class="label" for="addresses_zip">PLZ</label> 
+              <label class="label" for="addresses_zip">{{zip}}</label> 
               <input class="input border data_addresses text" data-column="zip" data-id="" data-table="addresses" id="addresses_zip"  type= "text">
           </div>
           <div class="container threefifth">
-              <label class="label" for="addresses_city">Ort</label> 
+              <label class="label" for="addresses_city">{{country}}</label> 
               <input class="input data_addresses border text" data-column="city" data-id="" data-table="addresses" id="addresses_city"  type="text">
           </div>
         </div>
         <div class="row">
           <div class="container">
-              <label class="label" for="addresses_email">E-mail</label> 
+              <label class="label" for="addresses_email">{{email}}</label> 
               <select class="select data_addresses border text" data-column="email" data-id="" data-table="addresses" id="addresses_email" type="text" multiple></select>
           </div>
         </div>
         <div class="row">
           <div class="container half" >
-              <label class="label" for="addresses_phone">Telefon</label> 
+              <label class="label" for="addresses_phone">{{phone}}</label> 
               <input class="input border text" data-column="phone" data-id="" data-table="addresses" id="addresses_phone" type="text">
           </div>
         </div>
         <div class="row">
           <div class="container twothird" >
-              <label class="label" for="addresses_iban">Kontonummer</label> 
+              <label class="label" for="addresses_iban">{{bankaccount}}</label> 
               <input class="input border text" data-column="iban" data-id="" data-table="addresses" id="addresses_iban" type="text">
           </div>
           <div class="container third">
-              <label class="label" for="addresses_bic">BIC</label> 
+              <label class="label" for="addresses_bic">{{bic}}</label> 
               <input class="input border text" data-column="bic" data-id="" data-table="addresses" id="addresses_bic" type="text">
           </div>
         </div>
         <div class="row">
           <div class="container half" >
-              <label class="label" for="addresses_vatid">USt-Id</label> 
+              <label class="label" for="addresses_vatid">{{vatid}}</label> 
               <input class="input border text" data-column="vatid" data-id="" data-table="addresses" id="addresses_vatid" type="text">
           </div>
           <div class="container half">
-              <label class="label" for="addresses_lang">Sprache</label> 
+              <label class="label" for="addresses_lang">{{language}}</label> 
               <input class="input border text" data-column="lang" data-id="" data-table="addresses" id="addresses_lang" type="text">
           </div>
         </div>
       </form>
     </div>
     <footer class="container right-align padding-16">
-      <button class="button theme-light margin-right border" onclick="myapp.closeDialog('Address');"><span class="icon-close" style="font-size: 16px;"></span>Abbrechen</button>
-      <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="addresses.save();"><span class="icon-save" style="font-size: 16px;"></span>Speichern</button>
+      <button class="button theme-light margin-right border" onclick="myapp.closeDialog('Address');"><span class="icon-close" style="font-size: 16px;"></span>{{cancel}}</button>
+      <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="addresses.save();"><span class="icon-save" style="font-size: 16px;"></span>{{save}}</button>
     </footer>
   </div>
 </div>
index a4d752a..5bbbd8e 100644 (file)
@@ -29,14 +29,14 @@ let addresses = {
         // },
         rowContext:function(e, row){ e.preventDefault(); },
           columns: [
-            {title: "Nr.", field: "clientnumber",headerFilter:"input" },
-            {title: "Name", field: "receipient",headerFilter:"input" },
-            {title: "Adresse",field: "address" }, 
-            {title: "PLZ", field: "zip" },
-            {title: "Ort",field: "city"},
-            {title: "Land",field: "country"},
-            {title: "E-mail",field: "email",formatter:formatters.ArrayToString},
-            {title: "Tel.",field: "phone"},
+            {title: lbl[preferences.global.language].clientnumber_short, field: "clientnumber",headerFilter:"input" },
+            {title: lbl[preferences.global.language].companyname, field: "receipient",headerFilter:"input" },
+            {title: lbl[preferences.global.language].address,field: "address" }, 
+            {title: lbl[preferences.global.language].zip, field: "zip" },
+            {title: lbl[preferences.global.language].city,field: "city"},
+            {title: lbl[preferences.global.language].country,field: "country"},
+            {title: lbl[preferences.global.language].email,field: "email",formatter:formatters.ArrayToString},
+            {title: lbl[preferences.global.language].phone,field: "phone"},
         ]
       });
       if (addresses.tblselector == null){
@@ -62,10 +62,10 @@ let addresses = {
         selectable: 1,
         rowContext:function(e, row){ e.preventDefault(); },
           columns: [
-            {title:"Name", field:"receipient",headerFilter:"input"},
-            {title: "Adresse",field: "address" }, 
-            {title: "PLZ", field: "zip" },
-            {title: "Ort",field: "city"},
+            {title:lbl[preferences.global.language].comanyname, field:"receipient",headerFilter:"input"},
+            {title: lbl[preferences.global.language].address,field: "address" }, 
+            {title: lbl[preferences.global.language].zip, field: "zip" },
+            {title: lbl[preferences.global.language].city,field: "city"},
             //,bottomCalcFormatter:"money", bottomCalcFormatterParams:{  decimal:",",  thousand:".", symbol:"€", symbolAfter:"p", precision:2}
         ]
       });
@@ -105,7 +105,7 @@ let addresses = {
         db.query("select count(*) as cnt from addresses").then(adrcnt => {
           let clnum=moment().format('YYMM') + timecalc.lpad(adrcnt.cnt,4,'0');
           console.log("New addresse ID",newid.id);
-          db.execAsync("INSERT INTO addresses (id,clientnumber,receipient) VALUES ('"+newid.id+"','"+ clnum+"','Neue Addresse');").then( res =>{
+          db.execAsync("INSERT INTO addresses (id,clientnumber,receipient) VALUES ('"+newid.id+"','"+ clnum+"',"+ lbl[preferences.global.language].address_new+");").then( res =>{
             addresses.gettbldata(newid.id);
             //addresses.current_id = fsel[0].id;
             addresses.edit();
@@ -117,9 +117,9 @@ let addresses = {
       var sel = addresses.tbl.getSelectedData();
       //delcallback = ;
       if (sel[0]) {
-        myapp.confirm("Addresse löschen","Sind Sie Sicher dass Sie die Adresse löschen möchten?","Löschen","Abbrechen","addresses.remove();");
+        myapp.confirm(lbl[preferences.global.language].address_delete,lbl[preferences.global.language].address_delete_question,lbl[preferences.global.language].delete,lbl[preferences.global.language].cancel,"addresses.remove();");
         // document.getElementById("btndlgdeleterowok").setAttribute("onclick","invoices.remove();");
-        // document.getElementById("dlgdeleterow").style.display = 'block';
+        // document.getElementById("dlgdeleterow").address_deletetyle.display = 'block';
       }
     },
     remove: function(data){
index 01c84d9..fb6b280 100644 (file)
@@ -1,9 +1,9 @@
 <div class="container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
+  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
   <div class="bar-item PageHeadTitle">
     Buchungen
-  </div><button class="bar-item toolbarbtn right" onclick="bookings.confirmremove();"><span class="icon-trash" style="font-size: 16px;"></span>löschen</button> <button class="bar-item toolbarbtn right" onclick="bookings.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>duplizieren</button> <button class=
+  </div><button class="bar-item toolbarbtn right" onclick="bookings.confirmremove();"><span class="icon-trash" style="font-size: 16px;"></span>{{delete}}</button> <button class="bar-item toolbarbtn right" onclick="bookings.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button> <button class=
   "bar-item toolbarbtn right" onclick="bookings.edit();"><span class="icon-edit" style="font-size: 16px;"></span> editieren</button> <button class="bar-item toolbarbtn right" onclick=
-  "bookings.add();"><span class="icon-add" style="font-size: 16px;"></span> neu</button>
+  "bookings.add();"><span class="icon-add" style="font-size: 16px;"></span> {{new}}</button>
 </div>
 <div id="tbl_bookings"></div>
\ No newline at end of file
index 82ad570..a23acf0 100644 (file)
@@ -1,8 +1,9 @@
 <div class="display-container animate-opacity">
-  <div class="container bar moduletoolbar">
-    <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
+  <div class="container bar toolbar">
+    <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
     <div class="bar-item PageHeadTitle">
-      Datensätze
+      {{datasets}}
     </div>
   </div>
-</div>
\ No newline at end of file
+</div>
+<div id="tl_datasets"></div>
\ No newline at end of file
index 7f8afc5..0d709c7 100644 (file)
@@ -1,5 +1,19 @@
 let datasets = {
   viewmodule: function(){
-    myapp.viewmodule('datasets');
+    myapp.loadmodule('datasets','datasets').then(result => {
+      myapp.viewmodule('datasets');
+    });
+  },
+  init: function(){
+
+  },
+  clone: function(){
+
+  },
+  confirmRemove: function(){
+
+  },
+  remove: function(){
+
   }
 }
\ No newline at end of file
index f57c523..84703fa 100644 (file)
 <div class="container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="invoices.gettbldata();myapp.viewmodule('invoices');"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
-  <div class="bar-item PageHeadTitle">Rechnung</div>
-  <button class="bar-item toolbarbtn" id="btnCreateInvoice" onclick="invoice.createPDF();"><span class="icon-pdf" style="font-size: 16px;"></span>erstellen</button> 
-  <button class="bar-item toolbarbtn" id="btnOpenPDF" onclick=
-  "invoice.openPDF();"><span class="icon-viewpdf" style="font-size: 16px;"></span>öffnen</button> 
-  <button class="bar-item toolbarbtn" onclick="invoice.importPDF();"><span class="icon-upload" style=
-  "font-size: 16px;"></span>importieren</button>
-  <button class="bar-item toolbarbtn" onclick="invoice.dlgSelectAddress();"><span class="icon-contacts" style="font-size: 16px;"></span>Adressen</button>
-  <button class="bar-item toolbarbtn" id="btnSendEmail" onclick="invoice.sendEmail();"><span class="icon-email" style="font-size: 16px;"></span>senden</button> 
-  <button class="bar-item toolbarbtn right" onclick="invoice.confirmRemoveBooking();"><span class="icon-trash" style=
-  "font-size: 16px;"></span>löschen</button>
-  <button class="bar-item toolbarbtn right" onclick="invoice.duplicateBoking();"><span class="icon-duplicate" style="font-size: 16px;"></span>duplizieren</button>
-  <button class="bar-item toolbarbtn right" onclick="invoice.editBooking();"><span class="icon-edit" style="font-size: 16px;"></span>bearbeiten</button> 
-  <button class="bar-item toolbarbtn right" onclick="invoice.addBooking();"><span class="icon-add" style="font-size: 16px;"></span>neu</button>
+  <button class="bar-item toolbarbtn" onclick="invoices.gettbldata();myapp.viewmodule('invoices');"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
+  <div class="bar-item PageHeadTitle">{{invoice}}</div>
+  <button class="bar-item toolbarbtn right" id="btnCreateInvoice" onclick="invoice.createPDF();"><span class="icon-prnnt" style="font-size: 16px;"></span>{{pdf_create}}</button> 
+  <button class="bar-item toolbarbtn right" id="btnOpenPDF" onclick="invoice.openPDF();"><span class="icon-pdf" style="font-size: 16px;"></span>{{pdf_open}}</button> 
+  <button class="bar-item toolbarbtn right" onclick="invoice.importPDF();"><span class="icon-download" style=
+  "font-size: 16px;"></span>{{pdf_import}}</button>
+  
+  <button class="bar-item toolbarbtn right" id="btnSendEmail" onclick="invoice.sendSMTP();"><span class="icon-email" style="font-size: 16px;"></span>{{email_send}}</button> 
+  <button class="bar-item toolbarbtn right" id="btnSendEmail" onclick="invoice.openInMailApp();"><span class="icon-email" style="font-size: 16px;"></span>{{email_open}}</button> 
+  
 </div>
 <div class="cell-row">
   <div class="container cell" style="max-height: calc(100vh - 56px);width: 400px;background-color: #e4e4e4;overflow-y: scroll;">
     <form id="frm_invoice">
     <div class="container padding">
       <input class="data_invoices" data-column="id" data-id="" data-table="invoices" id="invoices_id" name="invoices_id" type="hidden" value="">
-      <input class="data_invoices" data-column="pdffile" data-id="" data-table="invoices" id=
-      "invoices_pdffile" name="invoices_pdffile" type="hidden" value="">
+      <input class="data_invoices" data-column="pdffile" data-id="" data-table="invoices" id="invoices_pdffile" name="invoices_pdffile" type="hidden" value="">
       <input class="data_invoices" data-column="id_accounts" data-id="" data-table="invoices" id="invoices_id_accounts" name="invoices_id_accounts" type="hidden" value="">
       <div class="row">
         <div class="cell" style="width: 130px;">
-          <label class="label" for="invoices_invoicetype">Typ</label> 
+          <label class="label" for="invoices_invoicetype">{{invoice_type}}</label> 
           <select class="select border data_invoices" data-column="invoicetype" data-id="" data-selected="" data-table="invoices" id="invoices_invoicetype"  onchange="dataform.savefield(this);" value=""></select>
         </div>
         <div class="cell" style="width: 130px;">
-          <label class="label" for="invoices_status">Status</label> 
+          <label class="label" for="invoices_status">{{status}}</label> 
           <select class="select border data_invoices" data-column="status" data-id="" data-selected="" data-table="invoices" id="invoices_status" onchange="dataform.savefield(this);invoice.changedStatus(this);" value=""></select>
         </div>
       </div>
       <div class="row" id="row_invoicetemplate">
         <div class="cell" style="width: 300px;">
-          <label class="label" for="invoices_id_template">Druck-Vorlage</label> 
+          <label class="label" for="invoices_id_template">{{report_template}}</label> 
           <select class="select border data_invoices" data-column="id_template" data-id="" data-selected="" data-table="invoices" id="invoices_id_template" name="invoices_id_template" onchange="dataform.savefield(this);" value="">
           </select>
         </div>
       </div>
-      <!-- <div class="row" id="row_mailtemplate">
-        <div class="cell" style="width: 300px;">
-          <label class="label" for="invoices_mailtemplate">E-Mail-Vorlage</label> 
-          <select class="select border data_invoices" data-column="mailtemplate" data-id="" data-selected="" data-table="invoices" id="invoices_mailtemplate" name="invoices_mailtemplate" onchange="dataform.savefield(this);" value="">
-          </select>
-        </div>
-      </div> -->
       <div class="row">
         <div class="cell" style="max-width: 140px;">
-          <label class="label" for="invoices_invoicedate">Datum</label> 
+          <label class="label" for="invoices_invoicedate">{{invoice_date}}</label> 
           <input class="input border date data_invoices datefield" data-column="invoicedate" data-id="" data-table="invoices" id="invoices_invoicedate"  onblur="dataform.savefield(this);invoice.setInvoiceDates();" type="date">
         </div>
         <div class="cell" style="width: 40px;">
-          <label class="label" for="invoices_deadlinedays">Tage</label> 
+          <label class="label" for="invoices_deadlinedays">{{deadline_days}}</label> 
           <input class="input border number data_invoices right-align" data-column="deadlinedays" data-id="" data-table="invoices" id="invoices_deadlinedays" onblur="dataform.savefield(this);invoice.setDeadlineDate();" type="number">
         </div>
         <div class="cell" style="max-width: 140px;">
-          <label class="label" for="invoices_deadlinedate">Fälligkeit</label> 
+          <label class="label" for="invoices_deadlinedate">{{daedline_date}}</label> 
           <input class="input border date data_invoices datefield" data-column="deadlinedate" data-id="" data-table="invoices" id="invoices_deadlinedate" onblur="dataform.savefield(this);invoice.setDeadlineDays();" type="date">
         </div>
       </div>
       <div class="row">
         <div class="cell" style="width: 100px;">
-          <label class="label" for="invoices_businessyear">G.Jahr</label> 
+          <label class="label" for="invoices_businessyear">{{businessyear}}</label> 
           <input class="input border number right-align data_invoices" data-column="businessyear" data-id="" data-table="invoices" id="invoices_businessyear" onblur="dataform.savefield(this);" type="number">
         </div>
         <div class="cell" style="width: 120px;">
-          <label class="label" for="invoices_payedamount">Bezahlt</label> 
+          <label class="label" for="invoices_payedamount">{{payedamount}}</label> 
           <input class="input border currency right-align data_invoices" data-column="payedamount" data-id="" data-table="invoices" id="invoices_payedamount"  onblur="dataform.savefield(this);" type="number">
         </div>
       </div>
       <div class="row">
         <div class="cell" style="width: 400px;">
-          <label class="label" for="invoices_accountname">Addressat</label> <input class="input border text data_invoices" data-column="accountname" data-id="" data-table="invoices" id="invoices_accountname" name="invoices_accountname"
-          onblur="dataform.savefield(this);" placeholder="Name" type="text">
+          <label class="label" for="invoices_reference">{{reference}}</label> <input class="input border text data_invoices" data-column="reference" data-id="" data-table="invoices" id="invoices_reference" onblur="dataform.savefield(this);" type="text">
+        </div>
+      </div>
+      <div class="row">
+        <div class="cell" style="width: 350px;">
+          <label class="label" for="invoices_accountname">{{addressee}}</label> <textarea class="input border text data_invoices" data-column="accountname" data-id="" data-table="invoices" id="invoices_accountname" name="invoices_accountname"
+          onblur="dataform.savefield(this);" placeholder="{{companyname}}"></textarea>
+        </div>
+        <div class="cell"style="with: 50px;">
+          <label class="label">&nbsp;</label>
+          <button class="bar-item moduletoolbar" onclick="invoice.dlgSelectAddress(); return false;"><span class="icon-contacts" style="font-size: 22px;"></span>{{addresses}}</button>
         </div>
       </div>
       <div class="row">
         <div class="cell" style="width: 400px;">
-          <input class="input border text data_invoices" data-column="accountaddress" data-id="" data-table="invoices" id="invoices_accountaddress"  onblur="dataform.savefield(this);" placeholder="Addresse"
+          <input class="input border text data_invoices" data-column="accountaddress" data-id="" data-table="invoices" id="invoices_accountaddress"  onblur="dataform.savefield(this);" placeholder="{{address}}"
           type="text">
         </div>
       </div>
       <div class="row">
         <div class="cell" style="width: 40px;">
-          <input class="input border text data_invoices" data-column="accountcountry" data-id="" data-table="invoices" id="invoices_accountcountry"  onblur="dataform.savefield(this);" placeholder="Land" type=
+          <input class="input border text data_invoices" data-column="accountcountry" data-id="" data-table="invoices" id="invoices_accountcountry"  onblur="dataform.savefield(this);" placeholder="{{country}}" type=
           "text">
         </div>
         <div class="cell" style="width: 90px;">
-          <input class="input border text data_invoices" data-column="accountzip" data-id="" data-table="invoices" id="invoices_accountzip"  onblur="dataform.savefield(this);" placeholder="PLZ" type="text">
+          <input class="input border text data_invoices" data-column="accountzip" data-id="" data-table="invoices" id="invoices_accountzip"  onblur="dataform.savefield(this);" placeholder="{{zip}}" type="text">
         </div>
         <div class="cell" style="width: 270px;">
-          <input class="input border text data_invoices" data-column="accountcity" data-id="" data-table="invoices" id="invoices_accountcity"  onblur="dataform.savefield(this);" placeholder="Ort" type="text">
+          <input class="input border text data_invoices" data-column="accountcity" data-id="" data-table="invoices" id="invoices_accountcity"  onblur="dataform.savefield(this);" placeholder="{{city}}" type="text">
         </div>
       </div>
       <div class="row">
         <div class="cell" style="width: 200px;">
-          <input class="input border text data_invoices" data-column="clientnumber" data-id="" data-table="invoices" id="invoices_clientnumber"  onblur="dataform.savefield(this);" placeholder="Kunden-Nr" type=
+          <input class="input border text data_invoices" data-column="clientnumber" data-id="" data-table="invoices" id="invoices_clientnumber"  onblur="dataform.savefield(this);" placeholder="{{clientnumber}}" type=
           "text">
         </div>
         <div class="cell" style="width: 200px;">
-          <input class="input border text data_invoices" data-column="accountvatid" data-id="" data-table="invoices" id="invoices_accountvatid"  onblur="dataform.savefield(this);" placeholder="USt.-ID" type="text">
-        </div>
-      </div>
-      <div class="row">
-        <div class="cell" style="width: 400px;">
-          <label class="label" for="invoices_reference">Referenz</label> <input class="input border text data_invoices" data-column="reference" data-id="" data-table="invoices" id="invoices_reference" onblur="dataform.savefield(this);" type="text">
+          <input class="input border text data_invoices" data-column="accountvatid" data-id="" data-table="invoices" id="invoices_accountvatid"  onblur="dataform.savefield(this);" placeholder="{{vatid}}" type="text">
         </div>
       </div>
       
+      
     </div>
     </form>
   </div>
   <div class="cell">
     <div class="row">
-      <label class="label" for="invoices_headertext">Begrüßung</label>
-      <textarea class="input border data_invoices richeditarea" style="width: 100%;"  data-id="" data-column="headertext" data-table="invoices"  id="invoices_headertext" ></textarea>
-    </div>
-    <div class="row">
+      <div class="bar moduletoolbar">
+        <div class="bar-item subHeadTitle">{{invoice_items}}</div>
+        <button class="bar-item toolbarbtn right" onclick="invoice.confirmRemoveBooking();"><span class="icon-trash" style=
+          "font-size: 16px;"></span>{{delete}}</button>
+          <button class="bar-item toolbarbtn right" onclick="invoice.duplicateBoking();"><span class="icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button>
+          <button class="bar-item toolbarbtn right" onclick="invoice.editBooking();"><span class="icon-edit" style="font-size: 16px;"></span>{{edit}}</button> 
+          <button class="bar-item toolbarbtn right" onclick="invoice.addBooking();"><span class="icon-add" style="font-size: 16px;"></span>{{new}}</button>
+      </div>
       <div id="tbl_invoicebookings"></div>
     </div>
-    <div class="row">
-      <label class="label" for="invoices_footertext">Abschluss Text</label>
+    <div class="row" style="background-color: #e4e4e4;">
+      <label class="label" for="invoices_headertext">{{preface}}</label>
+      <textarea class="input border data_invoices richeditarea" style="width: 100%;"  data-id="" data-column="headertext" data-table="invoices"  id="invoices_headertext" ></textarea>
+    </div>
+    <div class="row" style="background-color: #e4e4e4;">
+      <label class="label" for="invoices_footertext">{{annociation}}</label>
       <textarea class="input border data_invoices richeditarea" style="width: 100%;" data-id="" data-column="headertext" data-table="invoices"  id="invoices_footertext" ></textarea>
     </div>
   </div>
 <div id="dlgInvoiceBooking" class="modal" >
   <div class="modal-content animate-opacity card-4" >
     <header>
-      <div class="bar-item SubHeadTitle">Buchung</div>
+      <div class="bar-item SubHeadTitle">{{invoice_item}}</div>
       <span onclick="myapp.closeDialog('InvoiceBooking');" class="button display-topright">&times;</span>
     </header>
     <div class="container padding">
         <div class="row">
             <div class="container row">
               <div class="cell" style="width: 150px;">
-                <label for="invoicebooking_sku" class="label">SKU</label>
+                <label for="invoicebooking_sku" class="label">{{sku}}</label>
                 <input type="text" data-id="" data-column="sku" data-table="bookings" class="input data_invoicebooking border text"   id="invoicebooking_sku" name="invoicebooking_sku"/>
               </div>
               <div class="cell" style="width: 450px;">
-                <label for="invoicebooking_name" class="label">Name</label>
+                <label for="invoicebooking_name" class="label">{{item_name}}</label>
                 <input type="text" data-id="" data-column="name" data-table="bookings" class="input border text data_invoicebooking"   id="invoicebooking_name" name="invoicebooking_name"/>
               </div>
             </div>
             <div class="container row">
               <div class="cell" style="width: 50px;">
-                <label for="invoicebooking_quantity" class="label">Anzahl</label>
+                <label for="invoicebooking_quantity" class="label">{{quantity}}</label>
                 <input type="number" data-id="" data-column="quantity" data-table="bookings" class="input data_invoicebooking border number  right-align  " id="invoicebooking_quantity" name="invoicebooking_quantity"    onblur="invoice.calculate();"/>
               </div>
               <div class="cell"  style="width: 90px;">
-                <label for="invoicebooking_unit" class="label">Einheit</label>
+                <label for="invoicebooking_unit" class="label">{{unit}}</label>
                 <input type="text" data-id="" list="list_invoicebooking_units" data-column="unit" data-table="bookings" class="input data_invoicebooking border text"   id="invoicebooking_unit" name="invoicebooking_unit"    onblur=""/>
                 <datalist id="list_invoicebooking_units"></datalist>
               </div>
               <div class="cell" style="width: 100px;">
-                <label for="invoicebooking_unitamount" class="label">Preis</label>
+                <label for="invoicebooking_unitamount" class="label">{{unitamount}}</label>
                 <input type="number" data-id="" data-column="unitamount" data-table="bookings" class="input data_invoicebooking border currency right-align "   id="invoicebooking_unitamount" name="invoicebooking_unitamount"    onblur="invoice.calculate();"/>
               </div>
               <div class="cell" style="width: 120px;" id="fld_taxpercent">
-                <label for="invoicebooking_taxpercent" class="label">MwSt.(%)</label>
+                <label for="invoicebooking_taxpercent" class="label">{{tax}}(%)</label>
                 <input type="number" data-id="" data-column="taxpercent" data-table="bookings" class="input data_invoicebooking border percent right-align  "   id="invoicebooking_taxpercent" name="invoicebooking_taxpercent" onblur="invoice.calculate();"/>
               </div>
               <div class="cell" style="width: 120px;" id="fld_taxamount" >
-                <label for="invoicebooking_taxamount" class="label">Mehrwehrtsteuer</label>
+                <label for="invoicebooking_taxamount" class="label">{{tax}}</label>
                 <input type="number" data-id="" data-column="taxamount" data-table="bookings" class="input data_invoicebooking border currency right-align" id="invoicebooking_taxamount" name="invoicebooking_taxamount" onblur="invoice.calculate();"/>
               </div>
               <div class="cell" style="width: 120px;" id="fld_netamount">
-                <label for="invoicebooking_netamount" class="label">Netto</label>
+                <label for="invoicebooking_netamount" class="label">{{netamount}}</label>
                 <input type="number" data-id="" data-column="netamount" data-table="bookings" class="input data_invoicebooking border currency right-align readonly"   id="invoicebooking_netamount" name="invoicebooking_netamount" readonly />
               </div>
               <div class="cell" style="width: 120px;" id="fld_grossamount">
-                <label for="invoicebooking_grossamount" class="label">Brutto</label>
+                <label for="invoicebooking_grossamount" class="label">{{grossamount}}</label>
                 <input type="number" data-id="" data-column="grossamount" data-table="bookings" class="input data_invoicebooking border currency right-align readonly"   id="invoicebooking_grossamount" name="invoicebooking_grossamount" readonly />
               </div>
               
             </div>
             <div class="container row">
               <div class="cell" style="width: 600px;">   
-                <label for="invoicebooking_description" class="label">Beschreibung</label>
+                <label for="invoicebooking_description" class="label">{{description}}</label>
                 <textarea class="input border data_invoicebooking richtextarea" style="height: 200px;"  data-id="" data-column="description" data-table="bookings"  id="invoicebooking_description" name="invoicebooking_description"></textarea>
               </div>
             </div>
       </form>
     </div>
     <footer class="container right-align padding-16">
-      <button class="button theme-light margin-right border" onclick="myapp.closeDialog('InvoiceBooking');"><span class="icon-close" style="font-size: 16px;"></span>Abbrechen</button>
-      <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="invoice.saveBooking();"><span class="icon-save" style="font-size: 16px;"></span>Speichern</button>
+      <button class="button theme-light margin-right border" onclick="myapp.closeDialog('InvoiceBooking');"><span class="icon-close" style="font-size: 16px;"></span>{{cancel}}</button>
+      <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="invoice.saveBooking();"><span class="icon-save" style="font-size: 16px;"></span>{{save}}</button>
     </footer>
   </div>
 </div>
\ No newline at end of file
index ebc0f20..7b2189d 100644 (file)
@@ -98,7 +98,7 @@ let invoice = {
       selectable: 1,
       rowContext:function(e, row){ e.preventDefault(); },
         columns: [
-          {title: "DAtei",field: "file",formatter:"html"}, 
+          {title: lbl[preferences.global.language].files,field: "file",formatter:"html"}, 
       ]
     });
     invoice.getReportList();   
@@ -128,14 +128,14 @@ let invoice = {
       rowContext:function(e, row){ e.preventDefault(); },
         columns: [
           //{title:"SKU", field:"sku"},
-          {title: "Produkt",field: "displayitem",formatter:"html"}, 
-          {title: "Anzahl", field: "quantity",hozAlign:"right",width: 50 },
-          {title: "Einheit",field: "unit",width: 100 },
-          {title: "Preis", field: "unitamount",headerSort: false,hozAlign:"right",width: 80, formatter:formatters.Currency},
-          {title: "MwSt (%)", field: "vatpercent",headerSort: false,hozAlign:"right",width: 70,  formatter:formatters.Percent},
-          {title: "Netto", field: "netamount",headerSort: false,hozAlign:"right",width: 100, formatter:formatters.Currency,bottomCalc:"sum",bottomCalcFormatter:formatters.Currency},
-          {title: "MwSt", field: "taxamount",headerSort: false, hozAlign:"right",width: 90,formatter:formatters.Currency,bottomCalc:"sum",bottomCalcFormatter:formatters.Currency},
-          {title: "Brutto", field: "grossamount",headerSort: false, hozAlign:"right",width: 100, formatter:formatters.Currency,bottomCalc:"sum",bottomCalcFormatter:formatters.Currency}
+          {title: lbl[preferences.global.language].product,field: "displayitem",formatter:"html"}, 
+          {title: lbl[preferences.global.language].quantity, field: "quantity",hozAlign:"right",width: 50 },
+          {title: lbl[preferences.global.language].unit,field: "unit",width: 100 },
+          {title: lbl[preferences.global.language].unitamount, field: "unitamount",headerSort: false,hozAlign:"right",width: 80, formatter:formatters.Currency},
+          {title: lbl[preferences.global.language].tax +"(%)", field: "vatpercent",headerSort: false,hozAlign:"right",width: 70,  formatter:formatters.Percent},
+          {title: lbl[preferences.global.language].netamount, field: "netamount",headerSort: false,hozAlign:"right",width: 100, formatter:formatters.Currency,bottomCalc:"sum",bottomCalcFormatter:formatters.Currency},
+          {title: lbl[preferences.global.language].tax, field: "taxamount",headerSort: false, hozAlign:"right",width: 90,formatter:formatters.Currency,bottomCalc:"sum",bottomCalcFormatter:formatters.Currency},
+          {title: lbl[preferences.global.language].grossamount, field: "grossamount",headerSort: false, hozAlign:"right",width: 100, formatter:formatters.Currency,bottomCalc:"sum",bottomCalcFormatter:formatters.Currency}
       ]
     });
     
@@ -182,12 +182,19 @@ let invoice = {
     }).catch(e => { console.log(e);});
   },
   dlgSelectAddress(){
+    if (document.getElementById("dlgSelectAddress")){
+      console.log("Address dialog is loaded");
+    } else {
+      console.log("Address dialog NOT loaded!");
+      return false;
+    }
     db.queryarray("select * from addresses order by receipient").then(data => {
       addresses.tblselector.setData(data).then(dd => {
-        if ((document.getElementById("invocies_id_account")) && (document.getElementById("invocies_id_account").value != '')){
+        if ((document.getElementById("invoicies_id_account")) && (document.getElementById("invocies_id_account").value != '')){
           addresses.tblselector.selectRow(document.getElementById("invoices_id_accounts").value);
         }
       });
+      
       myapp.viewdialog("SelectAddress");
     }).catch(e => { console.log(e);});;
 },
@@ -345,12 +352,12 @@ let invoice = {
   },
   createPDF: function(){
     //let idreport = invoice.selects["invoices_id_template"].selected();
-    let idreport= 'invoice/' + invoice.selects["invoices_id_template"].selected();
+    let idreport= invoice.selects["invoices_id_template"].selected();
     let fname = document.getElementById("invoices_businessyear").value +"/" + preferences.defaultdata.fileprefix +document.getElementById("invoices_reference").value;
     //"book":{"type":"queryarray","sql":"SELECT sku, replace(quantity,'.',',') as quantity, replace(printf('%.2f',unitamount),'.',',') as unitamount, unit, name, description, replace(printf('%.2f',taxamount),'.',',') as taxamount, replace(printf('%.2f',taxpercent),'.',',') as taxpercent, replace(printf('%.2f',netamount),'.',',') as netamount FROM bookings where id_invoices= '%%id%%';"},
 //"vat":{"type":"query","sql":"select case when count(taxpercent)=1 then taxpercent else null end as taxpercent from (select replace(taxpercent,'.',',') as taxpercent from bookings where id_invoices= '%%id%%' group by taxpercent) xx;"}
 //}
-    db.query("select inv.accountvatid, inv.clientnumber, inv.payedamount, strftime('%d.%m.%Y',inv.invoicedate) as invoicedate, strftime('%d.%m.%Y',inv.deadlinedate) as deadlinedate, inv.footertext, inv.reference, inv.headertext, inv.pdffile, inv.offerreference, inv.referencenumber, inv.accountname, inv.accountaddress, inv.accountzip, inv.accountcity, inv.accountcountry, replace(printf('%.2f',sum(bk.netamount)),'.',',') as netamount,inv.footertext,inv.headertext,replace(printf('%.2f',sum(bk.taxamount)),'.',',') as vatamount, replace(printf('%.2f',sum(bk.netamount + bk.taxamount)),'.',',') as grossamount from invoices inv join bookings bk on (inv.id=bk.id_invoices) where inv.id = '"+ invoice.current_id +"';").then(repdata => {
+    db.query("select inv.id,inv.accountvatid, inv.clientnumber, inv.payedamount, strftime('%d.%m.%Y',inv.invoicedate) as invoicedate, strftime('%d.%m.%Y',inv.deadlinedate) as deadlinedate, inv.footertext, inv.reference, inv.headertext, inv.pdffile, inv.offerreference, inv.referencenumber, inv.accountname, inv.accountaddress, inv.accountzip, inv.accountcity, inv.accountcountry, replace(printf('%.2f',sum(bk.netamount)),'.',',') as netamount,inv.footertext,inv.headertext,replace(printf('%.2f',sum(bk.taxamount)),'.',',') as vatamount, replace(printf('%.2f',sum(bk.netamount + bk.taxamount)),'.',',') as grossamount from invoices inv join bookings bk on (inv.id=bk.id_invoices) where inv.id = '"+ invoice.current_id +"';").then(repdata => {
       db.queryarray("SELECT sku, replace(quantity,'.',',') as quantity, replace(printf('%.2f',unitamount),'.',',') as unitamount, unit, name, description, replace(printf('%.2f',taxamount),'.',',') as taxamount, replace(printf('%.2f',taxpercent),'.',',') as taxpercent, replace(printf('%.2f',netamount),'.',',') as netamount FROM bookings where id_invoices= '"+ invoice.current_id +"';").then(book => {
         repdata["book"] = book;
         let gtaxpercent = book[0].taxpercent;
@@ -388,16 +395,16 @@ let invoice = {
       //location.href=api + 'report.cgi?open=' + encodeURIComponent(document.getElementById("invoices_pdffile").value);
     }
   },
-  sendEmail: function(){
+  sendSMTP: function(){
     db.query("select inv.accountvatid, inv.clientnumber, inv.payedamount, strftime('%d.%m.%Y',inv.invoicedate) as invoicedate, strftime('%d.%m.%Y',inv.deadlinedate) as deadlinedate, inv.footertext, inv.reference, inv.headertext, inv.pdffile, inv.offerreference, inv.referencenumber, inv.accountname, inv.accountaddress, inv.accountzip, inv.accountcity, inv.accountcountry, replace(printf('%.2f',sum(bk.netamount)),'.',',') as netamount,inv.footertext,inv.headertext,replace(printf('%.2f',sum(bk.taxamount)),'.',',') as vatamount, replace(printf('%.2f',sum(bk.netamount + bk.taxamount)),'.',',') as grossamount from invoices inv join bookings bk on (inv.id=bk.id_invoices) where inv.id = '"+ invoice.current_id +"';").then(repdata => {
       let idacc = document.getElementById("invoices_id_accounts").value;
       db.query("select * from addresses where id='" + idacc+ "';").then( accdata => {
-        email.create(invoice.selects["invoices_mailtemplate"].selected(),repdata,accdata);
+        email.generate(invoice.selects["invoices_mailtemplate"].selected(),repdata,accdata);
       });
       
     });
     
-    email.openthunderbird()
+    
   },
   importPDF: function(){
     //document.getElementById("invfile_folder").value=;
@@ -415,7 +422,7 @@ let invoice = {
     //document.getElementById("invfile_file").click();
   },
   afterFileUpload: function(data){
-    console.log(data);
+    //console.log(data);
     if (data && data.file){
       document.getElementById("invoices_pdffile").value=data.file;
       dataform.savefield(document.getElementById("invoices_pdffile"));
@@ -423,7 +430,7 @@ let invoice = {
     invoice.hasPDF();
   },
   hasPDF: function(pdffile){
-    console.log("set PDF Button!" + document.getElementById("invoices_pdffile").value);
+    //console.log("set PDF Button!" + document.getElementById("invoices_pdffile").value);
     if (document.getElementById("invoices_pdffile").value != '' || pdffile != null){
       document.getElementById("btnOpenPDF").style.display = 'block';
     } else {
@@ -457,7 +464,7 @@ let invoice = {
   confirmRemoveBooking: function(){
     let sel = invoice.bookingtbl.getSelectedData();
     if (sel[0]){
-      myapp.confirm("Buchung löschen?","Sind Sie sicher dass sie  die ausgewählte(n) Buchunge(n) löschen möchten?","Löschen","Abbrechen",'invoice.removeBooking();');
+      myapp.confirm(lbl[preferences.global.language].invoice_item_delete,lbl[preferences.global.language].invoice_item_delete_question,lbl[preferences.global.language].delete,lbl[preferences.global.language].cancel,'invoice.removeBooking();');
     }
   },
   removeBooking: function(){
@@ -511,7 +518,7 @@ let invoice = {
     //console.log(sql);
     
   },
-  sendEmail: function(){
+  openInMailApp: function(){
 
     db.query("select * from addresses where id='"+ document.getElementById("invoices_id_accounts").value +"';").then(data => {
       let invref = document.getElementById("invoices_reference").value;
@@ -520,7 +527,7 @@ let invoice = {
       mdata["to"] = data.email;
       mdata["subject"] = 'Facture No.' + invref;
       mdata["body"] = 'Bonjour,<br/><br/>en annexe vous trouvez la facture ' + invref;
-      mdata.attachments = [preferences.global.currentdataset.datapath + '/invoice/' + document.getElementById("invoices_pdffile").value]
+      mdata.attachments = [preferences.global.currentdataset.datapath + '/invoice/' + document.getElementById("invoices_pdffile").value];
       email.openthunderbird(mdata);
     }).catch(e => { console.log(e);});;
     
index 0c0539c..012699a 100644 (file)
@@ -1,11 +1,11 @@
 <div class="display-container">
   <div class="container bar toolbar">
-    <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
+    <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
     <div class="bar-item PageHeadTitle">Rechnungen</div>
-    <button class="bar-item toolbarbtn right text-red" onclick="invoices.confirmremove();"><span class="icon icon-trash" style="font-size: 16px;"></span>löschen</button> 
+    <button class="bar-item toolbarbtn right text-red" onclick="invoices.confirmremove();"><span class="icon icon-trash" style="font-size: 16px;"></span>{{delete}}</button> 
     <button class="bar-item toolbarbtn right" onclick="invoices.duplicate();"><span class="icon icon-duplicate" style="font-size: 16px;"></span>dupl.</button> 
     <button class="bar-item toolbarbtn right" onclick="invoices.edit();"><span class="icon icon-edit" style="font-size: 16px;"></span>bearb.</button> 
-    <button class="bar-item toolbarbtn right" onclick="invoices.add();"><span class="icon icon-add" style="font-size: 16px;"></span>neu</button>
+    <button class="bar-item toolbarbtn right" onclick="invoices.add();"><span class="icon icon-add" style="font-size: 16px;"></span>{{new}}</button>
   </div>
 </div>
 <div id="tbl_invoices"></div>
\ No newline at end of file
index 9379e72..05719d4 100644 (file)
@@ -42,15 +42,15 @@ let invoices = {
           selectable: 1,
           rowContext:function(e, row){ e.preventDefault(); },
             columns: [
-              {title:"GJahr", field:"businessyear",headerFilter:"input",width: 80},
-              {title:"Datum", field:"invoicedate",headerFilter:"input",width: 100,formatter:"datetime",headerSort:true,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},
-              {title: "Typ", field: "invoicetype",headerFilter:"select",width: 180, headerFilterParams:{values:invoices.filters.doctypes},formatter:invoices.docTypeFormatter },
-              {title: "Konto", field: "accountname",headerFilter:"input",width: 300},
-              {title: "Referenz",field: "reference",headerFilter:"input"},
-              {title: "Status", field: "status",headerFilter:"select",width: 125, headerFilterParams:{values:invoices.filters.statustypes},formatter:invoices.statusTypeFormatter},
-              {title: "Netto", field: "netamount",hozAlign:"right",width: 125,formatter:formatters.Currency, headerSort: false, bottomCalc:"sum",bottomCalcFormatter:formatters.Currency},
-              {title: "MwSt.", field: "vatamount",hozAlign:"right",width: 125,formatter:formatters.Currency, bottomCalc:"sum", bottomCalcFormatter:formatters.Currency},
-              {title: "Brutto", field: "grossamount",hozAlign:"right",width: 125,headerSort: false,formatter:formatters.Currency, bottomCalc:"sum", bottomCalcFormatter:formatters.Currency},
+              {title:lbl[preferences.global.language].businessyear, field:"businessyear",headerFilter:"input",width: 80},
+              {title:lbl[preferences.global.language].invoicedate, field:"invoicedate",headerFilter:"input",width: 100,formatter:"datetime",headerSort:true,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},
+              {title: lbl[preferences.global.language].invoicetype, field: "invoicetype",headerFilter:"select",width: 180, headerFilterParams:{values:invoices.filters.doctypes},formatter:invoices.docTypeFormatter },
+              {title: lbl[preferences.global.language].companyname, field: "accountname",headerFilter:"input",width: 300},
+              {title: lbl[preferences.global.language].reference,field: "reference",headerFilter:"input"},
+              {title: lbl[preferences.global.language].status, field: "status",headerFilter:"select",width: 125, headerFilterParams:{values:invoices.filters.statustypes},formatter:invoices.statusTypeFormatter},
+              {title: lbl[preferences.global.language].netamount, field: "netamount",hozAlign:"right",width: 125,formatter:formatters.Currency, headerSort: false, bottomCalc:"sum",bottomCalcFormatter:formatters.Currency},
+              {title: lbl[preferences.global.language].tax, field: "vatamount",hozAlign:"right",width: 125,formatter:formatters.Currency, bottomCalc:"sum", bottomCalcFormatter:formatters.Currency},
+              {title: lbl[preferences.global.language].grossamount, field: "grossamount",hozAlign:"right",width: 125,headerSort: false,formatter:formatters.Currency, bottomCalc:"sum", bottomCalcFormatter:formatters.Currency},
               
           ]
         });
@@ -132,7 +132,7 @@ let invoices = {
     var sel = invoices.tbl.getSelectedData();
     //delcallback = ;
     if (sel[0]) {
-      myapp.confirm("Rechnung löschen","Sind Sie Sicher dass Sie die Rechnung löschen möchten?","Löschen","Abbrechen","invoices.remove();");
+      myapp.confirm(lbl[preferences.global.language].invoice_delete,lbl[preferences.global.language].invoice_delete_question,lbl[preferences.global.language].delete,lbl[preferences.global.language].cancel,"invoices.remove();");
       // document.getElementById("btndlgdeleterowok").setAttribute("onclick","invoices.remove();");
       // document.getElementById("dlgdeleterow").style.display = 'block';
     }
index e69de29..649daac 100644 (file)
@@ -0,0 +1,41 @@
+<div class="display-container bar toolbar">
+  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
+  <div class="bar-item PageHeadTitle">
+    {{mailtemplates}}
+  </div>
+  <button class="bar-item toolbarbtn text-red right" onclick="mailtemplates.confirmRemove();"><span class="icon-trash tlbicon"></span>{{delete}}</button> 
+  <button class="bar-item toolbarbtn right" onclick="mailtemplates.duplicate();"><span class="icon-duplicate tlbicon"></span>{{duplicate}}</button>
+  <button class="bar-item toolbarbtn right" onclick="mailtemplates.add();"><span class="icon-duplicate tlbicon"></span>{{new}}</button>
+  <button class="bar-item toolbarbtn right" onclick="mailtemplates.save();"><span class="icon-save tlbicon"></span>{{save}}</button>
+</div>
+
+<div class="display-container">
+  <div class="row">
+    <div class="cell" style="width: 400px;">
+      <div id="tbl_mailtemplates"></div>
+    </div>
+    <div class="cell">
+      <form id="frm_mailtemplates">
+        <div class="row">
+          
+          <div class="cell container half" >
+            <label class="label" for="mailtemplates_name">{{name}}</label> 
+            <input class="input data_mailtemplates border text" data-column="name" data-id="" data-table="mailtemplates" id="mailtemplates_name" type="text">
+          </div>
+          <div class="cell container half">
+            <label class="label" for="mailtemplates_categories">{{Category}}</label> 
+            <select class="select border data_mailtemplates" data-column="category" data-id="" data-selected="" data-table="mailtemplates" id="mailtemplates_categories"></select>
+          </div>
+          <div class="cell container">
+            <label class="label" for="mailtemplates_reportname">{{subject}}</label> 
+            <input class="input data_mailtemplates border text" data-column="subject" data-id="" data-table="mailtemplates" id="mailtemplates_subject" type="text">
+          </div>
+          <div class="cell container" >
+            <label class="label" for="mailtemplates_reportname">{{name}}</label> 
+            <textarea class="input data_mailtemplates border richtextarea" data-column="body" data-id="" data-table="mailtemplates" id="mailtemplates_body">
+          </div>
+        </div>
+        </form>
+    </div>
+  </div>
+</div>
index e69de29..8f3de09 100644 (file)
@@ -0,0 +1,46 @@
+let mailtemplate = {
+  tbl: null,
+  selects: {},
+  editors: {},
+  current_id: null,
+  viewmodule: function(){
+    myapp.loadmodule('mailtemplates','mailtemplates').then(result => {
+      myapp.viewmodule('mailtemplates');
+    });
+  },
+  init: function(){
+    mailtemplates.tbl = new Tabulator("#tbl_mailtemplates",{
+      headerFilterPlaceholder: "filter...",
+      height: "calc(100vh - 60px)",
+      layout: "fitColumns",
+      selectable: 1,
+      rowClick:function(e, row){
+        templates.edit();
+      },
+      rowContext:function(e, row){ e.preventDefault(); },
+        columns: [
+          {title: "Name", field: "name"},
+          {title: "Category", field: "category"}, 
+      ]
+    });
+  },
+  add: function(){
+
+  },
+  confirmRemove: function(){
+
+  },
+  remove: function(){
+
+  },
+  duplicate: function(){
+
+  },
+  edit: function(){
+
+  },
+  openSendDialog: function(){
+
+  },
+  open
+}
\ No newline at end of file
index 623ecfa..b10c5a2 100644 (file)
@@ -1,20 +1,15 @@
 {
   "modules":[
-    {"module":"invoices","icon":"icon-bill","name":"{{ invoices }}"},
-    {"module":"addresses","icon":"icon-contacts","name":"Adressen"},
-    {"module":"products","icon":"icon-product","name":"Produkte"},
-    {"module":"offers","icon":"icon-box","name":"Angebote"}
-  ],
+    {"module":"invoices","icon":"icon-bill","name":"{{invoices}}"},
+    {"module":"addresses","icon":"icon-contacts","name":"{{addresses}}"},
+    {"module":"products","icon":"icon-product","name":"{{products}}"},
+    {"module":"offers","icon":"icon-box","name":"{{offers}}"}
+      ],
   "config":[
-    {"module":"settings","icon":"icon-settings","name":"Einstellungen"},
-    {"module":"datasets","icon":"icon-datasets","name":"Datensätze"},
-    {"module":"backup","icon":"icon-backup","name":"Backup"}
-  ],
-  "quicklinks":[
-    {"module":"invoice","icon":"icon-bill","name":"neue Rechnung"},
-    {"module":"adresses","icon":"icon-contacts","name":"neue Adresse"},
-    {"module":"product","icon":"icon-product","name":"neues Produkt"},
-    {"module":"offer","icon":"icon-box","name":"neues Angebot"}
+    {"module":"settings","icon":"icon-settings","name":"{{settings}}"},
+    {"module":"datasets","icon":"icon-datasets","name":"{{datasets}}"},
+    {"module":"backup","icon":"icon-backup","name":"{{backup}}"},
+    {"module":"templates","icon":"icon-template","name":"{{reporttemplates}}"},
+    {"module":"mailtemplates","icon":"icon-mailtemplate","name":"{{mailtemplates}}"}
   ]
-  
 }
\ No newline at end of file
index faa3f00..97a9e28 100644 (file)
@@ -1,14 +1,14 @@
 <div class="container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="offers.gettbldata();myapp.viewmodule('offers');"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
+  <button class="bar-item toolbarbtn" onclick="offers.gettbldata();myapp.viewmodule('offers');"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
   <div class="bar-item PageHeadTitle">
     Angebot
   </div><button class="bar-item toolbarbtn" id="btnCreateoffer" onclick="offer.createPDF();"><span class="icon-pdf" style="font-size: 16px;"></span>erstellen</button> <button class="bar-item toolbarbtn" id="btnOpenPDF" onclick=
   "offer.openPDF();"><span class="icon-viewpdf" style="font-size: 16px;"></span>öffnen</button> <button class="bar-item toolbarbtn" id="btnSendEmail" onclick="offer.sendEmail();"><span class="icon-email" style=
   "font-size: 16px;"></span>senden</button> 
   <button class="bar-item toolbarbtn" onclick="offer.dlgSelectAddress();"><span class="icon-contacts" style="font-size: 16px;"></span>Adressen</button>
-  <button class="bar-item toolbarbtn right" onclick="offerdetails.confirmremove();"><span class="icon-remove" style="font-size: 16px;"></span>löschen</button> <button class=
-  "bar-item toolbarbtn right" onclick="offerdetails.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>duplizieren</button> <button class="bar-item toolbarbtn right" onclick="offerdetails.edit();"><span class=
-  "icon-edit" style="font-size: 16px;"></span> bearbeiten</button> <button class="bar-item toolbarbtn right" onclick="offerdetails.add();"><span class="icon-add" style="font-size: 16px;"></span>neu</button>
+  <button class="bar-item toolbarbtn right" onclick="offerdetails.confirmremove();"><span class="icon-remove" style="font-size: 16px;"></span>{{delete}}</button> <button class=
+  "bar-item toolbarbtn right" onclick="offerdetails.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button> <button class="bar-item toolbarbtn right" onclick="offerdetails.edit();"><span class=
+  "icon-edit" style="font-size: 16px;"></span> {{edit}}</button> <button class="bar-item toolbarbtn right" onclick="offerdetails.add();"><span class="icon-add" style="font-size: 16px;"></span>{{new}}</button>
 </div>
 <div class="display-container">
   <input class="data_offers" data-column="id" data-id="" data-table="offers" id="offers_id" name="offers_id" type="hidden" value=""> <input class="data_offers" data-column="pdffile" data-id="" data-table="offers" id="offers_pdffile" name=
index 799815c..8b7950b 100644 (file)
@@ -1,10 +1,10 @@
 <div class="display-container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
+  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
   <div class="bar-item PageHeadTitle">
     Angebote
   </div>
-  <button class="bar-item toolbarbtn right" onclick="offers.remove();"><span class="icon-remove" style="font-size: 16px;"></span>löschen</button> <button class="bar-item toolbarbtn right" onclick="offers.duplicate();"><span class=
-  "icon-duplicate" style="font-size: 16px;"></span>duplizieren</button> <button class="bar-item toolbarbtn right" onclick="offers.edit();"><span class="icon-edit" style="font-size: 16px;"></span> bearbeiten</button> <button class=
-  "bar-item toolbarbtn right" onclick="offers.add();"><span class="icon-add" style="font-size: 16px;"></span> neu</button>
+  <button class="bar-item toolbarbtn right" onclick="offers.remove();"><span class="icon-remove" style="font-size: 16px;"></span>{{delete}}</button> <button class="bar-item toolbarbtn right" onclick="offers.duplicate();"><span class=
+  "icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button> <button class="bar-item toolbarbtn right" onclick="offers.edit();"><span class="icon-edit" style="font-size: 16px;"></span> {{edit}}</button> <button class=
+  "bar-item toolbarbtn right" onclick="offers.add();"><span class="icon-add" style="font-size: 16px;"></span> {{new}}</button>
 </div>
 <div id="tbl_offers"></div>
\ No newline at end of file
index cbae191..4f5ded3 100644 (file)
@@ -1,10 +1,10 @@
 <div class="display-container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
-  <div class="bar-item PageHeadTitle">Produkte</div>
-  <button class="bar-item toolbarbtn right" onclick="products.confirmRemove();"><span class="icon-trash" style="font-size: 16px;"></span>löschen</button>
-  <button class="bar-item toolbarbtn right" onclick="products.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>duplizieren</button> 
-  <button class="bar-item toolbarbtn right" onclick="products.edit();"><span class="icon-edit" style="font-size: 16px;"></span>bearbeiten</button> 
-  <button class="bar-item toolbarbtn right" onclick="products.add();"><span class="icon-add" style="font-size: 16px;"></span>neu</button>
+  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
+  <div class="bar-item PageHeadTitle">{{products}}</div>
+  <button class="bar-item toolbarbtn right" onclick="products.confirmRemove();"><span class="icon-trash" style="font-size: 16px;"></span>{{delete}}</button>
+  <button class="bar-item toolbarbtn right" onclick="products.duplicate();"><span class="icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button> 
+  <button class="bar-item toolbarbtn right" onclick="products.edit();"><span class="icon-edit" style="font-size: 16px;"></span>{{edit}}</button> 
+  <button class="bar-item toolbarbtn right" onclick="products.add();"><span class="icon-add" style="font-size: 16px;"></span>{{new}}</button>
 </div>
 <div id="tbl_products"></div>
 
@@ -12,7 +12,7 @@
 <div id="dlgProduct" class="modal" >
   <div class="modal-content animate-opacity card-4" >
     <header>
-      <div class="bar-item SubHeadTitle">Produkt / Dienstleistung</div>
+      <div class="bar-item SubHeadTitle">{{product_heading}}</div>
       <span onclick="myapp.closeDialog('Product');" class="button display-topright">&times;</span>
     </header>
     <div class="container padding">
     <div class="container threequarter">
     <div class="row">
       <div class="container third">
-        <label class="label" for="products_producttype">Typ</label> 
+        <label class="label" for="products_producttype">{{product_type}}</label> 
         <select class="select border data_products" data-column="producttype" data-id="" data-selected="" data-table="products" id="products_producttype" name="products_producttype"  value="">
         <option class="" value=""></option>
-          <option class="" value="product">Produkt</option>
-          <option class="" value="service">Dienstleistung</option>
+          <option class="" value="product">{{product}}</option>
+          <option class="" value="service">{{service}}</option>
         </select>
       </div>
       <div class="container third">
-        <label class="label" for="products_productgroup">Produkt-Gruppe</label> 
-        <input class="input border text data_products" data-column="productgroup" data-id="" data-table="products" id="products_productgroup" name="products_productgroup"  placeholder="Gruppe" type="text">
+        <label class="label" for="products_productgroup">{{product_group}}</label> 
+        <input class="input border text data_products" data-column="productgroup" data-id="" data-table="products" id="products_productgroup" name="products_productgroup"  type="text">
       </div>
       <div class="container third">
-        <label class="label" for="products_unit">Einheit</label> 
-        <input class="input border text data_products" data-column="unit" data-id="" data-table="products" id="products_unit" name="products_unit"  placeholder="Einheit" type="text">
+        <label class="label" for="products_unit">{{unit}}</label> 
+        <input class="input border text data_products" data-column="unit" data-id="" data-table="products" id="products_unit" name="products_unit"   type="text">
       </div>
     </div>
     <div class="container row">
     <div class="container third">
-      <label class="label" for="products_sku">SKU</label> 
-      <input class="input border text data_products" data-column="sku" data-id="" data-table="products" id="products_sku" name="products_sku"  placeholder="no article" type="text">
+      <label class="label" for="products_sku">{{sku}}</label> 
+      <input class="input border text data_products" data-column="sku" data-id="" data-table="products" id="products_sku" name="products_sku"   type="text">
     </div>
     <div class="contaienr twothird">
-      <label class="label" for="products_name">Name</label> 
-      <input class="input border text data_products" data-column="name" data-id="" data-table="products" id="products_name" name="products_name"  placeholder="name" type="text">
+      <label class="label" for="products_name">{{product_name}}</label> 
+      <input class="input border text data_products" data-column="name" data-id="" data-table="products" id="products_name" name="products_name"   type="text">
     </div>
     </div>
     <div class="container row">
         <div class="container cell twothird" style="height: 250px;">
-          <label class="label" for="products_description">Beschreibung</label> 
+          <label class="label" for="products_description">{{description}}</label> 
           <textarea data-id="" data-column="description" data-table="products" class="input border richeditarea data_products" id="products_description" ></textarea>
         </div>
     </div>
     <div class="container quarter">
       
       <div class="container">
-        <label class="label" for="products_salesprice">Netto</label> 
+        <label class="label" for="products_salesprice">{{netamount}}</label> 
         <input class="input border currency right-align data_products" data-column="salesprice" data-id="" data-table="products" id="products_salesprice" type="number">
       </div>
       <div class="container">
-        <label class="label" for="products_vatpercent">MwSt(%)</label> 
+        <label class="label" for="products_vatpercent">{{tax}}(%)</label> 
         <input class="input border percent right-align data_products" data-column="vatpercent" data-id="" data-table="products" id="products_vatpercent" type="number">
       </div>
       <div class="container">
-        <label class="label" for="products_vatamount">MwSt(€)</label> 
+        <label class="label" for="products_vatamount">{{tax}}(€)</label> 
         <input class="input border percent right-align data_products readonly"  id="products_vatamount" type="number" readonly>
       </div>
       <div class="container">
-        <label class="label" for="products_grossprice">Brutto</label> 
+        <label class="label" for="products_grossprice">{{grossamount}}</label> 
         <input class="input border currency right-align data_products readonly" id="products_grossprice"  type="number" readonly>
       </div>
     </div>
@@ -79,8 +79,8 @@
   </form>
 </div>
 <footer class="container right-align padding-16">
-  <button class="button theme-light margin-right border" onclick="myapp.closeDialog('Product');"><span class="icon-close" style="font-size: 16px;"></span>Abbrechen</button>
-  <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="products.save();"><span class="icon-save" style="font-size: 16px;"></span>Speichern</button>
+  <button class="button theme-light margin-right border" onclick="myapp.closeDialog('Product');"><span class="icon-close" style="font-size: 16px;"></span>{{cancel}}</button>
+  <button class="button moduletoolbar margin-right" id="btnCloseBooking" onclick="products.save();"><span class="icon-save" style="font-size: 16px;"></span>{{save}}</button>
 </footer>
 </div>
 </div>
\ No newline at end of file
index b9e4b6b..8e6013f 100644 (file)
@@ -60,13 +60,13 @@ let products = {
       selectable: 1,
       rowContext:function(e, row){ e.preventDefault(); },
       columns: [
-        {title: "Typ", field: "producttype",width: 120,headerFilter:"select",headerFilterParams:{values:headerproducttypes}},
-        {title: "Gruppe", field: "productgroup",headerFilter:"input",width: 120},
-        {title: "Name", field: "name",headerFilter:"input"},
-        {title: "Einheit", field: "unit",width: 120,headerSort: false},
-        {title: "Netto", field: "salesprice",hozAlign:"right", width: 120,headerSort: false,formatter:"money",  formatterParams:{ decimal:",", thousand:".", symbol:"€", symbolAfter:"p", precision:2, }},
-        {title: "MwSt.", field: "vatpercent",hozAlign:"right",width: 120, headerSort: false,formatter:"money",  formatterParams:{ decimal:",", thousand:".", symbol:"%", symbolAfter:"p", precision:2, }},
-        {title: "Brutto", field: "grossprice",hozAlign:"right",width: 120, headerSort: false,formatter:"money",  formatterParams:{ decimal:",", thousand:".", symbol:"€", symbolAfter:"p", precision:2, }},
+        {title: lbl[preferences.global.language].product_type, field: "producttype",width: 120,headerFilter:"select",headerFilterParams:{values:headerproducttypes}},
+        {title: lbl[preferences.global.language].product_group, field: "productgroup",headerFilter:"input",width: 120},
+        {title: lbl[preferences.global.language].product_name, field: "name",headerFilter:"input"},
+        {title: lbl[preferences.global.language].unit, field: "unit",width: 120,headerSort: false},
+        {title: lbl[preferences.global.language].netamount, field: "salesprice",hozAlign:"right", width: 120,headerSort: false,formatter:"money",  formatterParams:{ decimal:",", thousand:".", symbol:"€", symbolAfter:"p", precision:2, }},
+        {title: lbl[preferences.global.language].tax + " (%)", field: "vatpercent",hozAlign:"right",width: 120, headerSort: false,formatter:"money",  formatterParams:{ decimal:",", thousand:".", symbol:"%", symbolAfter:"p", precision:2, }},
+        {title: lbl[preferences.global.language].grossamount, field: "grossprice",hozAlign:"right",width: 120, headerSort: false,formatter:"money",  formatterParams:{ decimal:",", thousand:".", symbol:"€", symbolAfter:"p", precision:2, }},
       ]
     });
     products.gettbldata();
@@ -93,7 +93,7 @@ let products = {
     var sel = products.tbl.getSelectedData();
     //delcallback = ;
     if (sel[0]) {
-      myapp.confirm("Produkt löschen","Sind Sie Sicher dass Sie das Produkt löschen möchten?","Löschen","Abbrechen","products.remove();");
+      myapp.confirm(lbl[preferences.global.language].delete_product,lbl[preferences.global.language].product_delete_question,lbl[preferences.global.language].delete,lbl[preferences.global.language].cancel,"products.remove();");
       // document.getElementById("btndlgdeleterowok").setAttribute("onclick","invoices.remove();");
       // document.getElementById("dlgdeleterow").style.display = 'block';
     }
index fcc63db..a7fa0eb 100644 (file)
@@ -1,9 +1,9 @@
 <div class="container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
-  <div class="bar-item PageHeadTitle">Einstellungen</div>
-  <button class="bar-item toolbarbtn right" onclick="myapp.viewtab('status');"><span class="icon-settings" style="font-size: 16px;"></span>Status</button>
-  <button class="bar-item toolbarbtn right" onclick="myapp.viewtab('documenttypes');"><span class="icon-settings" style="font-size: 16px;"></span>Document Typen</button>
-  <button class="bar-item toolbarbtn right" onclick="myapp.viewtab('default');"><span class="icon-settings" style="font-size: 16px;"></span>Allgemein</button>
+  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
+  <div class="bar-item PageHeadTitle">{{settings}}</div>
+  <button class="bar-item toolbarbtn right" onclick="myapp.viewtab('status');"><span class="icon-settings" style="font-size: 16px;"></span>{{status}}</button>
+  <button class="bar-item toolbarbtn right" onclick="myapp.viewtab('documenttypes');"><span class="icon-settings" style="font-size: 16px;"></span>{{document_types}}</button>
+  <button class="bar-item toolbarbtn right" onclick="myapp.viewtab('default');"><span class="icon-settings" style="font-size: 16px;"></span>{{general}}</button>
 </div>
 <div class="tab container" id="tab_default">
   
     <form id="frm_defaultdata">
     <div class="container quarter">
       <fieldset>
-        <legend>Unternehmens-Daten</legend>
+        <legend>{{company_data}}</legend>
       <div class="row container group_container">
         <div class="">
-          <label class="label">Unternehmen</label>
-          <input class="input border text data_defaultdata" data-column="pref" data-id="company" data-table="defaultdata" id="defaultdata_company" onblur="dataform.savefield(this);" placeholder="Name / Firma" type="text" value="">
+          <label class="label">{{company}}</label>
+          <input class="input border text data_defaultdata" data-column="pref" data-id="company" data-table="defaultdata" id="defaultdata_company" onblur="dataform.savefield(this);"  type="text" value="">
         </div>
         <div class="">
-          <label class="label">Adresse</label>
-          <input class="input border text data_defaultdata" data-column="pref" data-id="address" data-table="defaultdata" id="defaultdata_address"  onblur="dataform.savefield(this);" placeholder="Adresse" type="text" value="">
+          <label class="label">{{address}}</label>
+          <input class="input border text data_defaultdata" data-column="pref" data-id="address" data-table="defaultdata" id="defaultdata_address"  onblur="dataform.savefield(this);"  type="text" value="">
         </div>
         <div class="row">
           <div class="cell" style="width: 40px;">
-            <label class="label">Land</label>
+            <label class="label">{{country}}</label>
               <input class="input border text data_defaultdata" data-column="pref" data-id="country" data-table="defaultdata" id="defaultdata_country" onblur="dataform.savefield(this);" type="text" value="">
           </div>
           <div class="cell" style="width: 90px;">
-            <label class="label">PLZ</label>
-              <input class="input border text data_defaultdata" data-column="pref" data-id="zip" data-table="defaultdata" id="defaultdata_zip" onblur="dataform.savefield(this);" placeholder="PLZ" type="text" value="">
+            <label class="label">{{zip}}</label>
+              <input class="input border text data_defaultdata" data-column="pref" data-id="zip" data-table="defaultdata" id="defaultdata_zip" onblur="dataform.savefield(this);" type="text" value="">
           </div>
           <div class="cell" style="width: 270px;">
-            <label class="label">Ort</label>
-              <input class="input border text data_defaultdata" data-column="pref" data-id="city" data-table="defaultdata" id="defaultdata_city" onblur="dataform.savefield(this);" placeholder="Ort" type="text" value="">
+            <label class="label">{{city}}</label>
+              <input class="input border text data_defaultdata" data-column="pref" data-id="city" data-table="defaultdata" id="defaultdata_city" onblur="dataform.savefield(this);" type="text" value="">
           </div>
         </div>
         <div class="">
-          <label class="label">Email</label>
-          <input class="input border text data_defaultdata" data-column="pref" data-id="email" data-table="defaultdata" id="defaultdata_email" onblur="dataform.savefield(this);" placeholder="E-mail" type="text" value="">
+          <label class="label">{{email}}</label>
+          <input class="input border text data_defaultdata" data-column="pref" data-id="email" data-table="defaultdata" id="defaultdata_email" onblur="dataform.savefield(this);" type="text" value="">
         </div>
         <div class="">
-          <label class="label">Webseite</label>
-          <input class="input border text data_defaultdata" data-column="pref" data-id="website" data-table="defaultdata" id="defaultdata_website" onblur="dataform.savefield(this);" placeholder="Webseite" type="text">
+          <label class="label">{{website}}</label>
+          <input class="input border text data_defaultdata" data-column="pref" data-id="website" data-table="defaultdata" id="defaultdata_website" onblur="dataform.savefield(this);" type="text">
         </div>
         <div class="row">
           <div class="cell">
             <div class="">
-              <label class="label">USt.-Id</label>
-              <input class="input border text data_defaultdata" data-column="vatid" data-id="" data-table="defaultdata" id="defaultdata_vatid" onblur="dataform.savefield(this);" placeholder="USt-Id" type="text" value="">
+              <label class="label">{{vatid}}</label>
+              <input class="input border text data_defaultdata" data-column="vatid" data-id="" data-table="defaultdata" id="defaultdata_vatid" onblur="dataform.savefield(this);"  type="text" value="">
             </div>
           </div>
           <div class="cell">
             <div class="">
-              <label class="label">RCS</label>
-              <input class="input border text data_defaultdata" data-column="rcs" data-id="" data-table="defaultdata" id="defaultdata_rcs" onblur="dataform.savefield(this);" placeholder="Handelsregister" type="text">
+              <label class="label">{{rcs}}</label>
+              <input class="input border text data_defaultdata" data-column="rcs" data-id="" data-table="defaultdata" id="defaultdata_rcs" onblur="dataform.savefield(this);" type="text">
             </div>
           </div>
         </div>
     </div>
     <div class="container quarter">
     <fieldset>
-      <legend>Standard-Werte</legend>
+      <legend>{{default_values}}</legend>
     <div class="container group_container">
       <div class="">
-        <label class="label" for="defaultdata_language">Sprache</label> 
-        <select class="select border data_defaultdata" data-column="pref" data-id="language" data-selected="" data-table="defaultdata" id="defaultdata_language" onchange="dataform.savefield(this);" placeholder="Sprache">
+        <label class="label" for="defaultdata_language">{{language}}</label> 
+        <select class="select border data_defaultdata" data-column="pref" data-id="language" data-selected="" data-table="defaultdata" id="defaultdata_language" onchange="dataform.savefield(this);">
           <option class="de">deutsch</option>
           <option class="fr">français</option>
         </select>
       </div>
       <div class="row">
       <div class="cell">
-        <label class="label" for="defaultdata_vat">Mehrwertsteuer</label> 
-        <input class="input border number right-align  percent text-align-right data_defaultdata" data-column="pref" data-id="vat" data-table="defaultdata" id="defaultdata_vat" onblur="dataform.savefield(this);" placeholder="Mehrwertsteuer" text-align-right="" type="number" value="">
+        <label class="label" for="defaultdata_vat">{{tax}} (%)</label> 
+        <input class="input border number right-align  percent text-align-right data_defaultdata" data-column="pref" data-id="vat" data-table="defaultdata" id="defaultdata_vat" onblur="dataform.savefield(this);" text-align-right="" type="number" value="">
       </div>
       <div class="cell">
-        <label class="label" for="defaultdata_pref-invoicedeadlinedays">Fälligkeit (Tage)</label> <input class="input border number right-align text-align-right data_defaultdata" data-column="pref" data-id="invoicedeadlinedays" data-table="defaultdata" id=
-        "defaultdata_pref-invoicedeadlinedays"  onblur="dataform.savefield(this);" placeholder="Tage" text-align-right="" type="number" value="">
+        <label class="label" for="defaultdata_pref-invoicedeadlinedays">{{deadline}} ({{days}})</label> <input class="input border number right-align text-align-right data_defaultdata" data-column="pref" data-id="invoicedeadlinedays" data-table="defaultdata" id=
+        "defaultdata_pref-invoicedeadlinedays"  onblur="dataform.savefield(this);" text-align-right="" type="number" value="">
       </div>
       </div>
       <div id="row_defaultinvoice">
-        <label class="label" for="defaultdata_invoicetemplate">Standard Rechnungs-Vorlage</label> 
-        <select class="select border data_defaultdata" data-column="pref" data-id="id_invoicetemplate" data-selected="" data-table="defaultdata" id="defaultdata_invoicetemplate" onchange="dataform.savefield(this);" placeholder="Vorlage..." value="">
+        <label class="label" for="defaultdata_invoicetemplate">{{default_invoice_template}}</label> 
+        <select class="select border data_defaultdata" data-column="pref" data-id="id_invoicetemplate" data-selected="" data-table="defaultdata" id="defaultdata_invoicetemplate" onchange="dataform.savefield(this);" value="">
         </select>
       </div>
       <div id="row_defaultcreditnote">
-        <label class="label" for="defaultdata_invoicetemplate">Standard Gutschrift-Vorlage</label> 
-        <select class="select border data_defaultdata" data-column="pref" data-id="id_creditnotetemplate" data-selected="" data-table="defaultdata" id="defaultdata_creditnotetemplate" onchange="dataform.savefield(this);" placeholder="Vorlage..." value="">
+        <label class="label" for="defaultdata_invoicetemplate">{{default_creditnote_template}}</label> 
+        <select class="select border data_defaultdata" data-column="pref" data-id="id_creditnotetemplate" data-selected="" data-table="defaultdata" id="defaultdata_creditnotetemplate" onchange="dataform.savefield(this);" value="">
+        </select>
+      </div>
+      <div id="row_defaultcreditnote">
+        <label class="label" for="defaultdata_invoicetemplate">{{default_offer_template}}</label> 
+        <select class="select border data_defaultdata" data-column="pref" data-id="id_offertemplate" data-selected="" data-table="defaultdata" id="defaultdata_offertemplate" onchange="dataform.savefield(this);" value="">
         </select>
       </div>
-      
     </div>
     </fieldset>
     </div>
     <div class="container quarter">
     <fieldset>
-      <legend>Mail-Einstellungen</legend>
+      <legend>{{mail_settings}}</legend>
     <label class="label"></label>
     <div class="container group_container">
-      <!-- <div class="">
-        <label class="label" for="defaultdata_mailapp">Mail-Programm</label>
+      <div class="" id="localmailapp">
+        <label class="label" for="defaultdata_mailapp">{{mail_app}}</label>
         <select class="select border data_defaultdata" data-column="pref" data-id="mailapp" data-selected="" data-table="defaultdata" id="defaultdata_mailapp">
-          <option value="smtp">SMTP</option>
           <option value="outlook">Outlook</option>
           <option value="thunderbird">Thunderbird</option>
         </select>
-      </div> -->
+      </div>
       <div id="smtpsettings">
       <div class="row">
         <div class="cell">
-            <label class="label" for="defaultdata_smtpserver">Absender</label> 
-            <input class="input border text  data_defaultdata" data-column="pref" data-id="smtpserver" data-table="defaultdata" id="defaultdata_smtpfrom"  onblur="dataform.savefield(this);" placeholder="Absender" type="text" value="">
+            <label class="label" for="defaultdata_smtpserver">{{mail_from}}</label> 
+            <input class="input border text  data_defaultdata" data-column="pref" data-id="smtpserver" data-table="defaultdata" id="defaultdata_smtpfrom"  onblur="dataform.savefield(this);" type="text" value="">
         </div>
       </div>
       <div class="row">
         <div class="cell">
-            <label class="label" for="defaultdata_smtpserver">Mail-Server</label> 
-            <input class="input border text  data_defaultdata" data-column="pref" data-id="smtpserver" data-table="defaultdata" id="defaultdata_smtpserver"  onblur="dataform.savefield(this);" placeholder="Mail-Server" type="text" value="">
+            <label class="label" for="defaultdata_smtpserver">{{mail_server}}</label> 
+            <input class="input border text  data_defaultdata" data-column="pref" data-id="smtpserver" data-table="defaultdata" id="defaultdata_smtpserver"  onblur="dataform.savefield(this);"  type="text" value="">
         </div>
         <div class="cell">
-            <label class="label" for="defaultdata_smtpport">Port</label> 
+            <label class="label" for="defaultdata_smtpport">{{mail_port}}</label> 
             <input class="input border number right-align text-align-right data_defaultdata" data-column="pref" data-id="smtpport" data-table="defaultdata" id="defaultdata_smtpport" onblur="dataform.savefield(this);" text-align-right="" type="number" value="">
         </div>
       </div>
       <div class="">
-        <label class="label" for="defaultdata_smtplogin">Login</label> <input class="input border text data_defaultdata" data-column="pref" data-id="smtplogin" data-table="defaultdata" id="defaultdata_smtplogin"  onblur="dataform.savefield(this);" placeholder="Login" type="text" value="">
+        <label class="label" for="defaultdata_smtplogin">{{mail_user}}</label> <input class="input border text data_defaultdata" data-column="pref" data-id="smtplogin" data-table="defaultdata" id="defaultdata_smtplogin"  onblur="dataform.savefield(this);"  type="text" value="">
       </div>
       <div class="">
-        <label class="label" for="defaultdata_pref">Passwort</label> <input class="input border password data_defaultdata" data-column="pref" data-id="smtppassword" data-table="defaultdata" id="defaultdata_smtppassword" onblur="dataform.savefield(this);" placeholder="Passwort" type="password" value="">
+        <label class="label" for="defaultdata_pref">{{mail_password}}</label> <input class="input border password data_defaultdata" data-column="pref" data-id="smtppassword" data-table="defaultdata" id="defaultdata_smtppassword" onblur="dataform.savefield(this);"  type="password" value="">
       </div>
     </div>
   </div>
 <div class="display-container tab" style="width: calc(100vw - 70px);display: none;" id="tab_status" >
       
         <div class="bar moduletoolbar">
-          <div class="bar-item subHeadTitle">Status</div>
-          <button class="bar-item toolbarbtn right text-red" onclick="settings.confirmRemoveStatus();"><span class="icon-trash" style="font-size: 16px;"></span>löschen</button>
-          <button class="bar-item toolbarbtn right" onclick="settings.editStatus();"><span class="icon-edit" style="font-size: 16px;"></span>bearb.</button>
-          <button class="bar-item toolbarbtn right" onclick="settings.duplicateStatus();"><span class="icon-duplicate" style="font-size: 16px;"></span>dupl.</button>
-          <button class="bar-item toolbarbtn right" onclick="settings.addStatus();"><span class="icon-plus" style="font-size: 16px;"></span>neu</button>
+          <div class="bar-item subHeadTitle">{{status}}</div>
+          <button class="bar-item toolbarbtn right text-red" onclick="settings.confirmRemoveStatus();"><span class="icon-trash" style="font-size: 16px;"></span>{{delete}}</button>
+          <button class="bar-item toolbarbtn right" onclick="settings.editStatus();"><span class="icon-edit" style="font-size: 16px;"></span>{{edit}}</button>
+          <button class="bar-item toolbarbtn right" onclick="settings.duplicateStatus();"><span class="icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button>
+          <button class="bar-item toolbarbtn right" onclick="settings.addStatus();"><span class="icon-plus" style="font-size: 16px;"></span>{{new}}</button>
         </div>
         <div id="tbl_status"></div>
 
 </div>
 <div class="display-container tab" style="width: calc(100vw - 70px);display: none;" id="tab_documenttypes">
         <div class="bar moduletoolbar">
-          <div class="bar-item subHeadTitle">Documente</div>
-          <button class="bar-item toolbarbtn right text-red" onclick="settings.confirmRemoveDocuments();"><span class="icon-trash" style="font-size: 16px;"></span>löschen</button>
-          <button class="bar-item toolbarbtn right" onclick="settings.editDocuments();"><span class="icon-edit" style="font-size: 16px;"></span>bearb.</button>
-          <button class="bar-item toolbarbtn right" onclick="settings.duplicateDocuments()"><span class="icon-duplicate" style="font-size: 16px;"></span>dupl.</button>
-          <button class="bar-item toolbarbtn right" onclick="settings.addDocuments();"><span class="icon-plus" style="font-size: 16px;"></span>neu</button>
+          <div class="bar-item subHeadTitle">{{document_types}}</div>
+          <button class="bar-item toolbarbtn right text-red" onclick="settings.confirmRemoveDocuments();"><span class="icon-trash" style="font-size: 16px;"></span>{{delete}}</button>
+          <button class="bar-item toolbarbtn right" onclick="settings.editDocuments();"><span class="icon-edit" style="font-size: 16px;"></span>{{edit}}</button>
+          <button class="bar-item toolbarbtn right" onclick="settings.duplicateDocuments()"><span class="icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button>
+          <button class="bar-item toolbarbtn right" onclick="settings.addDocuments();"><span class="icon-plus" style="font-size: 16px;"></span>{{new}}</button>
         </div>
         <div id="tbl_documents"></div>
 </div>  
index 2573cc5..583edb0 100644 (file)
@@ -30,11 +30,11 @@ let settings = {
       selectable: 1,
       rowContext:function(e, row){ e.preventDefault(); },
         columns: [
-          {title: "Position", field: "pos"},
-          {title: "Id", field: "id"},
-          {title: "Status", field: "status"},
-          {title: "Farbe", field: "color"},
-          {title: "Kategorie", field: "reporttypes"}
+          {title: lbl[preferences.global.language].position, field: "pos"},
+          {title: lbl[preferences.global.language].id, field: "id"},
+          {title: lbl[preferences.global.language].status, field: "status"},
+          {title: lbl[preferences.global.language].color, field: "color"},
+          {title: lbl[preferences.global.language].category, field: "reporttypes"}
       ]
     });
     settings.tbldocuments = new Tabulator("#tbl_documents",{
@@ -44,11 +44,11 @@ let settings = {
       selectable: 1,
       rowContext:function(e, row){ e.preventDefault(); },
         columns: [
-          {title: "Position", field: "pos"},
-          {title: "Id", field: "id"},
-          {title: "name", field: "document"},
-          {title: "Kategorie", field: "category"},
-          {title: "Vorlage", field: "reportcategory"}
+          {title: lbl[preferences.global.language].position, field: "pos"},
+          {title: lbl[preferences.global.language].id, field: "id"},
+          {title: lbl[preferences.global.language].name, field: "document"},
+          {title: lbl[preferences.global.language].category, field: "category"},
+          {title: lbl[preferences.global.language].template, field: "reportcategory"}
       ]
     });
     settings.getstatusdata();
index 3d5d4d9..3a61bb5 100644 (file)
@@ -1,11 +1,11 @@
 <div class="display-container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
+  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
   <div class="bar-item PageHeadTitle">
-    Vorlagen
+    {{reporttemplates}}
   </div>
-  <button class="bar-item toolbarbtn text-red right" onclick="templates.confirmRemove();"><span class="icon-trash tlbicon"></span>löschen</button> 
-  <button class="bar-item toolbarbtn right" onclick="templates.duplicate();"><span class="icon-duplicate tlbicon"></span>dupl</button>
-  <button class="bar-item toolbarbtn right" onclick="templates.save();"><span class="icon-save tlbicon"></span>Speichern</button>
+  <button class="bar-item toolbarbtn text-red right" onclick="templates.confirmRemove();"><span class="icon-trash tlbicon"></span>{{delete}}</button> 
+  <button class="bar-item toolbarbtn right" onclick="templates.duplicate();"><span class="icon-duplicate tlbicon"></span>{{duplicate}}</button>
+  <button class="bar-item toolbarbtn right" onclick="templates.save();"><span class="icon-save tlbicon"></span>{{save}}</button>
 </div>
 
 <div class="display-container">
         <form id="frm_templates">
           <div class="row">
             <div class="cell container" style="width: 400px;">
-              <label class="label" for="templates_reporttype">Kategorie</label> 
+              <label class="label" for="templates_reporttype">{{Category}}</label> 
               <select class="select border data_templates" data-column="reporttype" data-id="" data-selected="" data-table="label" id="templates_reporttype"></select>
             </div>
             <div class="cell container" style="width: 400px;">
-              <label class="label" for="templates_reportname">Name</label> 
+              <label class="label" for="templates_reportname">{{name}}</label> 
               <input class="input data_templates border text" data-column="reportname" data-id="" data-table="newreports" id="templates_reportname" type="text">
             </div>
           </div>
             </div> -->
 
             <div class="cell container" style="width: 90px;">
-              <label class="label" for="templates_pdfoptions-top">Top (mm)</label> 
+              <label class="label" for="templates_pdfoptions-top">{{top}} (mm)</label> 
               <input class="input data_templates border number right-align" data-column="pdfoptions-top" data-id="" data-table="newreports" id="templates_pdfoptions-top" type="text">
             </div>
             <div class="cell container" style="width: 90px;">
-              <label class="label" for="templates_pdfoptions-bottom">Bottom (mm)</label> 
+              <label class="label" for="templates_pdfoptions-bottom">{{bottom}} (mm)</label> 
               <input class="input data_templates border number right-align" data-column="pdfoptions-bottom" data-id="" data-table="newreports" id="templates_pdfoptions-bottom" type="text">
             </div>
             <div class="cell container" style="width: 90px;">
-              <label class="label" for="templates_pdfoptions-left">Left (mm)</label> 
+              <label class="label" for="templates_pdfoptions-left">{{left}} (mm)</label> 
               <input class="input data_templates border number right-align" data-column="pdfoptions-left" data-id="" data-table="newreports" id="templates_pdfoptions-left" type="text">
             </div>
             <div class="cell container" style="width: 90px;">
-              <label class="label" for="templates_pdfoptions-right">Right (mm)</label> 
+              <label class="label" for="templates_pdfoptions-right">{{right}} (mm)</label> 
               <input class="input data_templates border number right-align" data-column="pdfoptions-right" data-id="" data-table="newreports" id="templates_pdfoptions-right" type="text">
             </div>
           </div>
           <div class="row">
             <div class="cell" style="width: 100%;">
-              <label class="label" for="templates_contentheader">Kopfzeile</label>
+              <label class="label" for="templates_contentheader">{{header}}</label>
               <textarea class="input border data_templates richeditarea" style="height: heightpx;"  data-id="" data-column="contentheader" data-table="table"  id="templates_contentheader" ></textarea>
             </div>
             <div class="cell" style="width: 100%;">
-              <label class="label" for="templates_contentheader">Kopfzeile</label>
+              <label class="label" for="templates_contentheader">{{header}}</label>
               <textarea class="input border data_templates richeditarea" style="height: heightpx;"  data-id="" data-column="contentheader" data-table="table"  id="templates_contentheader" ></textarea>
             </div>
             <!-- <div class="cell" style="width: 80px;">
             <div class="cell">
               <div id="tab_templateheader" class="row tab border" style="height:calc(100vh - 200px); width: calc(100vw - 500px); overflow-y: hidden;">
                   <div class="bar moduletoolbar">
-                    <div class="bar-item SubHeadTitle">Kopfzeile</div>
+                    <div class="bar-item SubHeadTitle">{{header}}</div>
                   </div>
                   <textarea class="input border data_templates codeeditor" style="width:calc(100vw - 510px);" data-id="" data-column="headerhtml" data-table="newreports"  id="templates_headerhtml"></textarea>
               </div>
               <div id="tab_templatebody" class="row tab border" style="height:calc(100vh - 200px); width: calc(100vw - 500px); overflow-y: hidden;display:none;">
                 <div class="bar moduletoolbar">
-                  <div class="bar-item SubHeadTitle">Seite</div>
+                  <div class="bar-item SubHeadTitle">{{template_pagecontent}}</div>
                 </div>
                   <textarea class="input border data_templates codeeditor" style="width:calc(100vw - 510px);" data-id="" data-column="contenthtml" data-table="newreports"  id="templates_contenthtml" ></textarea>
               </div>
               <div id="tab_templatefooter" class="row tab border" style="height:calc(100vh - 200px); width: calc(100vw - 500px); overflow-y: hidden;display:none;">
                 <div class="bar moduletoolbar">
-                  <div class="bar-item SubHeadTitle">Fusszeile</div>
+                  <div class="bar-item SubHeadTitle">{{footer}}</div>
                 </div> 
                   <textarea class="input border data_templates codeeditor" style="width:calc(100vw - 510px);" data-id="" data-column="footerhtml" data-table="newreports"  id="templates_footerhtml" ></textarea>
               </div>
               <div id="tab_templatestyle" class="row tab border" style="height:calc(100vh - 120px); width: calc(100vw - 500px); overflow-y: hidden;display: none;" >
                 <div class="bar moduletoolbar">
-                  <div class="bar-item SubHeadTitle">Layout Definition</div>
+                  <div class="bar-item SubHeadTitle">{{template_layout_definition}}</div>
                 </div> 
                   <textarea class="input border data_templates codeeditor" style="width:calc(100vw - 510px);"  data-id="" data-column="styles" data-table="newreports"  id="templates_styles" ></textarea>
                 </div>
               <div id="tab_templatereportsql" class="row tab" style="height:calc(100vh - 120px); width: calc(100vw - 500px); overflow-y: hidden;display: none;" >
                 <div class="bar moduletoolbar">
                   <div class="bar-item SubHeadTitle">Daten Abfragen</div>
-                  <button class="bar-item toolbarbtn right text-red" onclick="templates.confirmRemoveSQL();"><span class="icon-trash" style="font-size: 16px;"></span>löschen</button>
-                  <button class="bar-item toolbarbtn right" onclick="templates.addSQL();"><span class="icon-add" style="font-size: 16px;"></span>neu</button>
+                  <button class="bar-item toolbarbtn right text-red" onclick="templates.confirmRemoveSQL();"><span class="icon-trash" style="font-size: 16px;"></span>{{delete}}</button>
+                  <button class="bar-item toolbarbtn right" onclick="templates.addSQL();"><span class="icon-add" style="font-size: 16px;"></span>{{new}}</button>
                 </div>
                 <div id="tbl_reportsql"></div>
               </div>
index fa58661..1f678db 100644 (file)
@@ -1,10 +1,10 @@
 <div class="container bar toolbar">
-  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>zurück</button>
+  <button class="bar-item toolbarbtn" onclick="myapp.gotoHome();"><span class="icon-back" style="font-size: 16px;"></span>{{back}}</button>
   <div class="bar-item PageHeadTitle">
     Transaktionen
-  </div><button class="bar-item toolbarbtn right" onclick="transactions.remove();"><span class="icon icon-trash text-red" style="font-size: 16px;"></span>löschen</button> <button class="bar-item toolbarbtn right" onclick=
-  "transactions.duplicate();"><span class="icon icon-duplicate" style="font-size: 16px;"></span>duplizieren</button> <button class="bar-item toolbarbtn right" onclick="transactions.edit();"><span class="icon icon-edit" style=
-  "font-size: 16px;"></span>bearbeiten</button> <button class="bar-item toolbarbtn right" onclick="transactions.add();"><span class="icon icon-add" style="font-size: 16px;"></span>neu</button>
+  </div><button class="bar-item toolbarbtn right" onclick="transactions.remove();"><span class="icon icon-trash text-red" style="font-size: 16px;"></span>{{delete}}</button> <button class="bar-item toolbarbtn right" onclick=
+  "transactions.duplicate();"><span class="icon icon-duplicate" style="font-size: 16px;"></span>{{duplicate}}</button> <button class="bar-item toolbarbtn right" onclick="transactions.edit();"><span class="icon icon-edit" style=
+  "font-size: 16px;"></span>{{edit}}</button> <button class="bar-item toolbarbtn right" onclick="transactions.add();"><span class="icon icon-add" style="font-size: 16px;"></span>{{new}}</button>
 </div>
 <div class="cell-row">
   <div class="cell" style="width: 200px;">
index 171172a..6b317f2 100644 (file)
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
       "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
     },
-    "abort-controller": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
-      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
-      "requires": {
-        "event-target-shim": "^5.0.0"
-      }
-    },
-    "abstract-leveldown": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
-      "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
-      "requires": {
-        "buffer": "^5.5.0",
-        "immediate": "^3.2.3",
-        "level-concat-iterator": "~2.0.0",
-        "level-supports": "~1.0.0",
-        "xtend": "~4.0.0"
-      }
-    },
     "ajv": {
       "version": "6.12.5",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz",
         "readable-stream": "^2.0.6"
       }
     },
-    "argsarray": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz",
-      "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs="
-    },
     "asar": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz",
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "optional": 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="
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "optional": true
     },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "optional": true
     },
     "at-least-node": {
       "version": "1.0.0",
       "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
       "dev": true
     },
-    "attempt-x": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/attempt-x/-/attempt-x-1.1.3.tgz",
-      "integrity": "sha512-y/+ek8IjxVpTbj/phC87jK5YRhlP5Uu7FlQdCmYuut1DTjNruyrGqUWi5bcX1VKsQX1B0FX16A1hqHomKpHv3A=="
-    },
     "author-regex": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz",
     "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="
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "optional": true
     },
     "aws4": {
       "version": "1.10.1",
       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
-      "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA=="
+      "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==",
+      "optional": true
     },
     "balanced-match": {
       "version": "1.0.0",
     "base64-js": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+      "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=",
+      "optional": true,
       "requires": {
         "tweetnacl": "^0.14.3"
       }
       "dev": true,
       "optional": true
     },
-    "boom": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
-      "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
-      "requires": {
-        "hoek": "4.x.x"
-      }
-    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
       "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
     },
-    "buffer": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
-      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
-      "requires": {
-        "base64-js": "^1.3.1",
-        "ieee754": "^1.1.13"
-      }
-    },
     "buffer-alloc": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
     "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=="
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+      "dev": true
     },
     "cacheable-request": {
       "version": "6.1.0",
         }
       }
     },
-    "cached-constructors-x": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.2.tgz",
-      "integrity": "sha512-7lKwmwXweW6E/31RHAJemLtZPfb2xvcABXknFF4b/dNYv4DbSGTgQHckXLQkNw6BB4HKFYW6mJgsNjADAy1ehw=="
-    },
     "carbone": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/carbone/-/carbone-2.1.1.tgz",
     "caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "optional": true
     },
     "chownr": {
       "version": "1.1.4",
       "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
       "dev": true
     },
-    "clone-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
-      "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg="
-    },
     "clone-response": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
         "mimic-response": "^1.0.0"
       }
     },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
-    },
     "code-point-at": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "optional": true,
       "requires": {
         "delayed-stream": "~1.0.0"
       }
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
     },
-    "cryptiles": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.4.tgz",
-      "integrity": "sha512-8I1sgZHfVwcSOY6mSGpVU3lw/GSIZvusg8dD2+OGehCJpOhQRLNcH0qb9upQnOH4XhgxxFJSg6E2kx95deb1Tw==",
-      "requires": {
-        "boom": "5.x.x"
-      },
-      "dependencies": {
-        "boom": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
-          "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
-          "requires": {
-            "hoek": "4.x.x"
-          }
-        }
-      }
-    },
     "dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "optional": true,
       "requires": {
         "assert-plus": "^1.0.0"
       }
       "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
       "dev": true
     },
-    "deferred-leveldown": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz",
-      "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==",
-      "requires": {
-        "abstract-leveldown": "~6.2.1",
-        "inherits": "^2.0.3"
-      }
-    },
     "define-properties": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
     "delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "optional": true
     },
     "delegates": {
       "version": "1.0.0",
       "dev": true,
       "optional": true
     },
-    "double-ended-queue": {
-      "version": "2.1.0-0",
-      "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz",
-      "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw="
-    },
     "duplexer3": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "optional": true,
       "requires": {
         "jsbn": "~0.1.0",
         "safer-buffer": "^2.1.0"
       "dev": true,
       "optional": true
     },
-    "encoding-down": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz",
-      "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==",
-      "requires": {
-        "abstract-leveldown": "^6.2.1",
-        "inherits": "^2.0.3",
-        "level-codec": "^9.0.0",
-        "level-errors": "^2.0.0"
-      }
-    },
     "encoding-japanese": {
       "version": "1.0.30",
       "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-1.0.30.tgz",
         "once": "^1.4.0"
       }
     },
-    "end-stream": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz",
-      "integrity": "sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=",
-      "requires": {
-        "write-stream": "~0.4.3"
-      }
-    },
     "env-paths": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
       "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
       "dev": true
     },
-    "errno": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
-      "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
-      "requires": {
-        "prr": "~1.0.1"
-      }
-    },
     "error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
       "dev": true,
       "optional": true
     },
-    "event-target-shim": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
-      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
-    },
     "extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "optional": true
     },
     "extract-zip": {
       "version": "1.7.0",
     "extsprintf": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "optional": true
     },
     "fast-deep-equal": {
       "version": "3.1.3",
     "fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+      "optional": true
     },
     "fd-slicer": {
       "version": "1.1.0",
         "pend": "~1.2.0"
       }
     },
-    "fetch-cookie": {
-      "version": "0.10.1",
-      "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.10.1.tgz",
-      "integrity": "sha512-beB+VEd4cNeVG1PY+ee74+PkuCQnik78pgLi5Ah/7qdUfov8IctU0vLUbBT8/10Ma5GMBeI4wtxhGrEfKNYs2g==",
-      "requires": {
-        "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0"
-      }
-    },
     "filename-reserved-regex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
     "forever-agent": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "optional": 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==",
+      "optional": true,
       "requires": {
         "asynckit": "^0.4.0",
         "combined-stream": "^1.0.6",
       "version": "0.1.7",
       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "optional": true,
       "requires": {
         "assert-plus": "^1.0.0"
       }
     "har-schema": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "optional": true
     },
     "har-validator": {
       "version": "5.1.5",
         "har-schema": "^2.0.0"
       }
     },
-    "has-own-property-x": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/has-own-property-x/-/has-own-property-x-3.2.0.tgz",
-      "integrity": "sha512-HtRQTYpRFz/YVaQ7jh2mU5iorMAxFcML9FNOLMI1f8VNJ2K0hpOlXoi1a+nmVl6oUcGnhd6zYOFAVe7NUFStyQ==",
-      "requires": {
-        "cached-constructors-x": "^1.0.0",
-        "to-object-x": "^1.5.0",
-        "to-property-key-x": "^2.0.2"
-      }
-    },
-    "has-symbol-support-x": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
-      "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw=="
-    },
-    "has-symbols": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
-      "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
-    },
-    "has-to-string-tag-x": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
-      "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
-      "requires": {
-        "has-symbol-support-x": "^1.4.1"
-      }
-    },
     "has-unicode": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
       "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
     },
-    "hawk": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
-      "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
-      "requires": {
-        "boom": "4.x.x",
-        "cryptiles": "3.x.x",
-        "hoek": "4.x.x",
-        "sntp": "2.x.x"
-      }
-    },
-    "hoek": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
-      "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
-    },
     "hosted-git-info": {
       "version": "2.8.8",
       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "optional": true,
       "requires": {
         "assert-plus": "^1.0.0",
         "jsprim": "^1.2.2",
         "safer-buffer": ">= 2.1.2 < 3"
       }
     },
-    "ieee754": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
-    },
     "ignore-walk": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
         "minimatch": "^3.0.4"
       }
     },
-    "immediate": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
-      "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
-    },
-    "infinity-x": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.2.tgz",
-      "integrity": "sha512-2Ioz+exrAwlHxFBaDHQIbvUyjKFt0YjIal34/agfzx738aT1zBQwSU5A8Zgb1IQ2r24BtXrkeZZusxE40MyZaQ=="
-    },
     "inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
     },
-    "is-array-buffer-x": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/is-array-buffer-x/-/is-array-buffer-x-1.7.0.tgz",
-      "integrity": "sha512-ufSZRMY2WZX5xyNvk0NOZAG7cgi35B/sGQDGqv8w0X7MoQ2GC9vedanJhuYTPaC4PUCqLQsda1w7NF+dPZmAJw==",
-      "requires": {
-        "attempt-x": "^1.1.0",
-        "has-to-string-tag-x": "^1.4.1",
-        "is-object-like-x": "^1.5.1",
-        "object-get-own-property-descriptor-x": "^3.2.0",
-        "to-string-tag-x": "^1.4.1"
-      }
-    },
     "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-date-object": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
-      "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
-    },
-    "is-falsey-x": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-falsey-x/-/is-falsey-x-1.0.3.tgz",
-      "integrity": "sha512-RWjusR6LXAhGa0Vus7aD1rwJuJwdJsvG3daAVMDvOAgvGuGm4eilNgoSuXhpv2/2qpLDvioAKTNb3t3XYidCNg==",
-      "requires": {
-        "to-boolean-x": "^1.0.2"
-      }
-    },
-    "is-finite-x": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/is-finite-x/-/is-finite-x-3.0.4.tgz",
-      "integrity": "sha512-wdSI5zk/Pl21HzGcLWFoFzuDa8gsgcqhwZGAZryL2eU7RKf7+g+q4jL2gGItrBs/YtspkjOrJ4JxXNZqquoAWA==",
-      "requires": {
-        "infinity-x": "^1.0.1",
-        "is-nan-x": "^1.0.2"
-      }
-    },
     "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",
         "number-is-nan": "^1.0.0"
       }
     },
-    "is-function-x": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/is-function-x/-/is-function-x-3.3.0.tgz",
-      "integrity": "sha512-SreSSU1dlgYaXR5c0mm4qJHKYHIiGiEY+7Cd8/aRLLoMP/VvofD2XcWgBnP833ajpU5XzXbUSpfysnfKZLJFlg==",
-      "requires": {
-        "attempt-x": "^1.1.1",
-        "has-to-string-tag-x": "^1.4.1",
-        "is-falsey-x": "^1.0.1",
-        "is-primitive": "^2.0.0",
-        "normalize-space-x": "^3.0.0",
-        "replace-comments-x": "^2.0.0",
-        "to-boolean-x": "^1.0.1",
-        "to-string-tag-x": "^1.4.2"
-      },
-      "dependencies": {
-        "is-primitive": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
-          "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
-        }
-      }
-    },
-    "is-index-x": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-index-x/-/is-index-x-1.1.0.tgz",
-      "integrity": "sha512-qULKLMepQLGC8rSVdi8uF2vI4LiDrU9XSDg1D+Aa657GIB7GV1jHpga7uXgQvkt/cpQ5mVBHUFTpSehYSqT6+A==",
-      "requires": {
-        "math-clamp-x": "^1.2.0",
-        "max-safe-integer": "^1.0.1",
-        "to-integer-x": "^3.0.0",
-        "to-number-x": "^2.0.0",
-        "to-string-symbols-supported-x": "^1.0.0"
-      }
-    },
-    "is-nan-x": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-nan-x/-/is-nan-x-1.0.3.tgz",
-      "integrity": "sha512-WenNBLVGSZID8shogsB++42vF7gvotCfneXM9KMCAKwNPXa8VfAu/RWwpqvnK7dLOP4Z7uitocb0TZ6rAiOccA=="
-    },
-    "is-nil-x": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/is-nil-x/-/is-nil-x-1.4.2.tgz",
-      "integrity": "sha512-9aDY7ir7IGb5HlgqL+b38v2YMxf8S7MEHHxjHGzUhijg2crq47RKdxL37bS6dU0VN87wy2IBZP4akgQtIXmyvg==",
-      "requires": {
-        "lodash.isnull": "^3.0.0",
-        "validate.io-undefined": "^1.0.3"
-      }
-    },
-    "is-object-like-x": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.7.1.tgz",
-      "integrity": "sha512-89nz+kESAW2Y7udq+PdRX/dZnRN2WP1b19Gdv4OYE1Xjoekn1xf31l0ZPzT40qdPD7I2nveNFm9rxxI0vmnGHA==",
-      "requires": {
-        "is-function-x": "^3.3.0",
-        "is-primitive": "^3.0.0"
-      }
-    },
-    "is-primitive": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz",
-      "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w=="
-    },
-    "is-string": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
-      "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
-    },
-    "is-symbol": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-      "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-      "requires": {
-        "has-symbols": "^1.0.1"
-      }
-    },
     "is-typedarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "optional": true
     },
     "isarray": {
       "version": "1.0.0",
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "optional": true
     },
     "jsbn": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "optional": true
     },
     "json-buffer": {
       "version": "3.0.0",
     "json-schema": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "optional": true
     },
     "json-schema-traverse": {
       "version": "0.4.1",
     "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="
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "optional": true
     },
     "jsonfile": {
       "version": "4.0.0",
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
       "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "optional": true,
       "requires": {
         "assert-plus": "1.0.0",
         "extsprintf": "1.3.0",
         "json-buffer": "3.0.0"
       }
     },
-    "level": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz",
-      "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==",
-      "requires": {
-        "level-js": "^5.0.0",
-        "level-packager": "^5.1.0",
-        "leveldown": "^5.4.0"
-      }
-    },
-    "level-codec": {
-      "version": "9.0.2",
-      "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz",
-      "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==",
-      "requires": {
-        "buffer": "^5.6.0"
-      }
-    },
-    "level-concat-iterator": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
-      "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw=="
-    },
-    "level-errors": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz",
-      "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==",
-      "requires": {
-        "errno": "~0.1.1"
-      }
-    },
-    "level-iterator-stream": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz",
-      "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==",
-      "requires": {
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.4.0",
-        "xtend": "^4.0.2"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "3.6.0",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
-      }
-    },
-    "level-js": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz",
-      "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==",
-      "requires": {
-        "abstract-leveldown": "~6.2.3",
-        "buffer": "^5.5.0",
-        "inherits": "^2.0.3",
-        "ltgt": "^2.1.2"
-      }
-    },
-    "level-packager": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz",
-      "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==",
-      "requires": {
-        "encoding-down": "^6.3.0",
-        "levelup": "^4.3.2"
-      }
-    },
-    "level-supports": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
-      "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
-      "requires": {
-        "xtend": "^4.0.2"
-      }
-    },
-    "level-write-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz",
-      "integrity": "sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=",
-      "requires": {
-        "end-stream": "~0.1.0"
-      }
-    },
-    "leveldown": {
-      "version": "5.6.0",
-      "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz",
-      "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==",
-      "requires": {
-        "abstract-leveldown": "~6.2.1",
-        "napi-macros": "~2.0.0",
-        "node-gyp-build": "~4.1.0"
-      }
-    },
-    "levelup": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz",
-      "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==",
-      "requires": {
-        "deferred-leveldown": "~5.3.0",
-        "level-errors": "~2.0.0",
-        "level-iterator-stream": "~4.0.0",
-        "level-supports": "~1.0.0",
-        "xtend": "~4.0.0"
-      }
-    },
-    "lie": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
-      "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
-      "requires": {
-        "immediate": "~3.0.5"
-      },
-      "dependencies": {
-        "immediate": {
-          "version": "3.0.6",
-          "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
-          "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
-        }
-      }
-    },
     "load-json-file": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
       "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
       "dev": true
     },
-    "lodash.isnull": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash.isnull/-/lodash.isnull-3.0.0.tgz",
-      "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4="
-    },
     "lowercase-keys": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
       "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
       "dev": true
     },
-    "ltgt": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
-      "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU="
-    },
     "matcher": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
         "escape-string-regexp": "^4.0.0"
       }
     },
-    "math-clamp-x": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/math-clamp-x/-/math-clamp-x-1.2.0.tgz",
-      "integrity": "sha512-tqpjpBcIf9UulApz3EjWXqTZpMlr2vLN9PryC9ghoyCuRmqZaf3JJhPddzgQpJnKLi2QhoFnvKBFtJekAIBSYg==",
-      "requires": {
-        "to-number-x": "^2.0.0"
-      }
-    },
-    "math-sign-x": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/math-sign-x/-/math-sign-x-3.0.0.tgz",
-      "integrity": "sha512-OzPas41Pn4d16KHnaXmGxxY3/l3zK4OIXtmIwdhgZsxz4FDDcNnbrABYPg2vGfxIkaT9ezGnzDviRH7RfF44jQ==",
-      "requires": {
-        "is-nan-x": "^1.0.1",
-        "to-number-x": "^2.0.0"
-      }
-    },
-    "max-safe-integer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz",
-      "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA="
-    },
     "mime-db": {
       "version": "1.44.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+      "optional": true
     },
     "mime-types": {
       "version": "2.1.27",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
       "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+      "optional": true,
       "requires": {
         "mime-db": "1.44.0"
       }
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
-    "nan-x": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/nan-x/-/nan-x-1.0.2.tgz",
-      "integrity": "sha512-dndRmy03JQEN+Nh6WjQl7/OstIozeEmrtWe4TE7mEqJ8W8oMD8m2tHjsLPWt//e3hLAeRSbs4pxMyc5pk/nCkQ=="
-    },
-    "napi-macros": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
-      "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg=="
-    },
     "needle": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz",
       "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz",
       "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA=="
     },
-    "node-fetch": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
-      "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
-    },
     "node-gyp": {
       "version": "3.8.0",
       "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
         }
       }
     },
-    "node-gyp-build": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz",
-      "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ=="
-    },
     "node-pre-gyp": {
       "version": "0.11.0",
       "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
         }
       }
     },
+    "nodemailer": {
+      "version": "6.4.17",
+      "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.17.tgz",
+      "integrity": "sha512-89ps+SBGpo0D4Bi5ZrxcrCiRFaMmkCt+gItMXQGzEtZVR3uAD3QAQIDoxTWnx3ky0Dwwy/dhFrQ+6NNGXpw/qQ=="
+    },
     "nopt": {
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
         }
       }
     },
-    "normalize-space-x": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-space-x/-/normalize-space-x-3.0.0.tgz",
-      "integrity": "sha512-tbCJerqZCCHPst4rRKgsTanLf45fjOyeAU5zE3mhDxJtFJKt66q39g2XArWhXelgTFVib8mNBUm6Wrd0LxYcfQ==",
-      "requires": {
-        "cached-constructors-x": "^1.0.0",
-        "trim-x": "^3.0.0",
-        "white-space-x": "^3.0.0"
-      }
-    },
     "normalize-url": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
       "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
     },
-    "object-get-own-property-descriptor-x": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz",
-      "integrity": "sha512-Z/0fIrptD9YuzN+SNK/1kxAEaBcPQM4gSrtOSMSi9eplnL/AbyQcAyAlreAoAzmBon+DQ1Z+AdhxyQSvav5Fyg==",
-      "requires": {
-        "attempt-x": "^1.1.0",
-        "has-own-property-x": "^3.1.1",
-        "has-symbol-support-x": "^1.4.1",
-        "is-falsey-x": "^1.0.0",
-        "is-index-x": "^1.0.0",
-        "is-primitive": "^2.0.0",
-        "is-string": "^1.0.4",
-        "property-is-enumerable-x": "^1.1.0",
-        "to-object-x": "^1.4.1",
-        "to-property-key-x": "^2.0.1"
-      },
-      "dependencies": {
-        "is-primitive": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
-          "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
-        }
-      }
-    },
     "object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
         "author-regex": "^1.0.0"
       }
     },
-    "parse-int-x": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/parse-int-x/-/parse-int-x-2.0.0.tgz",
-      "integrity": "sha512-NIMm52gmd1+0qxJK8lV3OZ4zzWpRH1xcz9xCHXl+DNzddwUdS4NEtd7BmTeK7iCIXoaK5e6BoDMHgieH2eNIhg==",
-      "requires": {
-        "cached-constructors-x": "^1.0.0",
-        "nan-x": "^1.0.0",
-        "to-string-x": "^1.4.2",
-        "trim-left-x": "^3.0.0"
-      }
-    },
     "parse-json": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
     "performance-now": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "optional": true
     },
     "pify": {
       "version": "3.0.0",
         "xmldom": "0.1.x"
       }
     },
-    "pouchdb": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.2.2.tgz",
-      "integrity": "sha512-5gf5nw5XH/2H/DJj8b0YkvG9fhA/4Jt6kL0Y8QjtztVjb1y4J19Rg4rG+fUbXu96gsUrlyIvZ3XfM0b4mogGmw==",
-      "requires": {
-        "abort-controller": "3.0.0",
-        "argsarray": "0.0.1",
-        "buffer-from": "1.1.1",
-        "clone-buffer": "1.0.0",
-        "double-ended-queue": "2.1.0-0",
-        "fetch-cookie": "0.10.1",
-        "immediate": "3.3.0",
-        "inherits": "2.0.4",
-        "level": "6.0.1",
-        "level-codec": "9.0.2",
-        "level-write-stream": "1.0.0",
-        "leveldown": "5.6.0",
-        "levelup": "4.4.0",
-        "ltgt": "2.2.1",
-        "node-fetch": "2.6.0",
-        "readable-stream": "1.1.14",
-        "spark-md5": "3.0.1",
-        "through2": "3.0.2",
-        "uuid": "8.1.0",
-        "vuvuzela": "1.0.3"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
-        },
-        "readable-stream": {
-          "version": "1.1.14",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
-            "isarray": "0.0.1",
-            "string_decoder": "~0.10.x"
-          }
-        },
-        "string_decoder": {
-          "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
-        },
-        "uuid": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz",
-          "integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg=="
-        }
-      }
-    },
-    "pouchdb-ajax": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmjs.org/pouchdb-ajax/-/pouchdb-ajax-6.4.3.tgz",
-      "integrity": "sha512-3ySZrbEYjbosXShWFLk3xW8prrrUOG8z5aXKy+6lK/nokqdpqGj9NQX/gffy15VcDswbJyQtKpVQRevQlLuAGA==",
-      "requires": {
-        "buffer-from": "0.1.1",
-        "pouchdb-binary-utils": "6.4.3",
-        "pouchdb-errors": "6.4.3",
-        "pouchdb-promise": "6.4.3",
-        "pouchdb-utils": "6.4.3",
-        "request": "2.83.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "5.5.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
-          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
-          "requires": {
-            "co": "^4.6.0",
-            "fast-deep-equal": "^1.0.0",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.3.0"
-          }
-        },
-        "buffer-from": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz",
-          "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=",
-          "requires": {
-            "is-array-buffer-x": "^1.0.13"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
-          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
-        },
-        "har-validator": {
-          "version": "5.0.3",
-          "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
-          "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
-          "requires": {
-            "ajv": "^5.1.0",
-            "har-schema": "^2.0.0"
-          }
-        },
-        "json-schema-traverse": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
-          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
-        },
-        "oauth-sign": {
-          "version": "0.8.2",
-          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-          "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
-        },
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
-        },
-        "request": {
-          "version": "2.83.0",
-          "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
-          "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
-          "requires": {
-            "aws-sign2": "~0.7.0",
-            "aws4": "^1.6.0",
-            "caseless": "~0.12.0",
-            "combined-stream": "~1.0.5",
-            "extend": "~3.0.1",
-            "forever-agent": "~0.6.1",
-            "form-data": "~2.3.1",
-            "har-validator": "~5.0.3",
-            "hawk": "~6.0.2",
-            "http-signature": "~1.2.0",
-            "is-typedarray": "~1.0.0",
-            "isstream": "~0.1.2",
-            "json-stringify-safe": "~5.0.1",
-            "mime-types": "~2.1.17",
-            "oauth-sign": "~0.8.2",
-            "performance-now": "^2.1.0",
-            "qs": "~6.5.1",
-            "safe-buffer": "^5.1.1",
-            "stringstream": "~0.0.5",
-            "tough-cookie": "~2.3.3",
-            "tunnel-agent": "^0.6.0",
-            "uuid": "^3.1.0"
-          }
-        },
-        "tough-cookie": {
-          "version": "2.3.4",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
-          "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
-          "requires": {
-            "punycode": "^1.4.1"
-          }
-        }
-      }
-    },
-    "pouchdb-authentication": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/pouchdb-authentication/-/pouchdb-authentication-1.1.3.tgz",
-      "integrity": "sha512-xzxmqAK6+rtJlVcFwebLBDlY0dDD5aqEb+bT0xStFp3s6HPC1QEa9C1NzkBScNBb8UG2BygTrVRMJzJLTR2LrA==",
-      "requires": {
-        "inherits": "2.0.3",
-        "pouchdb-ajax": "~6.4.0",
-        "pouchdb-binary-utils": "~6.4.0",
-        "pouchdb-promise": "~6.4.0",
-        "pouchdb-utils": "~6.4.0",
-        "url-join": "4.0.0",
-        "url-parse": "1.2.0"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        }
-      }
-    },
-    "pouchdb-binary-utils": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-6.4.3.tgz",
-      "integrity": "sha512-eRKH/1eiZwrqNdAR3CL1XIIkq04I9hHIABHwIRboz1LjBSchKmaf4ZDngiWGDvRYT9Gl/MogGDGOk1WRMoV4wg==",
-      "requires": {
-        "buffer-from": "0.1.1"
-      },
-      "dependencies": {
-        "buffer-from": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz",
-          "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=",
-          "requires": {
-            "is-array-buffer-x": "^1.0.13"
-          }
-        }
-      }
-    },
-    "pouchdb-collections": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-6.4.3.tgz",
-      "integrity": "sha512-uWb9+hvjiijeyrCeEz/FUND1oj0AQK/f166egBOTofNlAwQLNrJUTn+uJ34b3NODAmKhg7+ZeDVvnl9D2pijuQ=="
-    },
-    "pouchdb-errors": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-6.4.3.tgz",
-      "integrity": "sha512-EU83ZZJjorwGL9DQZ9HAILY8D+ulX2RYVMtsCfIuzaIJEUrHh/dhSIy5854n42NBOUWug3gFDyO58w5k+64HTQ==",
-      "requires": {
-        "inherits": "2.0.3"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        }
-      }
-    },
-    "pouchdb-promise": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-6.4.3.tgz",
-      "integrity": "sha512-ruJaSFXwzsxRHQfwNHjQfsj58LBOY1RzGzde4PM5CWINZwFjCQAhZwfMrch2o/0oZT6d+Xtt0HTWhq35p3b0qw==",
-      "requires": {
-        "lie": "3.1.1"
-      }
-    },
-    "pouchdb-utils": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-6.4.3.tgz",
-      "integrity": "sha512-22QXh743YXl/afheeumrUKsO/0Q4Q8bvoboFp/1quXq//BDJa9nv55WUZX0l05t3VPW+nD/pse2FzU9cs3nEag==",
-      "requires": {
-        "argsarray": "0.0.1",
-        "clone-buffer": "1.0.0",
-        "immediate": "3.0.6",
-        "inherits": "2.0.3",
-        "pouchdb-collections": "6.4.3",
-        "pouchdb-errors": "6.4.3",
-        "pouchdb-promise": "6.4.3",
-        "uuid": "3.2.1"
-      },
-      "dependencies": {
-        "immediate": {
-          "version": "3.0.6",
-          "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
-          "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        },
-        "uuid": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
-          "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
-        }
-      }
-    },
     "prepend-http": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
       "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "dev": true
     },
-    "property-is-enumerable-x": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz",
-      "integrity": "sha512-22cKy3w3OpRswU6to9iKWDDlg+F9vF2REcwGlGW23jyLjHb1U/jJEWA44sWupOnkhGfDgotU6Lw+N2oyhNi+5A==",
-      "requires": {
-        "to-object-x": "^1.4.1",
-        "to-property-key-x": "^2.0.1"
-      }
-    },
     "proto-list": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
       "dev": true,
       "optional": true
     },
-    "prr": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
-    },
     "psl": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+      "optional": true
     },
     "pump": {
       "version": "3.0.0",
     "punycode": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+      "optional": 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=="
-    },
-    "querystringify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz",
-      "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs="
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+      "optional": true
     },
     "rc": {
       "version": "1.2.8",
         "util-deprecate": "~1.0.1"
       }
     },
-    "replace-comments-x": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/replace-comments-x/-/replace-comments-x-2.0.0.tgz",
-      "integrity": "sha512-+vMP4jqU+8HboLWms6YMNEiaZG5hh1oR6ENCnGYDF/UQ7aYiJUK/8tcl3+KZAHRCKKa3gqzrfiarlUBHQSgRlg==",
-      "requires": {
-        "require-coercible-to-string-x": "^1.0.0",
-        "to-string-x": "^1.4.2"
-      }
-    },
     "request": {
       "version": "2.88.2",
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
         "uuid": "^3.3.2"
       }
     },
-    "require-coercible-to-string-x": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.2.tgz",
-      "integrity": "sha512-GZ3BSCL0n/zhho8ITganW9FGPh0Kxhq71nCjck8Qau/30Wf4Po8a3XpQdzEMFiXCwZ/0m0E3lKSdSG8gkcIofQ==",
-      "requires": {
-        "require-object-coercible-x": "^1.4.3",
-        "to-string-x": "^1.4.5"
-      }
-    },
-    "require-object-coercible-x": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/require-object-coercible-x/-/require-object-coercible-x-1.4.3.tgz",
-      "integrity": "sha512-5wEaS+NIiU5HLJQTqBQ+6XHtX7yplUS374j/H/nRDlc7rMWfENqp026jnUHWAOCZ+ekixkXuFHEnTF28oqqVLA==",
-      "requires": {
-        "is-nil-x": "^1.4.2"
-      }
-    },
-    "requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
-    },
     "resolve": {
       "version": "1.17.0",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
       "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
     },
-    "sntp": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
-      "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
-      "requires": {
-        "hoek": "4.x.x"
-      }
-    },
-    "spark-md5": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.1.tgz",
-      "integrity": "sha512-0tF3AGSD1ppQeuffsLDIOWlKUd3lS92tFxcsrh5Pe3ZphhnoK+oXIBTzOAThZCiuINZLvpiLH/1VS1/ANEJVig=="
-    },
     "spdx-correct": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
       "version": "1.16.1",
       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
       "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "optional": true,
       "requires": {
         "asn1": "~0.2.3",
         "assert-plus": "^1.0.0",
         "safe-buffer": "~5.1.0"
       }
     },
-    "stringstream": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
-      "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA=="
-    },
     "strip-ansi": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
         "inherits": "2"
       }
     },
-    "through2": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
-      "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
-      "requires": {
-        "inherits": "^2.0.4",
-        "readable-stream": "2 || 3"
-      }
-    },
     "timsort": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
       "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
     },
-    "to-boolean-x": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/to-boolean-x/-/to-boolean-x-1.0.3.tgz",
-      "integrity": "sha512-kQiMyJUgFprL8J+0CfgJuaSFKJMs3EvFe27/6aj/hVzVZT0HY4aA1QjPldLNxzBmjhLcapp7CctYHuD8QqtS3g=="
-    },
-    "to-integer-x": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/to-integer-x/-/to-integer-x-3.0.0.tgz",
-      "integrity": "sha512-794L2Lpwjtynm7RxahJi2YdbRY75gTxUW27TMuN26UgwPkmJb/+HPhkFEFbz+E4vNoiP0dxq5tq5fkXoXLaK/w==",
-      "requires": {
-        "is-finite-x": "^3.0.2",
-        "is-nan-x": "^1.0.1",
-        "math-sign-x": "^3.0.0",
-        "to-number-x": "^2.0.0"
-      }
-    },
-    "to-number-x": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-number-x/-/to-number-x-2.0.0.tgz",
-      "integrity": "sha512-lGOnCoccUoSzjZ/9Uen8TC4+VFaQcFGhTroWTv2tYWxXgyJV1zqAZ8hEIMkez/Eo790fBMOjidTnQ/OJSCvAoQ==",
-      "requires": {
-        "cached-constructors-x": "^1.0.0",
-        "nan-x": "^1.0.0",
-        "parse-int-x": "^2.0.0",
-        "to-primitive-x": "^1.1.0",
-        "trim-x": "^3.0.0"
-      }
-    },
-    "to-object-x": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/to-object-x/-/to-object-x-1.5.0.tgz",
-      "integrity": "sha512-AKn5GQcdWky+s20vjWkt+Wa6y3dxQH3yQyMBhOfBOPldUwqwhgvlqcIg5H092ntNc+TX8/Cxzs1kMHH19pyCnA==",
-      "requires": {
-        "cached-constructors-x": "^1.0.0",
-        "require-object-coercible-x": "^1.4.1"
-      }
-    },
-    "to-primitive-x": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/to-primitive-x/-/to-primitive-x-1.1.0.tgz",
-      "integrity": "sha512-gyMY0gi3wjK3e4MUBKqv9Zl8QGcWguIkaUr2VJmoBEsOpDcpDZSEyljR773eVG4maS48uX7muLkoQoh/BA82OQ==",
-      "requires": {
-        "has-symbol-support-x": "^1.4.1",
-        "is-date-object": "^1.0.1",
-        "is-function-x": "^3.2.0",
-        "is-nil-x": "^1.4.1",
-        "is-primitive": "^2.0.0",
-        "is-symbol": "^1.0.1",
-        "require-object-coercible-x": "^1.4.1",
-        "validate.io-undefined": "^1.0.3"
-      },
-      "dependencies": {
-        "is-primitive": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
-          "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
-        }
-      }
-    },
-    "to-property-key-x": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/to-property-key-x/-/to-property-key-x-2.0.2.tgz",
-      "integrity": "sha512-YISLpZFYIazNm0P8hLsKEEUEZ3m8U3+eDysJZqTu3+B9tQp+2TrMpaEGT8Agh4fZ5LSoums60/glNEzk5ozqrg==",
-      "requires": {
-        "has-symbol-support-x": "^1.4.1",
-        "to-primitive-x": "^1.1.0",
-        "to-string-x": "^1.4.2"
-      }
-    },
     "to-readable-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
       "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
       "dev": true
     },
-    "to-string-symbols-supported-x": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.2.tgz",
-      "integrity": "sha512-3MRqhIhSNVDsVAk4M6WNcuBZrAQe54W13xrXX6RzxXS+pA4nj6DQ96RegQS5z9BSNyYbFsBsPvMVDIpP+a/5RA==",
-      "requires": {
-        "cached-constructors-x": "^1.0.2",
-        "has-symbol-support-x": "^1.4.2",
-        "is-symbol": "^1.0.1"
-      }
-    },
-    "to-string-tag-x": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/to-string-tag-x/-/to-string-tag-x-1.4.3.tgz",
-      "integrity": "sha512-5+0EZ6dOVt/XArXmkooxPzWxmOR081HM/uXitUow7h11WYg5pPo15uYqDWuqO7ZY+O3Atn/dG26wcJCK+mFevg==",
-      "requires": {
-        "lodash.isnull": "^3.0.0",
-        "validate.io-undefined": "^1.0.3"
-      }
-    },
-    "to-string-x": {
-      "version": "1.4.5",
-      "resolved": "https://registry.npmjs.org/to-string-x/-/to-string-x-1.4.5.tgz",
-      "integrity": "sha512-5xzlZDyDa9BUWNjNzZzHgKQ95PnV7qjvEhbqpFaj1ixaHgfJXOFaa3xdMJ+WLYd4hhaMJaxt8Pt5uKaWXfruXA==",
-      "requires": {
-        "cached-constructors-x": "^1.0.0",
-        "is-symbol": "^1.0.1"
-      }
-    },
     "tough-cookie": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
       "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+      "optional": true,
       "requires": {
         "psl": "^1.1.28",
         "punycode": "^2.1.1"
       }
     },
-    "trim-left-x": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/trim-left-x/-/trim-left-x-3.0.0.tgz",
-      "integrity": "sha512-+m6cqkppI+CxQBTwWEZliOHpOBnCArGyMnS1WCLb6IRgukhTkiQu/TNEN5Lj2eM9jk8ewJsc7WxFZfmwNpRXWQ==",
-      "requires": {
-        "cached-constructors-x": "^1.0.0",
-        "require-coercible-to-string-x": "^1.0.0",
-        "white-space-x": "^3.0.0"
-      }
-    },
     "trim-repeated": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
         }
       }
     },
-    "trim-right-x": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/trim-right-x/-/trim-right-x-3.0.0.tgz",
-      "integrity": "sha512-iIqEsWEbWVodqdixJHi4FoayJkUxhoL4AvSNGp4FF4FfQKRPGizt8++/RnyC9od75y7P/S6EfONoVqP+NddiKA==",
-      "requires": {
-        "cached-constructors-x": "^1.0.0",
-        "require-coercible-to-string-x": "^1.0.0",
-        "white-space-x": "^3.0.0"
-      }
-    },
-    "trim-x": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/trim-x/-/trim-x-3.0.0.tgz",
-      "integrity": "sha512-w8s38RAUScQ6t3XqMkS75iz5ZkIYLQpVnv2lp3IuTS36JdlVzC54oe6okOf4Wz3UH4rr3XAb2xR3kR5Xei82fw==",
-      "requires": {
-        "trim-left-x": "^3.0.0",
-        "trim-right-x": "^3.0.0"
-      }
-    },
     "truncate-utf8-bytes": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "optional": 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="
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "optional": true
     },
     "type-fest": {
       "version": "0.13.1",
         "punycode": "^2.1.0"
       }
     },
-    "url-join": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz",
-      "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo="
-    },
-    "url-parse": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
-      "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==",
-      "requires": {
-        "querystringify": "~1.0.0",
-        "requires-port": "~1.0.0"
-      }
-    },
     "url-parse-lax": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
     "uuid": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+      "optional": true
     },
     "validate-npm-package-license": {
       "version": "3.0.4",
         "spdx-expression-parse": "^3.0.0"
       }
     },
-    "validate.io-undefined": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/validate.io-undefined/-/validate.io-undefined-1.0.3.tgz",
-      "integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q="
-    },
     "verror": {
       "version": "1.10.0",
       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "optional": true,
       "requires": {
         "assert-plus": "^1.0.0",
         "core-util-is": "1.0.2",
         "extsprintf": "^1.2.0"
       }
     },
-    "vuvuzela": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz",
-      "integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws="
-    },
     "which": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
         "isexe": "^2.0.0"
       }
     },
-    "white-space-x": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/white-space-x/-/white-space-x-3.0.1.tgz",
-      "integrity": "sha512-BwMFXQNPna/4RsNPOgldVYn+FkEv+lc3wUiFzuaW6Z2DH/oSk1UrRD6SBqDgWQO4JU+aBq3PVuPD9Vz0j7mh0w=="
-    },
     "wide-align": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
-    "write-stream": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz",
-      "integrity": "sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=",
-      "requires": {
-        "readable-stream": "~0.0.2"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz",
-          "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40="
-        }
-      }
-    },
     "xmlbuilder": {
       "version": "9.0.7",
       "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
       "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==",
       "dev": true
     },
-    "xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
-    },
     "yallist": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
index 4c04e0c..0e6dbdc 100644 (file)
@@ -24,8 +24,7 @@
     "btoa": "^1.2.1",
     "carbone": "^2.1.1",
     "eml-format2": "^0.5.0",
-    "pouchdb": "^7.2.2",
-    "pouchdb-authentication": "^1.1.3",
+    "nodemailer": "^6.4.17",
     "sqlite3": "^5.0.0"
   }
 }
index 30520ba..b9088e3 100644 (file)
@@ -1,3 +1,4 @@
 @echo off
 
-"C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" -compose "from='ksaffran@dks.lu',to='compabilite@co-labor.lu',subject='Coloradio: facture pour le mois novembre 2020',body='Bonjour,<br/><br/>'
\ No newline at end of file
+REM "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" -compose "from='ksaffran@dks.lu',to='compabilite@co-labor.lu',subject='Coloradio: facture pour le mois novembre 2020',body='Bonjour,<br/><br/>'
+outlook.exe /c ipm.note /m "kilian.saffran@gmail.com?cc=kilian@saffran.lu&bcc=support@dks.lu&subject=test subject&body=<h1>test body</h1>" /a test.txt
\ No newline at end of file