Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.10.2020, 21:26
Новичок на форуме
Отправить личное сообщение для Motyan613 Посмотреть профиль Найти все сообщения от Motyan613
 
Регистрация: 06.10.2020
Сообщений: 5

Печать табличек на палаты и кровати. Поможем медсестрам сократить рутинную работу.
Приветствую вас, друзья программисты!
Я медбрат в 15ГКБ, которая до сих пор продолжает бороться с COVID19. И сейчас от сестер требуют, чтобы таблички на кровати и палаты были написаны на компьютере, а не от руки.
Сам немного (чуть больше, чем никак) разбираюсь в программировании и вот родилась идея хоть как-то сократить нагрузку на моих коллег.
Идея заключается в том, чтобы сестра сделала экспорт из ЕМИАС в ексель-файл, который загружается в скрипт с базой данных(JSON?) уже отпечатанных табличек. Далее необходимо сгенерировать список всех палат и пациентов с чекбоксами для печати. И скрипт формирует документ из табличек со всеми отмеченными пациентами и палатами(примеры табличек есть во вложении).
Выбрал JS так, как интерпретатор есть на каждом компе и нет необходимости в правах администратора для установки Java или Python например.
Из-за дикой усталости и апатии после работы не всегда получается заниматься этим проектом постоянно и думаю, без вашей помощи он так и останется в стадии зародыша.. буду благодарен, если поможете советом по конкретной теме или по архитектуре в целом.
Сегодня разобрался с выгрузкой из екселя и формированием отсортированного по палатам массива. Вывел список с чекбоксами, но они должны быть перед строкой пациента, а не над ней.. display: inline-block не работает, float:left работает, но список получается каскадом..
Короче к вечеру уже голова деревянная, а завтра на смену и после нее я не знаю когда подступлюсь к этому коду без вашей поддержки..
Заранее благодарю, Матвей.
Изображения:
Тип файла: jpg 2020-10-06_20-51-00.jpg (17.1 Кб, 7 просмотров)
Тип файла: jpg 2020-10-06_20-57-17.jpg (17.8 Кб, 8 просмотров)
Вложения:
Тип файла: zip WardAndBed.zip (16.4 Кб, 5 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 06.10.2020, 21:41
Новичок на форуме
Отправить личное сообщение для Motyan613 Посмотреть профиль Найти все сообщения от Motyan613
 
Регистрация: 06.10.2020
Сообщений: 5

Вот код 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;
}
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2020, 22:46
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Motyan613, вас не изнасилуют за публикацию персональных данных пациентов?
Ответить с цитированием
  #4 (permalink)  
Старый 06.10.2020, 22:57
Новичок на форуме
Отправить личное сообщение для Motyan613 Посмотреть профиль Найти все сообщения от Motyan613
 
Регистрация: 06.10.2020
Сообщений: 5

Сообщение от Nexus Посмотреть сообщение
Motyan613, вас не изнасилуют за публикацию персональных данных пациентов?
Здесь их нет. Вымышленные ФИО и номера историй.
Даже отделения такого не существует.
Адреса я стер вообще, ибо для дела не нужны..

Последний раз редактировалось Motyan613, 06.10.2020 в 23:02.
Ответить с цитированием
  #5 (permalink)  
Старый 06.10.2020, 23:56
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Если данные в экселе почему не пользоваться стандартным слиянием из офиса?
https://youtu.be/JIVVuT04Je4?t=172
Ответить с цитированием
  #6 (permalink)  
Старый 07.10.2020, 00:33
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

..
Вложения:
Тип файла: zip WardAndBed.zip (4.1 Кб, 6 просмотров)
Ответить с цитированием
  #7 (permalink)  
Старый 07.10.2020, 00:36
Новичок на форуме
Отправить личное сообщение для Motyan613 Посмотреть профиль Найти все сообщения от Motyan613
 
Регистрация: 06.10.2020
Сообщений: 5

Сообщение от MallSerg Посмотреть сообщение
Если данные в экселе почему не пользоваться стандартным слиянием из офиса?
https://youtu.be/JIVVuT04Je4?t=172
Спасибо за ссылку. Может быть действительно пригодится.
Идея моего скрипта в минимизации ручного труда. Должна быть база с пациентами, таблички которых уже отпечатаны и при сравнении с загруженной базой, должны по умолчанию отмечаться на печать только новые позиции. Как этот реализовать в офисе без макросов я не знаю. А макросы в офисе... Ну это такое...
К тому же на больничных машинах стоит бесплатный урезаный офис. Необходимого функционала может там не быть.
Ответить с цитированием
  #8 (permalink)  
Старый 07.10.2020, 00:57
Новичок на форуме
Отправить личное сообщение для Motyan613 Посмотреть профиль Найти все сообщения от Motyan613
 
Регистрация: 06.10.2020
Сообщений: 5

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск