Учет оргтехники в организации v 2.0 2012 (работа в браузере) (закончено)
ВНИМАНИЕ! Данный материал устарел. Новую версию смотрите здесь
DEMO страница на sourceforge (test/test)
Скачать последнюю версию
Сообщить об ошибке
SVN репозитарий
- Общие сведения
- Лицензионное соглашение
- Материальное стимулирование
- Установка
- Обновление
- Настройка
- Первоначальное заполнение справочников
- Ведение реестра ТМЦ
- Планы помещений
- Отчеты
- Новости
- Меню «Имущество»
- Удаление объектов
- Выгрузка в формате xml
- Написание собственных модулей
- Обратная связь
Общие сведения
Лицензионное соглашение
В данный момент это ПО лицензируется и распространяется по принципу «Как есть». Вы можете скачивать, устанавливать, изменять исходные коды и использовать их для любых своих нужд, кроме продажи (ну или хочу долю!). Со своей стороны я так-же не гарантирую ничего: ни поддержки, ни обновлений, ни вообще работоспособности конечного продукта. Так-же я волен изменить данную лицензию в любой момент.
Материальное стимулирование
Несомненно приветствуется. Если вам хочется простимулировать автора данного ПО для дальнейших подвигов, свяжитесь со мной. У автора есть два пути обрести душевное спокойствие: материальное благополучие и слава. И то и другое автор очень любит.
Установка
Для успешного запуска ПО необходимы установленные Apache 2+,PHP 4+, MySQL 4+. Процесс развертывания LAMP достаточно легко найти в www.google.com Работа тестировалась на дистрибутиве Linux Debian, однако я уверен, что и любителей Windows проблем не возникнет.
Крайне не рекомендую СЕЙЧАС устанавливать данное ПО на «реальном» хостинге, «смотрящем» в интернет. Хотя работать конечно будет…но не долго…ибо «придурков-хакеров» сейчас много, а зайцев поди мало.. Я к тому, что на вопрос безопасности никто не тестировал данное ПО. Для локальной сети пойдет, но в интернет выставлять, яб не стал. Работы по тестированию-устранению дыр будут проведены в ближайших релизах, после чего скорее всего запущу «Демо» в интернете, чтоб можно было «пощупать» в «живую».
Далее:
- Скачиваем последнюю версию исходников с https://sourceforge.net/projects/webuseorg/files/
- Копируем/распаковываем их в папку с сайтом.
- Запускаем инсталлятор http://имя_сайта/install/index.php
- Открываем config.php, прописываем данные для соединения с БД
- Пробуем запустить.
- Удаляем папку install
Обновление
Обновления являются каммулятивными — для обновления до последней версии нужен только самый последний релиз. Т.е. скачиваем ПОСЛЕДНЮЮ версию данного ПО. Копируем её 1 в 1 с заменой файлов в каталог где стояла предыдущая версия (за исключением config.php в корне). Выполняем http://имя_или_IP_сайта/update.php Не забудьте после обновления удалить файл update.php
В ближайшее время планирую внедрить «проверку обновлений». При выходе новой версии, будет показано соответствующее уведомление в меню «Администрирование-Настройка».
Для любителей «свежатинки» — SVN репозитарий. По крайне мере сейчас (Декабрь 2012) там стабильно идут правки 1-2 раза в день.
Точно не будет и не планируется в ближайших релизах: автообновление. Вот может когда «деревья станут большими», вот тогда…
Первоначальная настройка
- Заходим на сайт
- Логинимся под пользователем test пароль test
- Идем в панель администрирования->Настройки
- Ставим галочки, заполняем.
Некоторые пояснения:
Аутенфикация через AD — если у вас поднят AD, то можно просто завести пользователей руками, пароль при проверке входа будет браться из AD.
И вообще будем слать что то по почте? — в случае поступления новой задачи пользователю, или движения ТМЦ по данному пользователю, ему будет отослано соответствующее письмо.
Первоначальное заполнение справочников
Для полноценной работы Вам необходимо сначала заполнить справочники. Хотя-бы основные позиции.
Ведение реестра ТМЦ
Заходим: Реестры -> Имущество. Здесь происходят основные операции с ТМЦ. Поступление, Редактирование (в т.ч. добавление фото), Перемещение, Печать штрихкода. Так-же реализован поиск ТМЦ. Для каждой единицы отображается история перемещения, а так-же нажатием на знак «+» слева, можно ввести дополнительные параметры, привязанные к группе номенклатуры (например типа операционной системы, количество памяти и т.п.).
Планы помещений
С версии 1.04 появилась возможность загружать в справочнике «Организации» план помещений (формат PNG) и размещать ТМЦ соответственно на этом плане
Отчеты
Заходим: Главная-> Отчеты. Здесь вы можете отобразить в удобовариваемом для печати формате некоторые данные по состоянию учета ТМЦ на текущую дату.
Сейчас отчетов не так уж много, но в ближайшее время , если не заленюсь, будет добавлено еще несколько..
Новости
Заходим: Реестры-> Новости. Добавляем новости. Они будут отображаться на главной странице. Последняя по дате новость помеченная как «закреплено» будет отображаться так-же на главной странице.
Меню «Имущество»
Заходим: Главная->Имущество. Предназначено для отображения имущества находящегося на попечении текущего пользователя (тот кто залогинился), как в помещении где он находится, так и на материальной ответственности.
Так-же для администратора есть возможность из данного раздела загружать фото.
Удаление объектов
Для окончательного удаления помеченных на удаление объектов разработан механизм поиска взаимосвязей помеченных на удаление объектов В случае если объект ни от чего не зависит то он будет удален. Правила для удаления объектов описаны в файле delete.xml
1 2 3 4 5 6 7 8 9 10 |
<table name="group_nome" comment="Группы номенклатуры"> <reqtable name="nome" comment="Номенклатура"> <fromkey>id</fromkey> <tokey>groupid</tokey> </reqtable> <reqtable name="group_param" comment="Параметры группы"> <fromkey>id</fromkey> <tokey>groupid</tokey> </reqtable> </table> |
Например вот этот кусок показывает зависимость таблицы group_nome от таблиц nome и group_param по ключам id и groupid. В случаеприсутстсвия в таблицах nome и group_param хоть одной связанной записи с group_nome, ни одна запись из group_nome удалена не будет
Выгрузка в формате xml
Это фактически механизм для взаимодействия с другими учетными системами. Например с 1С. Конкретно у меня получившийся файл загружается в специальный документ в 1С и сравнивается с учетом по данным 1С и с учетом в данной «учетной» системе. Подробнее о возможном использовании здесь
Написание собственных модулей
Достаточно просто написать собственный модуль, если необходимо добавить функционал. Мало того, это приветствуется! Если вы написали свой модуль, то пришлите его мне, я с удовольствием включу его в следующий релиз/обновление.
Для понимания процесса опишу логику загрузки ПО:
- грузится index.php из корня сайта
- подгружаются настройки, классы, подключается smarty.
- Если в url есть content_page=имя_модуля, то загружается сначала файл modules/имя_модуля.php, затем templates/шаблон_сайта/имя_модуля.tpl
- меню берется из папки modules/menu
1 |
<li><a href=?content_page=news>Новости</a></li> |
1 2 3 4 5 6 7 8 9 10 11 |
{if $user_mode==1} //проверяем что текущий пользователь - админ. 1- админ 0 - пользователь, пусто - не залогинился. <div class="hero-unit"> <table id="list2"></table> // сюда будет загружена таблица новостей при помощи jqGrid <div id="pager2"></div> // здесь будет панель управления таблицей <div id="pg_add_edit" name="pg_add_edit"></div> // сюда будет загружена <script type="text/javascript" src="controller/client/js/news.js"></script> // подгружаем скрипты JS. </div> {else} <div class="alert alert-error">Не достаточно прав!</div> {/if} |
- controller/client — располагаются скрипты вывода клиентской части (то что выводится на экран) на PHP, которые подгружаются Ajax
- controller/client/js — располагаются скрипты вывода клиентской части (то что выводится на экран) на JavaScript
- controller/server — скрипты которые подготавливают и выдают данные запрашиваемые Ajax кодом
- modules — располагаются PHP файлы которые выполняются перед обработкой *.tpl
- inc — общие для всех модулей файлы
- inc/classes — классы, общие для всех модулей
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// загружаем в таблицу #list2 список новостей jQuery("#list2").jqGrid({ url:'controller/server/news.php', datatype: "json", colNames:['Id','Дата','Заголовок','Закреплено','Действия'], colModel:[ {name:'id',index:'id', width:55,editable:false}, {name:'dt',index:'dt', width:60,editable:false}, {name:'title',index:'title', width:200,editable:true}, {name:'stiker',index:'stiker', width:200,editable:true,formatter: 'checkbox',edittype: 'checkbox', editoptions: {value: '1:0'}}, {name:'myac', width:80, fixed:true, sortable:false, resize:false, formatter:'actions',formatoptions:{keys:true}} ], autowidth: true, pager: '#pager2', sortname: 'id', scroll:1, viewrecords: true, sortorder: "asc", editurl:"controller/server/news.php", caption:"Новости" }); // загружаем навигационную панель jQuery("#list2").jqGrid('navGrid','#pager2',{edit:false,add:false,del:false,search:false}); // добавляем в таблицу кнопку "Добавить" jQuery("#list2").jqGrid('navButtonAdd','#pager2',{caption:"Добавить", onClickButton:function(){ $("#pg_add_edit" ).dialog( "destroy" ); $("#pg_add_edit").dialog({autoOpen: false,height: 370,width: 650,modal:true,title: "Добавление новости" }); $("#pg_add_edit" ).dialog( "open" ); $("#pg_add_edit").load("controller/client/news.php?step=add"); } }); // добавляем в таблицу кнопку "Отредактировать" jQuery("#list2").jqGrid('navButtonAdd','#pager2',{caption:"Отредактировать", onClickButton:function(){ var gsr = jQuery("#list2").jqGrid('getGridParam','selrow'); if(gsr){ $("#pg_add_edit" ).dialog( "destroy" ); $("#pg_add_edit").dialog({autoOpen: false,height: 370,width: 650,modal:true,title: "Редактирование новости" }); $("#pg_add_edit" ).dialog( "open" ); $("#pg_add_edit").load("controller/client/news.php?step=edit&id="+gsr); } else { alert("Сначала выберите строку!") } } }); |
4) Создаем файл controller/client/news.php, который подгружается в pg_add_edit после нажатия кнопок «Добавить» или «Редактировать»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
<? include("../../inc/class/config.php"); // загружаем классы настроек include("../../inc/class/users.php"); // загружаем классы настроек $cfg=new Tconfig; include("../../config.php"); // загружаем основные настройки, которых нет в БД include("../../inc/connect.php"); // соеденяемся с БД, получаем $cfg->base_id $cfg->GetFromBaseNoSmarty(); // получаем настройки из базы include("../../controller/server/login.php"); // проверяем вход пользователя include("../../controller/server/functions.php"); // подгружаем функции пользователя $step=$_GET["step"]; $id=$_GET["id"]; if ($step=='edit') { $result = mysql_query("SELECT * FROM news WHERE id='$id';",$cfg->base_id); while ($myrow = mysql_fetch_array($result)){ $dtpost=MySQLDateTimeToDateTime($myrow[dt]); $title=$myrow[title]; $txt=$myrow[body]; }; }; ?> <script type="text/javascript" src="templates/<? echo "$cfg->theme"; ?>/js/tiny.js"></script> <div id="messenger"></div> <form ENCTYPE="multipart/form-data" action="?content_page=news&step=<? echo "$step&newsid=$id"; ?>" method="post" name="form1" target="_self"> <table> <tr> <td> Дата: <br> <input name=dtpost id=dtpost value="<? echo "$dtpost"; ?>" size="14"><br> </td> <td> Заголовок:<br> <input name=title class="field span4" value="<? echo "$title";?>" placeholder="Заголовок" size="50"><br> </td> </tr> <tr> <td colspan="2" rowspan="1"> Тело:<br> <textarea name=txt class="field span6" rows="6" placeholder="Введите новость" cols=80> <? echo "$txt";?> </textarea> </td> </tr> </table> </form> <script> $(function(){ var field = new Array("dtpost", "title", "txt");//поля обязательные $("form1").submit(function() {// обрабатываем отправку формы var error=0; // индекс ошибки $("form").find(":input").each(function() {// проверяем каждое поле в форме for(var i=0;i<field.length;i++){ // если поле присутствует в списке обязательных if($(this).attr("name")==field[i]){ //проверяем поле формы на пустоту if(!$(this).val()){// если в поле пустое $(this).css('border', 'red 1px solid');// устанавливаем рамку красного цвета error=1;// определяем индекс ошибки } else{ $(this).css('border', 'gray 1px solid');// устанавливаем рамку обычного цвета } } } }) if(error==0){ // если ошибок нет то отправляем данные return true; } else { if(error==1) var err_text = "Не все обязательные поля заполнены!<hr>"; $("#messenger").html(err_text); $("#messenger").fadeIn("slow"); return false; //если в форме встретились ошибки , не позволяем отослать данные на сервер. } }) }); </script> <script type="text/javascript" src="templates/<? echo "$cfg->theme"; ?>/js/rulesdatepicker.js"></script> |
5) Создаем файл modules/news.php который и будет собственно обрабатывать submit данной формы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<? if (isset($_GET["step"])) {$step=$_GET["step"];} else {$step="";}; if (($user->mode==1) and ($step!='')) { $dtpost=DateToMySQLDateTime2(ClearHtml($_POST["dtpost"])); if ($dtpost==""){$err[]="Не введена дата!";}; $title=ClearHtml($_POST["title"]); if ($title==""){$err[]="Не задан заголовок!";}; $txt=$_POST["txt"]; if ($txt==""){$err[]="Нету тела новости!";}; $newsid=$_GET["newsid"]; if ($step=="add"){ if (count($err)==0){ $sql="INSERT INTO news (id,dt,title,body) VALUES (NULL,'$dtpost','$title','$txt')"; $result = mysql_query($sql,$cfg->base_id); if ($result==''){die('Не смог добавить новость!: ' . mysql_error());} }; }; if (($step=="edit") and ($newsid!="")){ if (count($err)==0){ $sql="UPDATE news SET dt='$dtpost',title='$title',body='$txt' WHERE id='$newsid'"; $result = mysql_query($sql,$cfg->base_id); if ($result==''){die('Не смог отредактировать новость!: ' . mysql_error());} }; }; }; ?> |
Вот так мы и получили рабочий модуль администрирования новостей.
Вообще конечно если действительно есть желание что-то «допилить», то выходите на меня, дам доступ к SVN, будем «пилить» вместе.
Обратная связь
Вы можете всегда найти меня по следующим контактам ссылка. Я буду весьма благодарен, если вы будете контактировать со мной если:
- хотите материально помочь проекту
- хотите уделить свое время для помощи в разработке проекта (есть SVN репозитарий). Адекватно оценивайте свои силы! Помощники, которых мне придется обучать азам программирования, не принесут пользы..
- нашли ошибку, а еще лучше если знаете как её устранить/уже устранили
- хотите написать нормальную документацию, а не то что читаете сейчас
Уведомление: Не вошедшее в последнее обновление… | Жизнь замечательных грибов