Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Печать табличек на палаты и кровати. Поможем медсестрам сократить рутинную работу. (https://javascript.ru/forum/misc/81135-pechat-tablichek-na-palaty-i-krovati-pomozhem-medsestram-sokratit-rutinnuyu-rabotu.html)

Motyan613 06.10.2020 21:26

Печать табличек на палаты и кровати. Поможем медсестрам сократить рутинную работу.
 
Вложений: 3
Приветствую вас, друзья программисты!
Я медбрат в 15ГКБ, которая до сих пор продолжает бороться с COVID19. И сейчас от сестер требуют, чтобы таблички на кровати и палаты были написаны на компьютере, а не от руки.
Сам немного (чуть больше, чем никак) разбираюсь в программировании и вот родилась идея хоть как-то сократить нагрузку на моих коллег.
Идея заключается в том, чтобы сестра сделала экспорт из ЕМИАС в ексель-файл, который загружается в скрипт с базой данных(JSON?) уже отпечатанных табличек. Далее необходимо сгенерировать список всех палат и пациентов с чекбоксами для печати. И скрипт формирует документ из табличек со всеми отмеченными пациентами и палатами(примеры табличек есть во вложении).
Выбрал JS так, как интерпретатор есть на каждом компе и нет необходимости в правах администратора для установки Java или Python например.
Из-за дикой усталости и апатии после работы не всегда получается заниматься этим проектом постоянно и думаю, без вашей помощи он так и останется в стадии зародыша.. буду благодарен, если поможете советом по конкретной теме или по архитектуре в целом.
Сегодня разобрался с выгрузкой из екселя и формированием отсортированного по палатам массива. Вывел список с чекбоксами, но они должны быть перед строкой пациента, а не над ней.. display: inline-block не работает, float:left работает, но список получается каскадом..
Короче к вечеру уже голова деревянная, а завтра на смену и после нее я не знаю когда подступлюсь к этому коду без вашей поддержки..
Заранее благодарю, Матвей.

Motyan613 06.10.2020 21:41

Вот код index.html
<html>
<head>
	<meta charset="utf-8" />
	<script src="https://code.jquery.com/jquery-2.1.4.js" integrity="sha256-siFczlgw4jULnUICcdm9gjQPZkw/YPDqhQ9+nAOScE4=" crossorigin="anonymous"></script>
	<script lang="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.7/xlsx.full.min.js"></script>
	<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
	<div id="navbar"><span>SheetJS </span></div>
	<div id="wrapper">
        
        <input type="file" id="input-excel" />
	</div>
	<div id ="list_div"></div>
	<script>
        $('#input-excel').change(function(e){
                var reader = new FileReader();
                reader.readAsArrayBuffer(e.target.files[0]);
                reader.onload = function(e) {
                        var data = new Uint8Array(reader.result);
                        var wb = XLSX.read(data,{type:'array'});
                        var sheet_name = wb.SheetNames[0];
                        var worksheet = wb.Sheets[sheet_name]
                        var patients = [];
                        var count_und = 0;
                        var index_cell = 6;
                        while(count_und < 2){
                        	var adress_cell = 'A' + String(index_cell);
                        	try {
                        		patients.push({
                        			'name' : worksheet['B' + String(index_cell)].v,
                        			'history' : worksheet['C' + String(index_cell)].v,
                        			'ward' : worksheet['D' + String(index_cell)].v,
                        			'date_hosp' : worksheet['F' + String(index_cell)].v
                        		});
                        		count_und = 0;
                        	} catch {
                        		count_und += 1;
                        	} finally {
                        		index_cell += 1;
                        	}
                        }
                        
                        patients.sort(SortByWard);
				        var div = document.getElementById('list_div');
				        var wards = [];
						for (var i = 0; i < patients.length; i++) {
							var new_elem = document.createElement('div');
							var ch_box_div = document.createElement('div');
							ch_box_div.className = "checkbox_div"
							div.appendChild(ch_box_div)
							var ch_box = document.createElement('input');
							ch_box.type = 'checkbox';
							ch_box.name = "to_print"
							ch_box.id = patients[i].history;
							ch_box_div.appendChild(ch_box);
							new_elem.innerText = patients[i].ward + " : " + 
				                                patients[i].name + " № истории: " + 
				                                patients[i].history + " Дата госпитализации: " +
				                                patients[i].date_hosp;
							div.appendChild(new_elem);
							if (wards.indexOf(patients[i].ward) == -1) {
								wards.push(patients[i].ward);
							}
				    	};
                }
        });
        function SortByWard(a, b) {
    		return a.ward.toLowerCase() > b.ward.toLowerCase() ? 1 : -1;
		};
	</script>
</body>
</html>


styles.css
.checkbox_div {
	display: inline-block;
}

Nexus 06.10.2020 22:46

Motyan613, вас не изнасилуют за публикацию персональных данных пациентов?

Motyan613 06.10.2020 22:57

Цитата:

Сообщение от Nexus (Сообщение 529549)
Motyan613, вас не изнасилуют за публикацию персональных данных пациентов?

Здесь их нет. Вымышленные ФИО и номера историй.
Даже отделения такого не существует.
Адреса я стер вообще, ибо для дела не нужны..

MallSerg 06.10.2020 23:56

Если данные в экселе почему не пользоваться стандартным слиянием из офиса?
https://youtu.be/JIVVuT04Je4?t=172

Nexus 07.10.2020 00:33

Вложений: 1
..

Motyan613 07.10.2020 00:36

Цитата:

Сообщение от MallSerg (Сообщение 529551)
Если данные в экселе почему не пользоваться стандартным слиянием из офиса?
https://youtu.be/JIVVuT04Je4?t=172

Спасибо за ссылку. Может быть действительно пригодится.
Идея моего скрипта в минимизации ручного труда. Должна быть база с пациентами, таблички которых уже отпечатаны и при сравнении с загруженной базой, должны по умолчанию отмечаться на печать только новые позиции. Как этот реализовать в офисе без макросов я не знаю. А макросы в офисе... Ну это такое...
К тому же на больничных машинах стоит бесплатный урезаный офис. Необходимого функционала может там не быть.

Motyan613 07.10.2020 00:57

Цитата:

Сообщение от Nexus (Сообщение 529552)
..

Блин, круто!
Спасибо, Nexus, тебе огромное!
Теперь буду въезжать в эту красотищу)
Но уже после смены..


Часовой пояс GMT +3, время: 23:24.